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纹理的某个“图层”,同时保留其他图层?
实际使用几何着色器进行分层渲染怎么样? http://www.opengl.org/wiki/Geometry_Shader#Layered_rendering – Grimmy
@Grimmy这可以工作,但我尝试不使用GS出于兼容目的。 – manabreak
我不知道你有多少关于阴影映射的知识以及阴影应该具有的质量。所以我想提一些像_Cascaded Shadow Maps_,_Variance Shadow Maps_和_Perspective Shadow Maps_这样的技术,您可能应该在尝试优化之前考虑这些技术。因为取决于你使用的技术,你可以用它来优化。 –