Я некоторое время размышлял над этим вопросом... многие 3D-движки поддерживают расширенный рендеринг местности с использованием деревьев квадрантов, LOD... все функции, которые вы ожидаете. Но каждый движок, который я видел, загружает данные о высоте из карт высот... растровых изображений в градациях серого. Я просто не могу понять, как это полезно - каждая точка на карте высот может иметь одно из 256 значений. Но что, если вы хотите смоделировать гору Эверест? с детализацией 1 метр, а то и больше? Это далеко за пределами диапазона 256. Конечно, я понимаю, что вы можете реализовать свой собственный формат ландшафта для достижения этого, но я просто не понимаю, почему карты высот так широко используются, несмотря на их большие ограничения.
В чем смысл карт высот?
Ответы (6)
С точки зрения отображения графики наибольшая точность, которая обычно имеет значение, — это (просто говоря) один пиксель в конечном отображении1. Учитывая разрешение типичного текущего монитора, иметь еще пару или три бита для карты высот было бы неплохо, но для большей части геометрии в этом нет необходимости. В частности, даже несмотря на то, что один пиксель в значительной степени определяет наибольшую точность, от которой вы часто пользуетесь, рисование горы Эверест так, что ее высота на самом деле неверна на два или три пикселя, на самом деле не является серьезной проблемой для большинства людей. время.
Все сводится к следующему: мысль о том, что вы хотите использовать точность в один метр для карты высот горы Эверест, является просто ошибкой — необходимость (или даже использование) такого уровня точности вполне оправдана. граница между редким и несуществующим. В то же время использование относительно плотного формата, такого как один байт на пиксель, обычно означает совсем немного — меньше места для хранения и меньшая пропускная способность, что приводит к более быстрому отображению.
- Технически со сглаживанием субпиксельное разрешение может и действительно что-то значит, но хотя оно имеет большое значение для таких вещей, как сглаживание линий, которые в противном случае выглядели бы довольно неровными, для чего-то вроде определения высоты горы, оно не имеет значения. значит почти так много. На самом деле, насколько большинство людей заботятся большую часть времени, это совершенно бессмысленно.
Карты высот очень легкие, очень быстро загружаются и могут быть легко сгенерированы процедурно. Они также используют довольно небольшой объем памяти.
Они часто используются, потому что они просты и быстры и хорошо справляются со многими сценариями. При этом они полезны не для каждого сценария и не являются полностью обобщенным форматом ландшафта.
Плюсы карты высот:
- Посмотрите, как реальная местность издалека.
- Очень легко вычислить высоту при любых x, y, предполагая, что z находится вверху. Это полезно для движущихся игроков, обнаружения столкновений и физики.
- Легко редактируется в программе для рисования.
Минусы карты высот:
- Неэффективно используйте память при наличии больших плоских областей (постоянной высоты).
- Неэффективно используйте оборудование для рендеринга при наличии больших плоских областей.
- Не может отображать крутые или нависающие ландшафты.
- Может представлять только квадратные области.
Но что, если вы хотите смоделировать гору Эверест?
Вы бы использовали что-то другое. Ясно, что если каждый движок, с которым вы сталкивались, использует карты высот, то он отлично работает для них. Не нужно ничего усложнять, если простое решение вам подходит.
Еще один плюс карт высот заключается в том, что в целом они позволяют избежать проблем с нависанием, которые усложняют аспекты физики и движения. Но даже с картой высот у вас может быть другая геометрия, которая может создавать нависания.
Кроме того, текстурирование может быть проще, если высота не слишком сильно меняется, вызывая растяжение.
Преимущество карт высот в том, что они имеют прямую аппаратную поддержку (текстурирование), и их можно рисовать с помощью существующих инструментов рисования (даже специализированных).
Конечно, в зависимости от формата информации, хранящейся в карте высот, некоторый рендеринг выглядит не так, как должно быть, а потому, что карты высот на самом деле используются в неправильной ситуации.
В качестве улучшения пиксели карты высот могут храниться в виде 16-битного числа с плавающей запятой (половинное число с плавающей запятой) или 32-битного числа с плавающей запятой, что позволяет иметь более высокие диапазоны и точность, разрешенные для 8-битного пикселя с фиксированной точностью.