SCNNode.fltenedClone()不会减少绘制调用 [英] SCNNode.flattenedClone() does not reduce draw calls

查看:17
本文介绍了SCNNode.fltenedClone()不会减少绘制调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正试图通过减少绘制调用来优化我的SceneKit应用程序。从Apple Documentation和许多WWDC的谈话中可以看出,通过fltenedClone()将多个子节点合并为一个节点应该会减少绘制调用,但我无法使用此方法来减少绘制调用。

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

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

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

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

您可以在此处运行这个简单的应用程序,在模拟器或iOS设备中运行: https://drive.google.com/open?id=1ZJQZAnHtOCeK_3WzbdD0vLLJ2kWTKao- 请注意,您需要转动相机以更新绘制调用统计信息。

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)

屏幕截图

推荐答案

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

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

我向苹果提交了一个错误,他们证实抽签电话没有减少的原因是因为这5个单独的材料。因此,总而言之:SceneKit的表现符合预期。

这篇关于SCNNode.fltenedClone()不会减少绘制调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