体素锥跟踪定向光柔和阴影

时间:2013-01-20 02:59:16

标签: opengl shadow voxel shadows

我正在尝试实现锥形跟踪软阴影,如本文第8.3.1节所述:

http://maverick.inria.fr/Membres/Cyril.Crassin/thesis/CCrassinThesis_EN_Web.pdf

我在3D纹理中获得了层次化的mip映射体素结构,通过在片段着色器中绘制Sponza场景并将“体素片段”存储到3D纹理中进行体素化。 mip-mapping在计算着色器中完成。

作者解释了如何为点光源和区域光源创建柔和阴影,这是很容易理解的,但他没有解释定向光,这是Sponza场景使用的。

对于点光源,从点光源跟踪锥体,并且当其朝向场景的每个部分移动时其半径增加,在场景中描述为“体积”。但是,方向灯没有特定的光源点,只有一个方向。如何将此概念转换为使用定向灯?锥体必须是不同的形状,不是吗?

3 个答案:

答案 0 :(得分:0)

如果我太天真,请原谅我,但也许你可以为场景计算一个边界球,并考虑一个圆柱体穿过球体中心,半径相同,根据光线方向定向。然后你继续像点光源(或聚光灯)一样,但保持半径不变(即圆柱而不是圆锥)。

答案 1 :(得分:0)

如果尚未修复,您可以尝试从查询点(一个圆锥体)前进,直到到达3D纹理的边缘。由于纹理可能具有较大的尺寸,因此您可以考虑使用可参数化的步长进行行进。 要生成柔和阴影,请在查询点附近生成其他随机样本。

答案 2 :(得分:0)

在(无限)定向光的情况下,您想向光跟踪一个紧密的圆锥并累积不透明度。如果不透明度达到1.0,则会完全被遮挡。如果视锥离开场景AABB,您还可以安全地终止视锥跟踪并返回遮挡,该遮挡将用于确定在视锥原点落下多少阴影。

然后,此处的圆锥孔将控制阴影变得多么柔和。