OpenGL,着色器中未使用的阴影贴图是不是很糟糕?

问题描述 投票:0回答:1

在着色器代码中有这样的东西是一个坏主意吗?

uniform sampler2DShadow shadowMaps[8];
uniform int numShadowMaps;

有了这个,可以有一个通用着色器,适用于0到8个阴影贴图的所有情况。或者,如果有8个不同的着色器和硬编码的阴影贴图数字,性能会更好吗?

opengl glsl uniform
1个回答
1
投票

这个问题实际上不仅仅是占据如此多的约束点。许多实现只允许16个纹理绑定点(每个着色器阶段),所以你只使用了一半的阴影。即使他们没有使用,他们仍然会占用这些资源。

最好使用2D数组纹理阴影贴图采样器(sampler2DArrayShadow)。您仍然可以使用制服来告诉您有多少数组图层填充了有用的数据。

另外,这样您就不会对着色器进行硬编码。因此,如果您确定阴影贴图的上限仅为6或应扩展为10,则不必更改着色器代码。

当然,缺点是数组纹理的所有层必须具有相同的大小。因此,如果您需要将某些阴影贴图缩小,则无法执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.