为什么terrainData.heightmapTexture浮点值范围是0f-0.5f而不是0f-1f?

时间:2019-05-04 12:24:56

标签: c# unity3d compute-shader unity3d-terrain

当渲染到terrainData.heightmapTexture时,我发现向像素写入1.0f不会导致最大高度的地形(如“地形高度”检查器字段中所指定),但0.5会导致最大高度的地形(1.0是该高度的两倍,并且不适用于手动刷编辑)。 似乎很奇怪/令人惊讶,但我希望背后有合理的理由。 某人可以解释这种行为吗?

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

1 个答案:

答案 0 :(得分:0)

Unity Technologies工程师的答案

  

heightmap实现本身已签名,但被视为   渲染时无符号,所以我们只有一半的精度可用   用于高度值。这就是为什么我们所有的地形画   着色器将返回值限制在0f和.5f之间,这样我们就不会   最终将签名值写入高度图。如果你要放   值大于.5时,您会看到地形表面“换行”为   负高度值。我不能说为什么这样做,但可能   之所以如此,是因为要对它进行大量的代码更改   使它们中的一个签名或未签名相匹配。

     

将值归一化,以便我们能够获得最高精度   超出给定地形最大高度的.5f。 0是一个世界   0和.5f的高度偏移量是terrain.terrainData.size.y(最大值   高度)

source