Создание реалистичных моделей в высоконагруженных проектах

NovaInfo 44, с.33-41
Опубликовано
Раздел: Технические науки
Просмотров за месяц: 2
CC BY-NC

Аннотация

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

Ключевые слова

МОДЕЛЬ ФЛОРЫ, СКУЛЬПТУРНЫЙ ПРИМ, КОМПЬЮТЕРНАЯ ГРАФИКА, OPENGL, НИЗКОПОЛИГОНАЛЬНОЕ ПРОЕКТИРОВАНИЕ, ТРЕХМЕРНАЯ СЦЕНА

Текст научной работы

Введение

В современной компьютерной графике для создания сцен с большим количеством объектов, требуется большое количество ресурсов компьютера. Разрабатываются различные методы и алгоритмы оптимизации и минимизации использования ресурсов для создания современных реалистичных сцен как для игровой индустрии, производств и социальной сферы. Самую большую нагрузку в современном моделировании создают элементы флоры (растения, деревья и т.д.). При количестве объектов флоры в 3D сценах превышающих 3000 единиц, и применении данных сцен для моделирования географических карт и иных, актуально будет создание моделей флоры из перекрещивающихся плоскостей с наложением на них текстур, рис. 1.

Существует два способа низкополигонального проектирования флоры для высоконагруженных проектов:

  1. Наложение текстур на две пересекающиеся плоскости. (Рис. 2), наложение текстур на четыре пересекающиеся плоскости.(Рис. 3);
  2. Наложение карт высот на группу примитивов (куб, сфера) и группировка их в один элемент (фрукты + тарелка.). (Рис. 5).

Методы создания моделей

Пересекающиеся плоскости

Применение перекрещивающихся плоскостей актуально поскольку восприятие пространства идет на базе 3х мерных координат, поэтому, можно использовать тот же трюк для создания иллюзии 3D для простых объектов. Деревья, кустарники, трава и тд.

Рисунок 1.
Рисунок 2.
Рисунок 3.

Достоинства:

  • Простота;
  • Возможность размещения большого количества объектов (3000 и более) на одной сцене.

Недостатки:

  • При очень большом количестве объектов (6000 и более) резко снижается FPS. В современной компьютерной графике не актуален.

Скульптурные примитивы (примы)

Для создания скульптурных примитивов, необходимо сначала понять их основные принципы. Независимо от того являетесь ли Вы новичком или опытным 3D модельером, Вы должны знать:

  1. Скульптурные примитивы должны быть построены из особых и неизменных мешей;
  2. Скульптурные примитивы должны быть отображаемы на особых и неизменных UV-картах;
  3. У скульптурного примитива может быть не больше, чем 1024 грани.

Основы скульптурных примов

В основе создания скульптурных примов лежат скульптурные карты (карты высот), рисунок 4. Эти небольшие текстурные файлы называются скульптурными картами (sculptmap).

Самый основной скульптурный прим — простая плоская поверхность (simple plane surface). Эта поверхность имеет 2 измерения, которые мы назовем X, и Y. И поверхность сделана из прямоугольных граней (faces). Эти грани также называют четырехугольниками. Эта специальная поверхность здесь сделана из 32 граней по оси Х, и 32 граней по оси Y. Следовательно, общее количество граней для этой поверхности 32х32, то есть 1024 грани. Более внимательный осмотр показывает, что каждая грань этого меша сделана из 4 вершин (vertices) и 4 ребер (edges). Каждые 2 соседние грани имеют одно общее ребро и 2 общие вершины. Эта особенность расположения является самой простой и самой постоянной у мешей, которую можно определить на поверхности. Фактически точно такую же решетчатую топологию (mesh topology) используют — все скульптурные примы в мире. Так как решетчатая топология предопределена (pre-defined), мы лишь должны указать перечень точек в 3D пространстве. И так как меш является строго прямоугольным, мы можем использовать ряды и колонки вершин как указатели перечня.

Рисунок 4.

Пусть нижний левый пункт будет координатами [0,0]. Это означает, что он расположен в первом ряду (если считать снизу) и в первой колонке (если считать слева направо). Эта нумерация универсальна. Это означает, что пока Вы сохраняете решетчатую топологию в целости, Вы можете передвигать вершины (vertices) как вам угодно, а также сгибать и растягивать меш во всех трех измерениях. Пока соединяющие ребра (edges) не изменены и пока Вы не добавили новые вершины (vertices) к мешу или не удалили существующие вершины из него, объект всегда можно преобразовать в скульптурный прим.

Другими словами: нижняя левая вершина исходной поверхности всегда будет вершиной номер [0,0]. Даже если её переместить в верхнее правое положение меша. И это работает, пока не удалены ребра. Когда Вы удаляете (cut)

или меняете порядок расположения (rearrange) ребер (edges), тогда объект перестает быть скульптурным примом. Теперь мы знаем, что эта решетчатая топология универсальна для всех скульптурный примов в мире. По умолчанию скульптурный прим содержит 32 ряда с 32 гранями в каждом ряду. И то, как "соткан" меш, строго определено и сохранено в отдельной карте.

Рисунок 5.

