是否有足够的方法在SCNNode
中添加贴花(纹理)?
现在,我所能做的就是用SCNNode
几何图形创建新的SCNPlane
为其漫反射内容分配纹理并将其添加到场景中...
这种方法效率极低。
我想添加一个不属于场景的贴花-以提高游戏的性能。
因为我想在地板节点上放置相对大量的贴花。
也许有点类似于粒子内部的工作原理?
或其他一些快速图像绘制方法。
我已经尝试过@rickster的建议1
在同一个SceneKit showreel项目中-仅此一项就已经取得了不错的效果,FPS在持续播放场景的过程中并没有像连续5分钟那样下降。
期待实现建议2
-我相信它将减少2D场景渲染时间(目前这是一个很大的数目)。
在此屏幕快照中,有5k贴花
最佳答案
我建议使用SpriteKit场景作为“飞溅”几何图形的 Material 。苹果公司的sample code可以说明您在这里要做什么的很多事情:
从other question来看,您似乎已经开始朝这个方向发展……如果您解决更多问题,也许会得到更好的帮助?
注意:该示例代码在iOS 9/macOS 10.11及更高版本上存在一个错误,该错误会干扰飞溅效果。您可以通过在
AAPLGameViewController.m
中找到以下行来解决此问题: ball.physicsBody.collisionBitMask = ~(0x4);
并在其后添加此行:
ball.physicsBody.contactTestBitMask = ~(0x4);
您可能会在该演示中注意到,一段时间后,帧速率开始下降-SpriteKit场景中不断增加的 Sprite 数量使2D渲染越来越多地占用了渲染循环。
(也许这是提示您other question的问题?)
即使没有“截屏”纹理的功能,也有一些方法可以针对这种情况进行优化。需要调查的一些想法:
SKEffectNode
用作缓冲区—将splatters扔到一个效果节点中,直到到达一定数量的子代为止,然后打开其 shouldRasterize
选项,以使其不再重新渲染其子代(并开始使用新效果节点以获取更多效果)。 MTLTexture
。 (使用SceneKit的willRenderScene
回调每帧渲染一次。)关于objective-c - SceneKit cocoa 贴花,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40913688/