我正在研究ARKit项目4个月了.我注意到在将一个子项添加到我的场景rootNode时,会有一个FPS丢弃.该设备冻结不到一秒钟.我做了很多研究和试验,注意到所有Apple的代码示例在放置对象时都会使这个FPS下降.无论是直接添加节点(scene.rootNode.addChild(child))还是在不同阶段(didUpdateAtTime,didApplyAnimations等等)的渲染器循环中添加节点都无关紧要.我发现一旦将一个对象添加到场景中,下一个添加的对象将立即呈现.我使用在SceneKit编辑器中创建的3D模型,克隆它以生成我的不同节点,然后将它们添加为子节点.我在放置物体之前做了这个装载工作.
仪器显示渲染器循环在冻结期间忙.
我找到的唯一解决方案是在开始整个体验之前将我的节点添加到加载屏幕后面的场景中.
这是游戏编程中使用它们之前渲染节点的正常行为吗?
多谢你们
您好,我正在尝试在节点周围产生发光效果。我使用了 SCNNode 过滤器属性并设置为 CIFilter 数组。
仅当节点后面没有我不理解的节点时,它才起作用并呈现。我尝试设置渲染顺序和 readDepth 选项,但没有成功。我现在真的很困惑,非常感谢您的意见!
请参阅屏幕截图以获取示例和代码示例。
func addBloom() -> [CIFilter]? {
let bloomFilter = CIFilter(name:"CIBloom")!
bloomFilter.setValue(10.0, forKey: "inputIntensity")
bloomFilter.setValue(30.0, forKey: "inputRadius")
return [bloomFilter]
}
Run Code Online (Sandbox Code Playgroud)
使用以下方式调用它:
myNode.filters = addBloom()
Run Code Online (Sandbox Code Playgroud)
最后一点,我注意到 CIFilter 要与 Metal 一起使用,抗锯齿需要设置为 .none
arSceneView.antialiasingMode = .none
Run Code Online (Sandbox Code Playgroud)
多谢!
阿德里安