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

Организация непрерывных LOD ландшафтов с использованием Адаптивных КвадроДерьев

Рендеринг ландшафтов является сложной проблемой при програмировании реалистичной графики. В настоящий момент мы находимся в интересной точке развития технологий рендеринга (т.е. "оцифровки" данных, по которым строится ландшафт), поскольку увеличившаяся пропускная способность современных видеокарт в совокупности с опубликованными исследованиями на тему алгоритмов реального времени LOD meshing дают возможность современным графическим движкам отрисовывать сильно детализированные ландшафты. Тем не менее большинство используемых технологий предлагают компромис между размером ландшафта и его детализированностью.

Проблемы

Что мы хотим получить от ландшафта? Один сплошной меш, начинающийся с заднего плана и продолжающийся до горизонта без разрывов и Т-узлов. Мы хотим видеть большую область с различной детализацией, начиная от выпуклостей под ногами и заканчивая горами на горизонте. Для определенности скажем, что мы хотим оперировать размерами от 1 метра до 100000 метров с пятью уровнями детализации.

Как этого добиться? Метод решения в лоб не подойдет для средних компьютеров наших дней. Если мы заведем сетку 100000х100000 16-битных значений, и просто попытаемся ее отрисовать, то получим 2 большие проблемы. Во-первых, это проблемы треугольников - мы будет посылать до 20 млн. треугольников на каждый кадр. Во-вторых, проблема памяти - для хранения карты высот нам понадобится приблизительно 20 Гб памяти. Еще не скоро мы сможем использовать такой метод и получать хорошие результаты.

Лобовое решение для карты высот.

Несколько ранее опубликованных методов успешно решают проблему треугольников. Наиболее широко использующиеся - семейство рекурсивных алгоритмов [1], [2], [3] (смотрите в конце список литературы). Используя их мы можем спокойно обработать наш меш и рендерить похожий ландшафт, используя интелектуально выбираемые на лету несколько сотен треугольников из 10 милионов.

Тем не менее, все еще остается проблема памяти, так как на хранение карты высот требуется около 20 гб плюс некоторое количество на алгоритм интелектуального выбора вершин.

Одним из явных решений является уменьшение детализации путем увеличения размера ячейки. 1Kx1K является хорошим практически используемым размером карты высот. Недавно выпущенная игра TreadMarks использует набор данных 1k x 1k с великолепным эффектом [4]. К сожалению, 1k x 1k далеко от 100k x 100k. Итак, мы пришли к компромису между детализацией переднего плана и размером ландшафта.

Решение, предлагаемое в этой статье - это использовать адаптивное квадродерево (quadtree) вместо регулярной сетки для представления информации о высоте. Используя это квадродерево мы можем закодировать данные с различным разрешение в различных областях. К примеру, в автосимуляторе нам требуется высокая детализация дороги и ее окресностей, в идеале до каждой выпуклости, но окружающие пустоши, по которым мы не можем ехать, можно отображать и с меньшей детализацией. Нам нужна лишь информация для генерации холмов и долин.

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

Алгоритм: Создание меша

Алгоритм базирован на [1], но также использовались мысли из [2] и [3]. В отличии от [1] существует несколько ключевых модификаций, но базис тот же самый, поэтому мы будем придерживатся терминологии [1].

Рендер делится на 2 части: первую называем Update(), а вторую Render(). Во время Update(), мы решаем, какие вершины включить в выводимый меш. Затем, во время Render() уже генерируем по этим вершинам треугольники. Начнем с простой сетки 3х3 для объяснения действия Update() и Render(). Во время Update() мы рассматриваем каждую из необязательных вершин и решаем, включать ли ее в меш. Следуя терминологии [1] мы говорим, что вершина будет использована в меше тогда и только тогда, когда она "включена".

Перейти на страницу: 1 2 3 4 5 6

Немного больше о технологиях >>>

Применение световода на уроках физики
Школьник понимает физический опыт только тогда хорошо, когда он его делает сам. Но еще лучше он понимает его, если сам делает прибор для эксперимента. П.Л.Капица Физический эксперимент... Постановка его на уроке позволяет учителю не только подробно рассмотреть физические я ...

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

Галерея

Tехнологии прошлого

Раскрытие содержания и конкретизация понятий должны опираться на ту или иную конкретную модель взаимной связи понятий. Модель, объективно отражая определенную сторону связи, имеет границы применимости, за пределами которых ее использование ведет к ложным выводам, но в границах своей применимости она должна обладать не только образностью.

Tехнологии будущего

В связи с развитием теплотехники ученые в прошлом веке пришли к простому, но удивительному закону, потрясшему человечество. Это закон (иногда его называют принцип) возрастания энтропии (хаоса) во Вселенной. technologyside@gmail.com
+7 648 434-5512