Почему диапазон значений с плавающей точкой terrainData.heightmapTexture равен 0f-0.5f, а не 0f-1f?
При рендеринге в terrainData.heightmapTexture я обнаружил, что запись 1.0f в пиксели не приводит к ландшафту с максимальной высотой (как указано в поле инспектора "Высота ландшафта"), а к 0,5 - к 1.0 (это вдвое больше и недоступно для ручного редактирования кисти), Кажется странным / удивительным, но я ожидаю, что за этим стоит разумная причина. Может ли sb объяснить это поведение?
(изображение показывает ландшафт после рендеринга синусоидальной волны (диапазон 0,0-1,0). Я использовал вычислительный шейдер> Graphics.CopyTexture > terrainData.DirtyHeightmapRegion path)
1 ответ
Ответ от инженера Unity Technologies:
Сама реализация карты высот подписана, но при рендеринге считается неподписанной, поэтому мы можем использовать только половину точности для значений высоты. Вот почему все наши шейдеры рисования Terrain зажимают возвращаемое значение в диапазоне от 0f до.5f, чтобы мы не заканчивали записывать подписанные значения в карту высот. Если вы введете значения, превышающие.5, вы увидите, что поверхность Terrain "обернута" до отрицательных значений высоты. Я не могу сказать, почему это было сделано, но, вероятно, так и осталось, потому что потребовалось бы много изменений кода, чтобы сделать их подписанными или неподписанными для соответствия.
Значения нормализованы, так что мы можем получить максимальную точность из.5f для максимальной высоты местности. 0 - смещение мировой высоты, равное 0, и.5f - terrain.terrainData.size.y (максимальная высота)