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

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

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

Есть три суждения по поводу геоморфинга. Первый подход - потратить дополнительную память на хранение дополнительного значения высоты для каждого меша. Второй альтернативой является улучшить алгоритм так, чтобы достигнуть действительно относительно маленьких ошибок, т.е. геоморфность просто не потребуется. К тому же согласно закону Мура вероятно это вскоре будет реализовываться на уровне hardware. Третьей альтернативой является разделить quadtree на 2 дерева: одно для хранения данных (дерево высот), второе для хранения отображаемого меша (дерево меша). В дереве высот будут хранится все высоты и предпросчитанные ошибки, но ничего из временных данных, таких как флаги включения, число ссылок, веса морфинга и так далее. При построении дерева меша можно не задумыватся об ограничениях памяти, поскольку его размер пропорционален числу деталей, отрисовывающихся в данный момент. В то же время дерево высот может сохранить немного памяти, так как оно является статическим и, таким образом, из него можно удалить множество ссылок на детей.

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

Приложения

Работающая реализация

Графический движок Soul Rider является закрытым и вряд ли будет открыт в обозримом будущем, но я переписал основы алгоритма в качестве демонстрации для этой статьи. Эти исходники могут быть свободно использованы для изучения, экспериментов, модификации и включения в ваш собственный коммерческий/некоммерческий проект. Я лишь прошу упомянуть меня.

Я не использовал никаких запаковок данных в демо-коде. Это хорошая область для экспериментов. Также я не использовал отсечение по пирамиде видимости, но все необходимые данные доступны.

Упражнения для читателя

В дополнение к запаковке данных упомяну о некоторых других вещах, включенных в движок Soul Ride, но не включенных в демо. Одной из больших является однозначная-полноландшафтная система текстурирования (wolverene: наверное, имеется ввиду что на весь ландшафт накладывается 1 текстура), описание которой выходит за рамки данной статьи.

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

Другим полезным решением является подкачка по запросу подсекций дерева. На деле это не так сложно: просто следует завести специальный флаг для определенных подквадратов; в них будет содержаться ссылка на все гиганское поддерево, хранящееся на диске с просчитанной и хранящейся в обычном дереве максимальной ошибкой. Когда Update() старается включить "специальный" квадрат, последует пауза, подкачка данного квадрата с диска и подключение его в дерево, а затем возобновление работы Update(). Реализация этого в фоновом режиме без задержек была бы еще интерестнее, но я думаю, выполнима. В результате получим бесконечную подкачку. Процедурная детализация по запросу основана на той же самой идее: вместо того, чтобы забивать диск предподготовленными данными, вы просто запускаете алгоритм увеличения детализации на лету.

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

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

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

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

Галерея

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

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

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

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