Существует неизменное соотношение один к одному между вершинами на карте и вершинами на меше. Общепринято горизонтальную ось на карте называть U, а вертикальную — V. Саму карту называют "UV-карта" (UV-map). Вы можете перемещать вершины на меше в любое нравящееся Вам положение, но UV-карта при этом всегда остается постоянной! Даже, если Вы меняете свой меш в трех измерениях, UV-карта при этом не изменяется. И каждая вершина (vertex) меша может всегда быть найдена на UV-карте. Далее, давайте создадим основной цилиндр (basic cylinder). Мы просто сгибаем плоскость вокруг полной окружности на 360 градусов. После изгиба две стороны плоскости соприкасаются. Другими словами, некоторые из вершин получили одинаковое местоположение. Иными словами, при наложении UV-карты на примитив, мы получаем нужный нам объект, путем позиционирования вершин в соответствии с картой высот.

Достоинства:

  • Простота;
  • Возможность создания сложных объектов (Дерево) путем группировки простых (ствол, листва);
  • Разрабатываются различные методы и алгоритмы оптимизации, минимизации с повышением качества.

Недостатки:

  • При очень большом количестве объектов (500 и более) резко снижается FPS.

В сравнении с методом наложения текстур на плоскости для создания флоры, данный метод более актуален в компьютерной графике.

Пример кода на языке C# для отрисовки деревьев

//Массив векторов для задания плоскостейfloat[] TreeVectors = {    0.0f, 0.0f, 0.0f,    9.0f, 0.0f, 0.0f,    9.0f, 20, 0.0f,    0.0f, 20, 0.0f,    4.5f, 20, 4.5f,    4.5f, 0, 4.5f,    4.5f, 0, -4.5f,    4.5f, 20, -4.5f};/// Функция отрисовки дерева по 2м плоскостям результат на рис.6.//x, y,z — координаты на сцене в которых будет происходить отрисовка моделиprivate void DrawTree(double x, double y, double z){gl.PushMatrix();        // сохранение текущей матрицы в стекgl.LoadIdentity();        // возврат начальной точки рисования в исходную точкуgl.Translate(x, y, z);     // смещение начальной точки рисования объектовtexture[2].Bind(gl);        // добавление текстурыgl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_NEAREST);gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_NEAREST);gl.EnableClientState(OpenGL.GL_VERTEX_ARRAY);gl.EnableClientState(OpenGL.GL_TEXTURE_COORD_ARRAY);gl.VertexPointer(3, 0, TreeVectors); // задание координат векторов из массиваgl.TexCoordPointer(2, OpenGL.GL_FLOAT, 4, TreeTexArray); //наложение текстурыgl.DrawArrays(OpenGL.GL_QUADS, 0, 8); // отрисовка объекта на сценеgl.DisableClientState(OpenGL.GL_VERTEX_ARRAY);    //отключение режима работы с массивами вершинgl.DisableClientState(OpenGL.GL_TEXTURE_COORD_ARRAY); //отключение режима работы с массивами вершин текстурgl.PopMatrix();    // Возврат предыдущей матрицы из стека}
Пример реализации
Рисунок 6. Пример реализации

Заключение

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

Написаны две функции, одна для отрисовки элемента травы, другая — дерева. Координаты отрисовки передаются параметрами из массива который генерируется случайным образом для создания опушки леса. Применив данный метод вместе с библиотекой OpenGL при количестве объектов равным 3284, был достигнут FPS=10-12. При включении функции имитации ветра, FPS снизился до 4-7 кадров в секунду. Данный алгоритм можно дорабатывать, получив более высокие результаты, введя различные виды оптимизации.

Читайте также

Список литературы

  1. Основы Скульптурных Примов [Электронный ресурс] // http://denisgradenko.narod.ru/blenderforsl/the_basics_of_sculpted_prims.html
  2. Создаем скульптурные примы, часть первая [Электронный ресурс] // http://www.secondlife.ru/?act=articles&id=156
  3. Котов В. К вопросу об импорте 3D моделей в программы с использованием графической библиотеки OpenGL [Электронный ресурс] / В. Котов, О.Ф. Абрамова // Современная техника и технологии. - 2014. - № 1. - C. Режим доступа : http://technology.snauka.ru/2014/01/2965.
  4. Трифанов А.И. Реализация собственного метода визуализации водной поверхности «скользящая текстура» / А.И. Трифанов, О.Ф. Абрамова // Современные наукоёмкие технологии. - 2013. - № 8 (ч. 1). - C. 96-97
  5. Шлыков А.А. Практическая реализация алгоритма поиска кратчайшего пути А* для трёхмерных моделей зданий / А.А. Шлыков, О.Ф. Абрамова // Современные наукоёмкие технологии. - 2014. - № 5 (ч. 2). - C. 17-18.

Цитировать

Абрамова, О.Ф. Создание реалистичных моделей в высоконагруженных проектах / О.Ф. Абрамова, А.В. Книжко. — Текст : электронный // NovaInfo, 2016. — № 44. — С. 33-41. — URL: https://novainfo.ru/article/5573 (дата обращения: 21.01.2022).

Поделиться