【发布时间】:2016-10-05 18:58:02
【问题描述】:
渲染的最基本技术之一是将相同的顶点/片段着色器应用于可能使用不同纹理的多个对象。但是,我不明白这是如何在 SceneKit 中完成的。
在我看来,如果你想在两个不同的多边形中使用两个不同的纹理,你需要创建两个单独的 SCNMaterial 对象,并将它们应用于这些多边形(或者更准确地说,应用于包含这些多边形的 SCNGeometry 对象)。
但是,如果您创建两个 SCNMaterial 实例,则每个实例都有自己独立的顶点和片段着色器源,它们将分别编译和使用。特别是如果您想以某种方式修改这些着色器。
这意味着如果我有一千个多边形,每个多边形都有自己不同的纹理,那么就会有一千个相同的顶点/片段着色器副本应用于它们,而不是在它们之间共享一个相同的着色器实例.即使着色器做同样的事情。这是非常低效的。 (例如,想象一下,如果您要创建一个像这样的基于精灵的 2D 引擎。每个单独的精灵都会有自己的相同默认着色器的单独副本,而不是共享相同的着色器对象,这使得效率非常低。)
我想不出办法让两个具有不同纹理的 SCNMaterial 对象共享相同的着色器对象。或者在 SceneKit 中以任何其他方式执行此操作。
【问题讨论】: