0

在我的引擎中,我有很多处理指定纹理组合的着色器,例如 DiffTexShader、NoTexShader、DiffTexNormalMapShader、DiffTexLightmapShader 等。

现在我想添加阴影映射效果。做什么比较好?在单独的通道中进行阴影贴图然后将原始场景与仅阴影场景结合起来会更好吗?或者最好复制我所有的着色器并让它们能够使用阴影贴图来计算阴影?

我认为第一种方法更好维护(只有一个额外的着色器用于渲染阴影),但比第二种方法慢得多。

4

1 回答 1

1

这是着色器的普遍问题:拥有一个巨大的超级着色器,只需设置标志:- enableTexturing、enableNormalMap、enableLights,然后在代码中

if (enableTexturing) {

}
if (enableLights) {

}

或者像你的情况一样有分离的着色器。我不会进行单独的传递,因为它会严重影响性能。

在 glsl 中,您可以在函数内部实现阴影并将此函数作为另一个着色器附加到程序中。这样它就可以被程序中的其他着色器看到。

这是另一个类似的问题:

于 2013-09-12T16:45:11.937 回答