【问题标题】:Why terrainData.heightmapTexture float value range is 0f-0.5f and not 0f-1f?为什么 terrainData.heightmapTexture 浮点值范围是 0f-0.5f 而不是 0f-1f?
【发布时间】:2019-05-04 12:24:55
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    Unity Technologies 工程师的回答:

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

    这些值是标准化的,以便我们可以获得尽可能高的精度 对于给定地形的最大高度,超出 0.5f。 0 是一个世界 0 和 0.5f 的高度偏移是 terrain.terrainData.size.y(最大 高度)

    source

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 2018-01-11
      • 2013-03-25
      • 1970-01-01
      • 2016-01-31
      • 1970-01-01
      相关资源
      最近更新 更多