Техника построения ланшафта по карте высот далеко не нова. К тому же это настолько просто, что реализовать её может практически любой школьник, хоть немного разбирающийся в программировани.
Но иногда вылазят мелкие пакости, которые портят жизнь.
Рассмотрим вариант, где количество вершин соответсвует количеству пикселей в карте высот. А высота вершины считается как lerp( min_height, max_height, pixel / 255 )
При незначительном перепаде высот всё будет выглядеть хорошо. Но стоит нам его увеличить как вылезут артефакты:
Появляется некая "ступенчатость". Почему? Дело в том что при использованнии карты высот с разрешением 8 бит на пиксель, мы имеем рабочий диапазон значений 0-255. При перепаде высот, скажем, в 100 метров, минимальный шаг между высотами оказывается: 100 / 256 ~ 0.39м.
Именно это низкое разрешение и является причиной "ступенчатости"
Как это побороть? Самый простой способ - увеличить рабочий диапазон. К примеру, до 16 бит, вместо 8ми. Тогда диапазон значений 0-65535. Что даст нам шаг в 100 / 65536 ~ 0.001м. Неплохо, да?
Но это повлечёт за собой увелечение размера карты высот в 2 раза. Что, зачастую, нежелательно.
Есть ещё один путь, требующий небольшого количества телодвижений. Размытие. Или, если будет угодно "усреднение значений".
Блурим в 2 прохода( горизонтальный + вертикальный ) результирующие высоты с небольшим радиусом и получаем приятную картинку =)
Артефакты пропали. Разница очевидна.
Такие дела.
пятница, 28 декабря 2007 г.
О карте высот и пользе размытия
Подписаться на:
Комментарии к сообщению (Atom)
2 комментария:
Тебе за такое решение артисты уши поотрывают.
артисты пользуются тем интсрументарием что им дают. если они не могут с ним работать, значит это плохие артисты.
Отправить комментарий