gpt4 book ai didi

java - 如何从高度图扰动表面法线

转载 作者:太空宇宙 更新时间:2023-11-04 15:23:18 24 4
gpt4 key购买 nike

我正在我自己的 3D 跟踪器中实现凹凸贴图。简而言之 - 我想要这个结果:

result wanted

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

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

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

问题 2:如果上述对于任何给定的 RGB 图像都不可能,那么有人可以解释如何扰动给定高度图的图像吗?就像 wikipedia 上的第一张图片一样非常感谢。

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

最佳答案

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

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

关于java - 如何从高度图扰动表面法线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20152768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com