我想弄清楚是否有可能从屏幕外的多个光源计算硬阴影。
前言:场景非常复杂,高达数百万个三角形,多达100种不同的光源,灯光,材质和深度启用以及最高精度(至少10kx10k像素地面分辨率)。阴影只不过是平面投影阴影,也就是我通过预先乘以阴影矩阵(给定光源位置和平面)渲染对象本身。多个物体,多个光源,但只有一个平面。因此,实时是不可能的。也不可能考虑增量模板值,因为我只有一个字节(255个有用值),而且我可能有超过255个光源。
因此,我的想法是渲染屏幕外(纹理或渲染缓冲图像)。
对于每个光源,我计算我的阴影矩阵并应用它。然后我用特定的模板编号(即1)渲染我的第一个对象。然后我渲染我的第二个对象。我只需要在模板编号为1 和的情况下渲染它,我需要将所有其他像素归零,因为我只对硬阴影感兴趣。然后是第三个对象,依此类推。 最后,我重复第二个光源的所有过程,依此类推。
有可能吗?更好的纹理或渲染缓冲图像?一旦计算出硬阴影,我需要在cpu上检索它以进行分析并在场景中将其渲染到地面上。
理想情况下,我只需要连接到我的FBO的模板缓冲区,但他们说here:
模版 永远不会做一个STENCIL缓冲区。所有GPU和所有驱动程序都不支持独立的模板缓冲区。如果需要模板缓冲区,则需要设置Depth = 24,Stencil = 8缓冲区,也称为D24S8。请在此页面上搜索有关GL_EXT_packed_depth_stencil的示例。
今天这仍然有效吗?
环顾四周,我发现here是一种通过在每个对象之间渲染一个全屏多边形来归零所有其他像素的方法,但我想知道是否有更高效的...?