1

我正在使用阴影贴图制作点光源,目前我使用六个深度贴图纹理完成了它,每个纹理单独渲染并应用于光照贴图。这工作得很好,但性能成本很高。

现在,为了通过减少深度贴图着色器和光照贴图着色器之间的 FBO 更改和着色器交换来提高性能,我正在考虑几种方法。第一个涉及拥有一个比阴影贴图大六倍的纹理,并“一次”渲染所有点光深度图,然后使用此纹理在一次调用中布置光照贴图。是否可以只渲染部分纹理?

为了详细说明第一个示例,它将是这样的:

1. Set shadow map size to 128x128
2. Create a depth map texture of 384x256 (3 x 2 shadow map)
3. Render the first 'side' of a point light to the rectangle (0, 0, 128, 128)
4. Render the second 'side' to the rectangle (128, 0, 128, 128)
5. - 9. Render the other 'sides' in a similar manner
10. Swap to light map mode
11. Render the light map in a single call using the 'cube-map'-ish depth texture

我认为的第二种方法是使用 3D 纹理而不是部分渲染,但我仍然有一个类似的问题:我可以只渲染 3D 纹理的某个“层”而保留其他层吗?

4

1 回答 1

2

为什么组合阴影贴图有任何优势?

您必须渲染场景六次。

您可以渲染 6 次 128x128 FBO,然后创建 256x384 纹理并用之前渲染的纹理填充它。但是每像素的带宽和采样率保持不变。

在保留其他部分的同时渲染一个部分可以使用模板缓冲区完成,但在这种情况下,我看不到创建组合阴影贴图的任何意义。

希望这可以帮助。对于任何反馈,我们都表示感谢。

于 2013-06-04T11:49:32.817 回答