Рендеринг большого количества сеток (объектов) - PullRequest
3 голосов
/ 22 сентября 2009

У меня есть проект, в котором я собираюсь визуализировать большое количество сеток на ландшафте площадью 16 квадратных миль. Хотя сетки не все уникальны, их много (вероятно, только 1000 сеток, но их несколько миллионов)

Мне было интересно, были ли какие-либо статьи или (хорошие) ресурсы, освещающие эту тему. Я нашел множество статей о рендеринге ландшафта / ландшафта, но каким-то образом не смог найти ни одного при рендеринге больших сеток.

EDIT Под сетками я имею в виду объекты на ландшафте, деревья зданий и т. Д.

Ответы [ 4 ]

5 голосов
/ 23 сентября 2009

Для эффективного рендеринга больших ландшафтов с множеством объектов необходимо учитывать две важные области. Один из них - минимизировать избыточную работу, рисуя только то, что видно под текущим углом обзора камеры, а другой - максимизировать эффективность рендеринга того, что видно.

Существует два основных способа минимизировать избыточную работу рендеринга. Сначала вы хотите избежать рисования чего-либо, что находится вне поля зрения камеры. Этот выбор видимости может быть ускорен с использованием различных структур данных: октодеревьев, квадродеревьев, сферных деревьев, деревьев bsp (как правило, более подходящих для менее открытых сред, а не ландшафтов) и т. Д. Некоторый вид иерархической организации сцен также полезен для ускорения такого рода выбраковки Те же структуры данных также можно использовать для пропуска визуализации объектов ниже определенного порогового размера на экране.

Во-вторых, вы хотите избежать рендеринга объектов, которые закрыты ближайшими объектами. Существует много различных методов отбора окклюзии, некоторые из которых используют ускорение графического процессора через запросы окклюзии, а другие работают исключительно на процессоре. Значение выбраковки окклюзии будет зависеть от ваших типичных углов обзора камеры, шероховатости местности и размеров объектов на местности. Относительно плоская открытая местность с небольшими объектами или камерой, которая смотрит в основном вниз на землю, а не на горизонт, уменьшит возможности выбраковки окклюзии. Некоторая иерархическая организация вашей сцены снова поможет при отбраковке окклюзии, так как если родительский объект закрыт, вы можете пропустить тесты для его детей.

После того, как вы свернули набор объектов, которые необходимо визуализировать, вы можете обратить свое внимание на максимизацию эффективности рендеринга для видимых объектов. Здесь полезны техники уровня детализации (нижние поли-сетки для удаленных объектов). Техника самозванца, упомянутая в другом ответе, является другим подходом, который может быть полезен, заменяя сложную геометрию простыми рекламными щитами. Стоит также использовать различные подходы к созданию экземпляров геометрии - современное графическое оборудование может отображать множество копий одной и той же геометрии с разными позициями и другими вариациями с помощью одного вызова графического API. Наконец, здесь применяются все стандартные методы для эффективного использования графического оборудования: сортировка для максимальной эффективности рендеринга (в некоторой степени зависит от оборудования), минимизация избыточной работы на кадр, эффективная упаковка геометрии, оптимизация вершинных и пиксельных шейдеров и т. Д.

Каждая из упомянутых областей довольно сложна сама по себе, и есть много статей, книг и статей, подробно описывающих детали. Надеемся, что упомянутых здесь методов достаточно, чтобы указать вам правильное направление для некоторых исследований Google.

1 голос
/ 22 сентября 2009

Решение называется октри . A Поиск картинок Google поможет вам понять концепцию с первого взгляда:)

По сути, октри позволяет быстро удалять сетки, которые не видны во время рендеринга (либо потому, что они позади вас, либо слишком далеко).

Для далеких сеток вы можете предварительно рассчитать аналогичную сетку с уменьшенным разрешением, чтобы у вас все еще был горизонт, и прикрепить его к узлу дерева. Если часть дерева имеет определенное расстояние, вы просто используете уменьшенную сетку вместо той, у которой высокая детализация.

1 голос
/ 22 сентября 2009

Я не уверен, что это ваш случай, но как насчет самозванцев? Насколько я помню, можно использовать трехмерную текстуру или что-то в этом роде, чтобы подделать очень большой объем геометрических данных. Это может быть только ваш случай.
Он используется для рендеринга лесов и тому подобного.

0 голосов
/ 22 сентября 2009

Под "сетками" вы подразумеваете объекты в ландшафте, например, здания, машины, деревья, кусты и тд? То есть вы не говорите о сетках, составляющих саму землю?

Если это так, я думаю, вам нужно изучить общую проверку видимости, чтобы при рендеринге местности вы могли запросить, видна ли данная сетка или скрыта за стеной холма / долины.

Кроме того, вам, конечно, нужно изучить «создание экземпляров», поэтому вы сохраняете только один набор данных для каждой уникальной сетки и повторно используете его, преобразовывая его в каждую позицию, в которой он появляется, как только эта позиция будет определена как видимая конечно.

Глядя на бумаги , как это также может быть поучительным, если вы пропустили это.

...