Я уже давно обдумывал этот вопрос ... многие 3d-двигатели поддерживают расширенный ландшафтный рендеринг с использованием квадрантов, LOD ... все функции, которые вы ожидаете. Но каждый движок, который я видел, загружает данные о высоте из карт высот ... растровые изображения в оттенках серого. Я просто не понимаю, как это полезно: каждая точка в карте высот может иметь одно из 256 значений. Но что, если вы хотите моделировать Mt. Эверест? с деталью 1 метр или даже больше? Это далеко за пределами диапазона 256. Конечно, я понимаю, что вы можете реализовать свой собственный формат ландшафта для достижения этого, но я просто не могу понять, почему карты высот настолько широко используются, несмотря на их большие ограничения.В чем смысл карт высот?
ответ
С точки зрения отображения графики, наибольшую точность, которая обычно имеет значение (в простых терминах) один пиксель в конечном дисплее . Учитывая разрешение обычного текущего монитора, наличие еще одной пары или трех бит для карты высоты было бы неплохо - но для большинства геометрий это действительно не обязательно. В частности, хотя один пиксель в значительной степени определяет наибольшую точность, для которой у вас много пользы, рисование Mt. Эверест, поэтому его высота на самом деле неверна на два или три пикселя, на самом деле не является большой проблемой для большинства людей большую часть времени.
Это сводится к следующему: идея, что вы хотите использовать точность одного метра для карты высоты горы. Эверест - это просто ошибка - потребность (или даже использование) для такого уровня точности находится прямо на границе между редким и несуществующим. В то же время использование относительно плотного формата, такого как один байт на пиксель, как правило, означает довольно малое хранилище и меньшую пропускную способность, что приводит к более быстрому отображению.
- Технически с сглаживанием, разрешение субпикселя может и не означать, что-то - но пока это имеет большое значение, для таких вещей, как сглаживание линий, которые в противном случае выглядят довольно неровными, для чего-то, как получить высоту горы правильно, это не значит почти так много. На самом деле, что касается большинства людей большую часть времени, это совершенно бессмысленно.
Надеюсь, вы не против, я прокомментирую этот 4-летний пост. Но у меня есть небольшой вопрос и не думаю, что это стоит собственного поста. Итак, почему бы не поставить эти данные о высоте в самой модели? Зачем нам нужно создать карту высот, которая должна быть назначена первой? – Andy
@ Энди: В основном для скорости. Карта высоты в основном вынимает высоту из сетки и сама превращает ее в очень плотный формат, поэтому вам не нужно просматривать все другие данные сетки, чтобы добраться до высот. –
Карты высот очень легкие, очень быстро загружаются и могут быть получены процедурно довольно легко. Они также используют довольно малую площадь для памяти.
Они используются много, потому что они легкие и быстрые, и хорошо справляются со многими сценариями. При этом они не полезны для каждого сценария, а не для полностью обобщенного формата ландшафта.
, и их можно загрузить с помощью кода обработки изображений, который вы уже включили в свое 3D-приложение. Вам не нужно включать больше кода для загрузки другого формата данных – Jay
Но что, если вы хотите модель Mt. Эверест?
Вы бы использовали что-то еще. Очевидно, что если каждый движок, с которым вы столкнулись, использует карты высот, он отлично подходит для них. Не нужно чрезмерно затруднять работу, если простое решение работает для вас.
Еще один плюс с картами высот состоит в том, что в целом он избегает проблемы с выступом, которая усложняет аспекты физики и движения. Но даже с помощью hightmap вы можете иметь другую геометрию, которая могла бы создавать свесы.
Кроме того, текстурирование может быть проще, если высота не слишком сильно изменяется, вызывая растяжение.
HeightMap Плюсы:
- Посмотрите, как реальной местности с расстояния.
- Очень легко вычислить высоту при любом x, y, предполагая, что z вверх. Это полезно для перемещения игроков, обнаружения столкновений и физики.
- Легко редактировать в программе рисования.
Heightmap Против:
- Использование памяти нерационально, когда существуют большие плоские участки (постоянная высота).
- Использовать рендеринг оборудования неэффективно, когда есть большие плоские области.
- Невозможно представить крутые или нависающие ландшафты.
- Может представлять только квадратные области.
Какую структуру вы бы использовали для представления крутых или нависающих ландшафтов? –
Игра, несомненно, будет способна отображать произвольные треугольные сетки для персонажей, транспортных средств и структур. Аналогичным образом можно встраивать произвольные рельефные сетки в поле высоты. – bbudge
Карты роста имеют то преимущество, что имеют прямую аппаратную поддержку (текстурирование), и ее можно использовать с использованием существующих инструментов рисования (даже специализированных).
Конечно, в зависимости от формата информации, хранящейся в карте высот, некоторый рендеринг не выглядит так, как должно быть, а потому, что карты высот фактически используются в неправильной ситуации.
В качестве улучшения пиксели высотной карты могут быть сохранены в 16-битовом плавающем числе (half float) или 32-битном плавании, что позволяет иметь более высокие диапазоны и точность, разрешенные с 8-битным пикселем с фиксированной точностью.
Используя все четыре цветовых канала, вы получаете 32 бит точности или ~ 4 миллиарда различных значений высоты –