在我的引擎中,我有很多处理指定纹理组合的着色器,例如DiffTexShader,NoTexShader,DiffTexNormalMapShader,DiffTexLightmapShader等。
现在我想添加阴影贴图效果。什么是更好的做法?在单独的传递中进行阴影贴图然后将原始场景与仅阴影场景结合起来是否更好?或者最好复制我的所有着色器并让它们能够使用shadowmap来填充阴影?
我认为第一种方法最好维护(只有一个额外的着色器用于渲染阴影),但比第二种方法慢得多。
答案 0 :(得分:1)
这是着色器的一般问题:拥有一个巨大的超级着色器并设置标志: - enableTexturing,enableNormalMap,enableLights,然后在代码中
if (enableTexturing) {
}
if (enableLights) {
}
或者像你的情况一样分开着色器。 我不会进入单独的通行证,因为它会对性能造成太大影响。
在glsl中,您可以在函数内部实现阴影,并将此函数作为另一个着色器附加到程序中。这样,程序中的其他着色器就可以看到它。
这是另一个类似的问题: