【问题标题】:light view matrix in stable cascaded shadow mapping稳定级联阴影映射中的光视图矩阵
【发布时间】:2021-07-13 18:47:17
【问题描述】:

我最近实现了级联阴影贴图,并通过关注post 使其稳定。现在一切正常,除了当我将定向光移动到世界的顶部时,阴影突然变暗。通过一些调试,我发现光视图矩阵导致了问题。

这就是我计算视图矩阵的方式:

glm::mat4 view = glm::lookAt(
    center + lightDirNorm * nearOffset,
    center,
    camera.worldUP
);

center是边界球体中心,worldUPvec3(0.0, 1.0, 0.0)的常数值,lightDirNorm是从世界原点到光照位置的归一化光照方向。

当我将灯光位置移动到vec3(0.0, 20.0, 0.0) 时,lightDirNorm 变为vec3(0.0, 1.0, 0.0)。在这种情况下,视图方向与worldUP 向量在同一行。因此,不可能进行叉积并计算right 向量。这很麻烦,因为它是一个常见的光线方向。

因为阴影是稳定的,所以这里使用的worldUP 向量必须是恒定的。我能想到的唯一解决方法是向worldUP 向量添加一个小偏移量,使其像vec3(0.00001, 1.0, 0.0)

我想知道是否有更好的方法来处理这个问题?

【问题讨论】:

    标签: c++ math opengl glm-math shadow-mapping


    【解决方案1】:

    “使其稳定”不适用于方向改变的光源。稳定性是指光源静止时相机的移动。因此,您可以选择任何正交的up 向量作为lightDirNorm 的函数,它会保持阴影稳定。

    我还建议staying away from any lookAt functions。而是通过方位角和高度指定您的光线方向,并使用旋转矩阵来计算视图矩阵,而不会有任何奇异点的危险。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-13
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-25
      相关资源
      最近更新 更多