0

我正在自己的 3D 跟踪器中实现凹凸贴图。真的很短 - 我想要这个结果:

想要的结果

我一直在阅读关于凹凸贴图、高度贴图、法线贴图等的页面和页面,我想我理解了大部分主题,以及以上所有内容之间的区别等等。(我得到了 perlin-bumpmapping 的工作 -结果)唯一我不明白的是如何从给定纹理图像的对象中实际扰动表面法线。大多数论文和页面在该主题上都非常模糊。

首先,我认为您只需向对象添加图像纹理,对于给定的像素,您将根据纹理计算 rgb 颜色,然后根据 rgb 值计算亮度因子(类似于灰度值,... ) 并在添加灯光效果之前用它扰乱法线。- 我想(ed)即时计算法线。

问题:如果上述情况甚至可能:在给定亮度因子的情况下如何扰动法线?如果我在这里错了,任何可以帮助我达到给定结果的提示/链接将不胜感激。

问题 2:如果以上对于任何给定的 rgb 图像都不可能,任何人都可以解释如何在给定高度图的情况下扰动图像?就像维基百科上的第一张图片 非常感谢。

PS:我正在/必须用 Java 实现。

4

1 回答 1

0

是一个 cg(一种着色器语言)教程,用于 nVidia 的凹凸贴图。这个想法我已经用过几次了。凹凸贴图时,法线不会受到干扰。它们是从您提供的法线贴图中采样的。诀窍在于如何在进行照明计算时将采样法线与对象空间光和半角矢量一起应用。我相信本教程对此进行了详细解释。

在高度图中,您实际上将对象与相机/灯光的距离保存在纹理中,除了扰动法线之外,您还可以使用它来计算遮挡等。这个GPU Gems 章节解释了如何将高度贴图与法线贴图相结合,同时获得表面细节和环境光遮蔽之类的东西。

于 2013-11-26T17:52:01.867 回答