如何从高度图中扰动曲面法线

时间:2013-11-22 19:16:27

标签: java graphics heightmap bump-mapping

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

result wanted

我一直在阅读关于凹凸贴图,高度贴图,法线贴图等的页面和页面......我想我理解了大部分主题,上面所有等等之间的区别等等(我得到了perlin-bumpmapping工作 - { {3}})我唯一没有得到的是如何从给定纹理图像的对象实际扰动表面法线。大多数论文和页面在这个主题上都略显模糊。

首先我想你只需要为你的对象添加一个图像纹理,对于给定的像素,你可以从纹理中计算出rgb颜色,然后根据rgb值计算一个亮度因子(类似于灰度值, ...)并在添加光效之前用它扰动法线。 - 我希望(ed)能够动态计算法线。

问题:如果上述情况甚至可能:如果给出亮度系数,如何扰动正常情况?如果我在这里错了,任何可以帮助我按照结果给出结果的提示/链接将不胜感激。

问题2 :如果使用任何给定的rgb图像无法实现上述目标,有人可以解释如何在给定高度图的情况下扰动图像吗?就像result上的第一张图片一样 非常感谢。

P.S:我正在/必须用Java进行实现。

1 个答案:

答案 0 :(得分:0)

This是ngidia用于凹凸贴图的Cg(着色器语言)教程。我曾经多次使用过这个想法。凹凸贴图时,法线不会受到干扰。它们是从您提供的法线贴图中采样的。诀窍在于如何在进行光照计算时应用采样法线与物体空间光和半角矢量。我相信该教程会详细解释这一点。

在高度贴图中,您实际上具有物体与纹理中保存的相机/光线的距离,除了扰乱法线之外,您还可以使用它来计算遮挡等。这个GPU Gems chapter解释了如何将高度贴图与法线贴图结合起来,同时获取表面细节和环境遮挡等内容。