【问题标题】:Bump map sprite casting shadows on itself凹凸贴图精灵在自身上投射阴影
【发布时间】:2014-01-08 16:23:29
【问题描述】:

我有一个相当简单的法线贴图照明实现,适用于 webgl(GLSL 着色器)中的 2D 精灵,我可以通过一个示例对其进行调整和优化。它只使用一个定向光,可以很好地满足我的目的。精灵被渲染为平面(2D),只有光的方向和法线是 3D 向量。顶点旋转只发生在 z 轴周围,因此非常简单。

我希望添加一个凹凸(高度)贴图来投射阴影。网上有 3D 凹凸贴图阴影投射示例和论文,但它们比我需要的要复杂得多,而且数学计算也超出了我的想象;我还没有找到一个例子或解释如何做一个简单的 2D 案例。

我的第一个倾向如下:对于片段着色器中的当前像素,沿着光线的方向回溯,并检查相邻凹凸贴图像素的高度。如果它高于该点的光方向矢量,则该像素位于阴影中。但是,由于凹凸贴图上的“高”像素可能会在大于 1 像素的距离上投射阴影,所以我必须在该方向上逐个像素地进行测试,直到找到一个足够高可以投射阴影(或到达纹理边缘) ,或达到某个任意限制。)

这听起来不是很理想,尤其是对于较大的纹理。我读过着色器中的 if 语句不是那么快。有更快/更好的方法吗?

【问题讨论】:

  • 谷歌视差映射。看起来你正在寻找那个。告诉我它是否对你有帮助。
  • 感谢您清理条款,这大大改善了我的 Google 搜索。我浏览了一些PDF。如果我没记错的话,阅读this one,他们基本上做了我上面写的事情——从当前像素沿着光的方向向后追踪,直到它达到一个会遮蔽它(或不遮蔽它)的高度值。也找到了webgl example here .不确定我是否缺少一些优化。

标签: three.js opengl-es-2.0 webgl


【解决方案1】:

您要查找的内容称为视差(遮挡)映射。

这是一种与您描述的完全一样的技术,可以理解为切线空间中的凹凸贴图光线追踪。

这里有一些文章:

优化搜索的方式与普通光线追踪类似,包括:球体追踪、锥体追踪、二分搜索等,而不是常量步进函数。

P。 S. 如果您知道某些渲染技术的名称,最好在 Google 上在名称前添加“nVidia”、“crytek”或“gpu”,它会显示更多相关结果。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多