0

在渲染到 terrainData.heightmapTexture 时,我发现将 1.0f 写入像素不会导致地形达到最大高度(在“地形高度”检查器字段中指定),但 0.5 会产生(1.0 是其两倍,不能用于手动笔刷编辑) . 看起来很奇怪/令人惊讶,但我希望这背后有合理的理由。某人可以解释这种行为吗?

预览图像 (图像显示了渲染正弦波(0.0-1.0 范围)后的地形。我使用的是计算着色器 > Graphics.CopyTexture > terrainData.DirtyHeightmapRegion 路径)

4

1 回答 1

0

Unity Technologies 工程师的回答:

高度图实现本身是有符号的,但在渲染时被视为无符号,因此我们只有一半的精度可用于高度值。这就是为什么我们所有的地形绘画着色器都将返回值限制在 0f 和 0.5f 之间,这样我们就不会最终将带符号的值写入高度图中。如果您输入的值大于 0.5,您会看到地形表面“包裹”到负高度值。我不能说为什么会这样做,但它可能一直保持这种状态,因为要使它们中的任何一个签名或未签名匹配都需要进行大量代码更改。

这些值被归一化,以便我们可以在给定地形的最大高度的 .5f 范围内获得最高精度。0 是 0 的世界高度偏移量,0.5f 是 terrain.terrainData.size.y(最大高度)

资源

于 2019-05-08T21:45:32.117 回答