高度图的作用是什么?

3

我已经思考了这个问题一段时间了...许多3D引擎支持使用四叉树、LOD等高级地形渲染功能。但是,我见过的每个引擎都从高度图中加载高度数据...灰度位图。我就是不明白这有什么用——高度图中的每个点只能有256个值。但是如果你想要建模珠穆朗玛峰呢?还要保留1米甚至更高的细节吗?那就远远超出了256的范围。当然我知道你可以实现自己的地形格式来实现这一点,但是尽管高度图有很大的局限性,它们仍然被广泛使用。


4
使用所有四个颜色通道可以提供32位的精度,即大约可得到40亿个不同高度值。 - Dave O.
6个回答

6

高度图非常轻量级、快速加载,并且可以相对容易地进行程序化生成。它们在内存占用方面也非常小。

它们经常被使用,因为它们简单快捷,能够很好地处理许多场景。然而,需要注意的是,它们并不适用于每种情况,并不是完全通用的地形格式。


它们可以使用您已经包含在3D应用程序中的图像处理代码加载。您不需要包含更多的代码来加载另一种数据格式。 - Jay

5
从显示图形的角度来看,通常最重要的精度是最终显示中的单个像素1。鉴于当前典型监视器的分辨率,为高度图再增加两三位比特位会更好——但对于大多数几何体而言,这并不是真正必要的。特别是,即使单个像素基本上定义了您有很多用途的最大精度,使珠穆朗玛峰的高度实际上错了两三个像素对于大多数人来说并不是一个主要问题,大部分时间都不是。

归根结底,认为您希望在珠穆朗玛峰高度图上使用一米的精度只是一个错误——需要(或甚至使用)该级别的精度就处于罕见和不存在之间的界线上。同时,使用相对密集的格式(如每个像素一个字节)通常意味着很多——存储空间更少,带宽更少,导致显示更快。

  1. 从技术上讲,通过抗锯齿,子像素分辨率确实有意义——但虽然对于平滑线条这样的事情非常重要,否则它们看起来会相当锯齿状,但对于像准确获取山的高度这样的事情,它并不那么重要。实际上,在大多数人之前,大部分时间,它是没有意义的。

希望你不介意我评论这篇四年前的文章。 但我有一个小问题,觉得不值得发一篇新的帖子。 那么,为什么不把这些高度细节放在模型本身中呢? 为什么我们要创建一个必须首先分配的高度图呢? - Andy
@Andy:主要是为了速度。高度图基本上是从网格中获取高度,并将其自身转换为非常密集的格式,因此您无需查看所有其他网格数据即可获得高度。 - Jerry Coffin

3

高度图优点:

  1. 从远处看起来像真实的地形。
  2. 非常容易计算任何x、y上的高度,假设z为向上。这对于移动玩家、碰撞检测和物理非常有用。
  3. 在绘画程序中很容易编辑。

高度图缺点:

  1. 当存在大片平坦区域(恒定高度)时,使用内存效率低下。
  2. 当存在大片平坦区域时,使用渲染硬件效率低下。
  3. 无法表示陡峭或悬崖峭壁。
  4. 只能表示正方形区域。

你会使用什么样的结构来表示陡峭或悬崖峭壁地形? - Jake Petroules
游戏无疑将具备渲染角色、车辆和建筑物的任意三角网格的能力。任意地形网格可以以同样的方式嵌入到高度场中。 - bbudge

0
但是如果你想建模珠穆朗玛峰呢?你需要使用其他的方法。显然,如果你遇到的每个引擎都使用高度图,那么它对他们来说完全有效。如果简单的解决方案适用于您,就没有必要过度复杂化事情。

0
另外一个使用高度图的好处在于它通常可以避免悬挂问题,这使得物理和运动方面更加困难。但是即使有高度图,你也可能会有其他几何形状造成悬挂的问题。
此外,只要高度不变化太大,纹理贴图就可以更简单。

0

高度图具有直接硬件支持(纹理)的优点,并且可以使用现有的绘画工具(甚至是专业工具)进行绘制。

当然,根据高度图中存储的信息格式,有些渲染看起来可能不像应该的样子,但这是因为高度图实际上在错误的情况下使用了。

作为增强功能,高度图像素可以存储在16位浮点数(半精度浮点数)或32位浮点数中,允许具有比固定精度8位像素更高的范围和精度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接