Почему диапазон значений с плавающей точкой terrainData.heightmapTexture равен 0f-0.5f, а не 0f-1f? - PullRequest
0 голосов
/ 04 мая 2019

При рендеринге в terrainData.heightmapTexture я обнаружил, что запись 1.0f в пиксели не приводит к ландшафту с максимальной высотой (как указано в поле инспектора «Высота ландшафта»), а к 0.5 - (1.0 вдвое больше и недоступен для ручного управления). кисть редактирует). Кажется странным / удивительным, но я ожидаю, что за этим стоит разумная причина. Может ли sb объяснить это поведение?

preview image (изображение показывает ландшафт после рендеринга синусоидальной волны (диапазон 0,0-1,0). Я использовал вычислительный шейдер> Graphics.CopyTexture> terrainData.DirtyHeightmapRegion path)

1 Ответ

0 голосов
/ 09 мая 2019

Ответ инженера Unity Technologies:

Сама реализация карты высот подписана, но при рендеринге рассматривается как неподписанная, поэтому у нас есть только половина точности, доступной для использования для значений высоты.Вот почему все наши шейдеры рисования Terrain фиксируют возвращаемое значение в диапазоне от 0f до .5f, чтобы мы не заканчивали записывать подписанные значения в карту высот.Если вы введете значения больше, чем .5, вы увидите, что поверхность Terrain "обернута" до отрицательных значений высоты.Я не могу сказать, почему это было сделано, но, вероятно, так и осталось, потому что потребовалось бы много изменений в коде, чтобы сопоставить их со знаком или без знака.

Значения нормализованы, чтобы мы моглиполучить максимальную точность из .5f для максимальной высоты местности.0 - смещение мировой высоты, равное 0, а .5f - terrain.terrainData.size.y (максимальная высота)

source

...