当渲染到terrainData.heightmapTexture时,我发现向像素写入1.0f不会导致最大高度的地形(如“地形高度”检查器字段中所指定),但0.5会导致最大高度的地形(1.0是该高度的两倍,并且不适用于手动刷编辑)。 似乎很奇怪/令人惊讶,但我希望背后有合理的理由。 某人可以解释这种行为吗?
(图像显示了向其渲染正弦波(0.0-1.0范围)后的地形。我正在使用计算着色器> Graphics.CopyTexture> terrainData.DirtyHeightmapRegion路径)
答案 0 :(得分:0)
Unity Technologies工程师的答案
heightmap实现本身已签名,但被视为 渲染时无符号,所以我们只有一半的精度可用 用于高度值。这就是为什么我们所有的地形画 着色器将返回值限制在0f和.5f之间,这样我们就不会 最终将签名值写入高度图。如果你要放 值大于.5时,您会看到地形表面“换行”为 负高度值。我不能说为什么这样做,但可能 之所以如此,是因为要对它进行大量的代码更改 使它们中的一个签名或未签名相匹配。
将值归一化,以便我们能够获得最高精度 超出给定地形最大高度的.5f。 0是一个世界 0和.5f的高度偏移量是terrain.terrainData.size.y(最大值 高度)