首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SCNNode.flattenedClone()不会减少绘制调用

SCNNode.flattenedClone()不会减少绘制调用
EN

Stack Overflow用户
提问于 2018-06-18 01:34:35
回答 1查看 696关注 0票数 3

我正在尝试通过减少绘制调用来优化我的SceneKit应用程序。根据Apple Documentation和许多WWDC的说法,通过flattenedClone()将许多子节点组合到一个节点中应该会减少绘制调用,但我无法通过使用这种方法来减少绘制调用。

我附上了一个简单的示例SceneKit应用程序,它演示了flattenedClone是如何不减少绘制调用的。

当应用程序启动时,将显示5个对象,您可以看到5个绘制调用。(如果你和相机互动的话,实际上是6个)。

然后,如果按下切换按钮,5个节点将被展平为单个节点。这仍然会导致5次绘制调用!

这似乎与围绕flattenedClone的各种文档和讨论完全矛盾。知道发生了什么事吗?

您可以在此处运行简单的应用程序,无论是在模拟器中还是在iOS设备中:https://drive.google.com/open?id=1ZJQZAnHtOCeK_3WzbdD0vLLJ2kWTKao-请注意,您需要旋转摄像头以更新绘制调用统计数据。

代码语言:javascript
复制
let nodes = SCNScene.init(named: 
"nodes.scn")!.rootNode.childNode(withName: "parentNode", recursively: true)!;

//Unflattened version:
scene.rootNode.addChildNode(nodes)

//Flattened version:
let flattenedNode = nodes.flattenedClone()
scene.rootNode.addChildNode(flattenedNode)

屏幕截图

EN

回答 1

Stack Overflow用户

发布于 2018-07-06 00:50:57

好了,我解决了这个问题。詹姆斯·P是对的。所有5个物体都使用了不同的材质。

如果您对所有对象使用相同的材质,然后将其展平为单个节点,则绘制调用将从6减少到2。您可以自己运行以下命令来查看:https://drive.google.com/open?id=1En3tZ9QFTZPd2-xJwCA-0CMO3QWX8UZt

我向苹果提交了一个bug,他们证实了为什么draw调用没有减少的原因是因为有5种不同的材料。因此,结论是: SceneKit的表现符合预期。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50898979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档