我不知道如何克服三个渲染器的潜在限制,并希望有人可能有一个很好的设计来最好地克服这个问题。
假设您使用网格对象创建了一个场景并将基本材质应用于它们。因为您已经使用基本材质创建了对象,所以几何体将永远不会为其生成法线,因为基本材质不需要它。(以及大多数其他属性)。
假设我现在想再次渲染场景(用于后期处理),但这次我在渲染器上使用了覆盖材质。此覆盖材质是着色器材质,它确实需要法线。
渲染场景时,渲染器将应用覆盖材质,但它会抛出无效指针错误,因为新着色器需要普通属性但网格几何体没有任何属性,因为它是使用基本材质创建的。
那么我如何才能实现第二次渲染通道呢?第一次渲染必须使用基本材质,因为任何更多的东西都是多余的,可能会减慢应用程序的速度。第二遍必须包含法线作为其渲染后期处理效果的重要信息。我不能每次都在材质或几何体上调用 needsUpdate 作为渲染循环的一部分,并且必须在每帧重建它们将非常昂贵。
那么我该如何处理呢?甚至可能吗?显然,一个答案是我必须首先使用 phong 材料才能生成法线。但在只需要基本着色器和材质的复杂场景中,这可能非常昂贵。
任何帮助将不胜感激。
谢谢
编辑
忘了提到第二次渲染是在插件中完成的。而且它并不总是在场景之前渲染。后期处理效果可以随意添加和删除。