渲染的最基本技术之一是将相同的顶点/片段着色器应用于多个对象,这些对象可能使用不同的纹理。但是,我不明白在SceneKit中是如何完成的。
在我看来,如果要在两个不同的多边形中使用两个不同的纹理,则需要创建两个单独的SCNMaterial对象,并将它们应用于这些多边形(或者更确切地说,应用于包含这些多边形的SCNGeometry对象) )。
但是,如果创建两个SCNMaterial实例,则每个实例都有自己独立的顶点和片段着色器源,这些源将单独编译和使用。特别是如果您想以某种方式修改这些着色器。
这意味着如果我有一千个多边形,每个多边形都有自己不同的纹理,那么将会有一千个相同的顶点/片段着色器应用于它们,而不是在它们之间共享一个和相同的着色器实例。即使着色器完全相同。这非常低效。 (想象一下,如果您要创建一个像这样的基于2D精灵的引擎,例如。每个精灵都有自己的相同默认着色器的单独副本,而不是共享相同的着色器对象,这使得效率非常低。)
我无法找到一种方法来让两个具有不同纹理的SCNMaterial对象共享相同的着色器对象。或者在SceneKit中以任何其他方式执行此操作。
答案 0 :(得分:0)
SceneKit会自动检测这些材质是否可以共享相同的顶点和片段着色器,并且不会对它们进行两次编译。