Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Статьи / Визуализация лесных массивов и рельефа местности в реальном времени.

Визуализация лесных массивов и рельефа местности в реальном времени.

Страницы: 1 2 3 4 Следующая

Автор: Ворсин С.В.

1. Введение
2. Представление рельефа местности
  2.1. Геометрическое представление
3. Оптимизация через гео-мипмаппинг
  3.1. Выбор детализации MipMap блоков
    Детализация, основанная на дальности
    Детализация, основанная на кривизне поверхности
4. Устранение артефактов
5. Прорисовка деревьев
  5.1. Листва деревьев
6. Представление лесных массивов
  6.1. 3 уровня оптимизации
  6.2. Вывод импостеров
7. Тени от деревьев
Результаты
Литература

1. Введение

Группа разработчиков проекта “S-16” d-Strict, Россия.

Данный документ описывает технику высоко-полигонального рендеренга рельефа местности и лесных массивов. Техника применяется к графическому движку авиа-симулятора “Sikorsky-16”, и с успехом может быть использована для прорисовки сложных и обширных областей местности для игровых и САПР программ.

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

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

2. Представление рельефа местности

Наиболее рациональным представлением рельефа местности является карта высот. Зачастую используется 8-битная карта высот (рис.1), однако если местность предполагает быть достаточно детализированной, возможно использование 16-битных карт.

Изображение
Рис. 1: карта рельефа.

И здесь следует отметить множество способов получения карт, это:
a) Вручную созданные карты (непосредственным редактированием высот);
b) Фрактальная генерация рельефа;
c) Сканированные карты космических тел (Марс, Земля, Луна). Наиболее доступны высотные карты Марса.

На сегодняшний день достаточно качественной детализации карт размером 100x100 км, при довольно высоких дальностях прорисовки (от 10км и более) можно считать детализацию 10 метров. Данное ограничение связанно с конечным размером карты. Так, 8-битная карта 100x100 км с детализацией 10 м будет занимать не менее 100 Мб (реальный размер может быть выше 400 Мб). В случае, если карта предполагает быть порядка 10x10 км (наиболее распространенный размер среди наземных игр), детализация может быть повышена до 5-3 метров.

Поскольку 100 Мб – довольно большой размер, загрузка в память всей карты не целесообразна, необходимо разделение карты на сектора, погрузка которых во время перемещения по карте не представляла бы проблем. К примеру, сектор 10x10 км будет занимать не менее 1 Мб, а это уже приемлемый размер. Далее, 100 Мб это довольно большой размер, учитывая что программа должна иметь более 1 карты, поэтому необходимо сжатие карт высот по методу DCT (Discrete Cosine Transformation) – Дискретно-косинусового преобразования, либо Вейвлет преобразования с последующим сжатием методом Huffman. Способы упаковки выходят за рамки этого документа. В случае если карта 8-битная и не высокочастотная, довольно эффективным будет метод упаковки RLE. Возможен и другой вариант: хранить карты как изображение формата JPEG (или другого), и при загрузке пользоваться стандартными библиотеками распаковки данного формата.

2.1. Геометрическое представление

В геометрическом смысле рельеф может быть представлен трехсторонними полигонами, соединяющими точки, являющиеся уровнями высот карты рельефа (рис. 2). В данном случае представлен фрагмент размером 32 полигона с 25 вершинами. Для оптимизации рельефа, необходимо разбиение карты на отдельные блоки. Число клеток блока должно быть равно n=2m, где  mО[1,...], число вершин блока k=2m+1. Данные блоки можно растеризировать с отдельной текстурой и осуществлять при рендеринге отбрасывание, не входящих в видовой объем. Обычно для таких целей достаточно техники Quadtrees. В качестве ограничивающего тела выступает сфера, в которую вписан блок карты 8x8 (или более). Таким образом, карта размером 256x256 точек и блоков 8x8, будет состоять из следующих уровней: 1 (32x32) => 4 дочерние ветви 16x16 и т.д.; у каждой ветви по 4 дочерних, разрешение дочерней ветви вдвое ниже по сравнению с родительским уровнем. Таким образом каждая ветвь содержит информацию об ограничивающих телах, то есть, сферах.

Изображение
Рис. 2: фрагмент карты.

Страницы: 1 2 3 4 Следующая

6 января 2004

Категории: ландшафт, лес, рельеф

Убрать рекламу


Обновление: 8 июня 2010

2001—2014 © GameDev.ru — Разработка игр