我希望显示相同的SCNGeometry1000次,但是使用特定的动画(例如旋转,移动的SCNActions ......)和不同的图像作为漫反射材质.
在检查文档和漂亮的WWDC演示文稿后,我发现创建一个节点的最佳方法是(因此它被称为1000次)
//self is a SCNNode
//helper.getStar3D() is a SCNNode template which has been flattened
//the geometry is light (36 triangles according to scenekit statistic)
//need to copy the geometry and material so it is not shared by all nodes
self.geometry=helper.getStar3D().geometry.copy() as SCNGeometry
self.geometry.firstMaterial = helper.getStar3D().geometry.firstMaterial.copy() as SCNMaterial
// texture has been extracted from a SKTextureAtlas
self.geometry.firstMaterial.diffuse.contents=allTextures.firstObject as SKTexture
Run Code Online (Sandbox Code Playgroud)
然而在iPad Air上,我只能达到40fps(当使用更新firstMaterial.diffuse.contents的块通过SCNAction动画纹理时为27 fps)
我认为使用SKTextureAtlas(因此所有图像都在相同的纹理上)并使用相同的几何体(显然当你复制几何体时,数据是共享的 - 参见使用sceneKit构建游戏),我会得到更多的fps,因为它应该允许OpenGL优化.我尝试使用SceneKit的很多参数但没有成功.
对于通知:SceneKit统计信息告诉我有1000个绘制调用,Xcode中的Graphics stats是:cpu 18ms,GPU是22ms,tiler 18%,渲染器80%,设备88%(不能等待新的SceneKit统计Xcode中的模块!)
所以我的问题是:你认为这是正常的表现还是有办法优化我想在SceneKit做什么?谢谢!
编辑:实际上SKTextureAtlas似乎并没有优化渲染,但似乎降低了帧速率.如果我使用UIImage代替来自SKTextureAtlas的SKTexture,我的性能提高了25%(50fps).动画纹理(每0.2秒更新每个对象的纹理)实际上是使用SKTextureAtlas或UIImages来消除性能(20fps).我想我在这里遗漏了一些东西,因为SKTextureAtlas通常用于优化.
我正在使用iOS8 UIDocumentPickerViewController将zip文件导出和导入到不同的云服务(iCloud,DropBox,Drive等)。
我在iCloud和Dropbox上没有问题,但是在Google云端硬盘中,我无法导入文件,因为在显示文件的界面中该文件显示为灰色(导出就像超级按钮一样工作)。
有趣的是,如果我通过Web界面将zip文件上传到云端硬盘,则文件不会显示为灰色,而是可以通过UIDocumentPickerViewController导入它-因此我怀疑这是在导出过程中出现的问题,当我想要创建该问题时导入zip文件。
笔记:
当然,可以通过Google云端硬盘网络界面下载导出的zip文件。
我尝试使用专有扩展名(而不是.zip)将其定义为info.plist,但结果相同(除从Drive导入外,其他所有地方都可以使用)
我以为问题是与传递给UIDocumentPickerViewController的UTI 有关,但是我尝试了所有类型的UTI(kUTTypeZipArchive,@“ public.archive”,@“ public.zip-archive”)(均不成功):或带有.zip扩展名)
我还导出/导入XML文件(具有专有扩展名),并且一切对于包括Drive在内的所有云服务都运行良好-我只需要在UIDocumentPickerViewController允许的UTI中添加“ public.data” UTI 。