Col*_*eel 5 cocoa objective-c scenekit swift
是否有足够的方法将贴花(纹理)添加到SCNNode
?现在,我所能做的就是SCNNode
用SCNPlane
几何图形创建新对象,为其漫反射内容分配纹理并将其添加到场景中……这种方法效率极低。
我想添加一个不属于场景的贴花-以提高游戏的性能。因为我想在地板节点上放置相对大量的贴花。
也许有点类似于粒子内部的工作原理?或其他一些快速图像绘制方法。
我已经尝试过@rickster的建议1
将SKEffectNode用作SpriteKit场景中的缓冲区—将splatters扔到一个效果节点中,直到它到达一定数量的子代为止,然后打开其shouldRasterize选项,以使其不再重新渲染其子代(并开始使用新的效果节点以获得更多效果)。
在同一个SceneKit showreel项目中-仅此一项就已经取得了不错的效果,FPS在持续播放场景的过程中并没有像连续5分钟那样下降。
期待实施建议2-我相信它将减少2D场景渲染时间(目前这是一个很大的数目)。
在此屏幕快照中,有5k贴花
我建议使用 SpriteKit 场景作为“泼溅”几何体的材质。苹果有示例代码,可以说明您在这里要做的很多事情:
\n\n从你的其他问题来看,你似乎已经开始朝这个方向前进......如果你详细说明问题,也许你会得到更好的帮助?
\n\n注意:该示例代码在 iOS 9 / macOS 10.11 及更高版本上有一个错误,该错误会干扰飞溅效果。您可以通过在以下位置找到这一行来解决这个问题AAPLGameViewController.m
:
ball.physicsBody.collisionBitMask = ~(0x4);\n
Run Code Online (Sandbox Code Playgroud)\n\n并在其后添加这一行:
\n\n ball.physicsBody.contactTestBitMask = ~(0x4);\n
Run Code Online (Sandbox Code Playgroud)\n\n您可能会在该演示中注意到,过了一会儿,您的帧速率开始下降 \xe2\x80\x94,SpriteKit 场景中的精灵数量不断增加,使得 2D 渲染消耗了越来越多的渲染循环。
\n\n\n(也许这是引发您其他问题的问题?)
不过,即使无法“截图”纹理,也有一些方法可以针对这种情况进行优化。一些需要调查的想法:
\n\n在 SpriteKit 场景中用作SKEffectNode
缓冲区 \xe2\x80\x94 将飞溅物扔到效果节点中,直到达到一定数量的子节点,然后打开其shouldRasterize
选项,以便不再重新渲染其子节点(并且开始使用新的效果节点以获得更多飞溅效果)。
大部分 2D 时间都浪费在绘制不可见的 SK 精灵上,因为它们被埋在其他精灵下面。(或者大部分都被掩埋了,只有几个像素可见。)因为你的,嗯,“油漆”都是相同的颜色,你可以使用一些简单的方法将你的 SpriteKit 场景分成多个区域,并决定何时一个区域被完全覆盖 \xe2\x80\x94 时,您可以从该区域删除所有精灵,用一个“完全覆盖”精灵替换它们,并停止在该区域添加新精灵。四叉树可能是一个很好的工具。
如果您想通过着色器修改器而不是使用基于 SpriteKit 的材质进行自定义绘制,则 SceneKit 命中测试到纹理坐标映射技巧同样有效,并且您可能能够找到更有效的长期覆盖跟踪方法在那里(可能受到#3中的一些技巧的帮助)。
如果您的泼溅不太频繁发生,您可以在 CPU 上渲染它们,然后在材质上设置新图像。
一个想法的长镜头,不知道它是否有效或性能良好:使用Core Image 作为累积缓冲区MTLTexture
来绘制泼溅,并将其渲染为与材质内容设置相同的值。(使用 SceneKit 的willRenderScene
回调每帧渲染一次。)
归档时间: |
|
查看次数: |
445 次 |
最近记录: |