Процедурное текстурирование

Постановка задачки

Задачка данного курсового проекта избрать некий набор эффектов компьютерной графики из перечня представленного в таблице 1 и воплотить их при помощи библиотек OpenGL.

Табл. 1. Перечень эффектов

Заглавие эффекта Число баллов
Обыкновенные эффекты
Отбрасывание тени на плоскости
Расчет освещенности и закраска по Гуро
Системы частиц первого порядка
Анимация объекта(-ов)
Кубические Процедурное текстурирование текстуры в режиме среды (environmental maps)
Туман
Стандартные эффекты
Отбрасывание тени на другие объекты
Зеркальные грани
Процедурные текстуры (описываемые математическими формулами)
Рельефное текстурирование (Bump mapping, Normal mapping)
Антиалиасинг (сглаживание)
Переменная глубина резкости
Объекты “биллбоард” с полупрозрачностью (объекты, которые всегда направлены к наблюдающему одной стороной)
Сложные эффекты (Часть 1)
Программно-заданный объект Процедурное текстурирование нетривиальной формы (с дырками)
Обоюдное затененение, самозатенение
Расчет освещенности и закраска по Фонгу
Полупрозрачные объекты, требующие упорядоченного вывода граней
Сплайновые поверхности. Сплайновый объект должен составлять существенную часть сцены
Нетривиальные морфинг и анимация с конфигурацией связности объектов
Меташары
Рендеринг больших данных
Слоистый туман
Неординарные модели освещения
Сложные эффекты (Часть 2)
Полупрозрачные объекты с Процедурное текстурирование преломлением
Моделирование движения и столкновения сложных объектов
Большие либо протяженные источники освещения
CSG
Близкое к реальности моделирование дыма, туч, поверхности воды
Нечеткие тени
Нечеткие отражения
Фотонные карты (нелокальные модели освещения)
Дополнительно
Передвижение наблюдающего в пространстве и изменение угла обзора (обработка кнопкой мыши и клавиатуры)
Музыкальное сопровождение сцены

Для реализации Процедурное текстурирование мной были выбраны последующие эффекты:

· процедурное текстурирование;

· объекты «биллбоард» с полупрозрачностью;

· меташары;

· нетривиальный морфинг и анимация с конфигурацией связности объектов.


Реализация избранных эффектов

Процедурное текстурирование

Процедурные текстуры – это текстуры, описываемые математическими формулами. Такие текстуры не занимают в видеопамяти места, они создаются пиксельным шейдером сразу, каждый их элемент выходит в итоге выполнения Процедурное текстурирование соответственных команд шейдера. Более распространенные процедурные текстуры: различные виды шума, дерево, вода, лава, дым, мрамор и огнь. Другими словами те, которые использовались анимационные текстуры с помощью всего только маленький модификации математических формул [1].

Характеристики процедурных текстур:

· обратимость. В процедурной текстуре сохраняется вся история её сотворения;

· малый размер;

· огромное количество Процедурное текстурирование вариантов при использовании стохастических алгоритмов;

· масштабируемость до хоть какого размера;

· сразу с итоговой текстурой совсем не сложно получаются alpha-, bump-, reflect-карты.

Для реализации процедурных текстур в моём приложении был избран метод Перлина. Шум Перлина – математический метод по генерированию процедурной текстуры псевдослучайным способом. Употребляется в компьютерной графике для Процедурное текстурирование роста реализма либо графической трудности поверхности геометрических объектов. Также может употреблялся для генерации эффектов дыма, тумана и многих других эффектов.

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

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

Метод можно Процедурное текстурирование масштабировать одно-, двух- и трёхмерного вида. Более того, можно дополнить метод четвёртым временным измерением, которое позволяет динамически изменять текстуры во времени.

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

Полупрозрачные объекты

Прозрачность позволяет использовать полупрозрачные объекты в сцене, что может существенно повысить реалистичность изображения.

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

Режим врубается при помощи команды glEnable(GL_BLEND). Найти характеристики смешения можно при помощи команды glBlendFunc(enum src, enum dst). Параметр определяет, как получить коэффициент начального цвета пикселя, а вые определяет метод получения коэффициента для цвета в буфере кадра. Для получения результирующего цвета употребляется Процедурное текстурирование последующая формула: , где – цвет начального пикселя, – цвет пикселя в буфере кадра. Все значения в формуле являются векторами [3].

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

· все прозрачные объекты выводятся после непрозрачных;

· при выводе объекты с прозрачность Процедурное текстурирование должны быть упорядочены по уменьшению глубины, т.е. выводиться, начиная с более отдаленных [4].

Меташары

Меташар – n-мерный объект в компьютерной графике, представляющий из себя замкнутую сглаженную поверхность (рис. 1). Техника рендеринга меташаров была придумана Джимом Блинном сначала 1980-х годов [5].

Рис. 1. Меташар

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

Любая управляющая точка определяет свою n-мерную потенциальную функцию . Замет выбирается некоторое значение (потенциал), которое определяет форму меташара (практически, определяется эквипотенциальная поверхность). Таким макаром, неравенство определяет, находится ли точка снутри поверхности, данной управляющими точками, либо нет. Нередко в качестве функции задающей Процедурное текстурирование меташар употребляют , где – цент меташара. Но внедрение деления делает эту функцию неэффективной по скорости, потому обычно её подменяют аппроксимирующими полиномиальными функциями.

Лучше, чтоб функция потенциала удовлетворяла требованиям компактности носителя и гладкости.

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

Так как меташар является результатом суперпозиции полей управляющих точек, её гладкость находится в зависимости от гладкости функций потенциала.

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

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

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

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

Метод шагающих кубов

Метод шагающих кубов (marching cubes) – это метод в компьютерной графике, в первый раз предложенный в 1987 году на конференции SIGGRAPH Вильямом Лоренсеном и Процедурное текстурирование Харви Клайном [6], для обработки полигональной сетки изоповерхности трехмерного скалярного поля.

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

Потому что метод выбирает Процедурное текстурирование полигоны, исходя только из положения вершин куба относительно изоповерхности, всего выходит 256 вероятных конфигураций полигонов, которые можно вычислить заблаговременно и сохранять в массиве. Потому каждый куб можно представить восьмибитным числом, сопоставив каждой верхушке 1, если значения поля в точке больше, чем на изоповерхности, и 0 в неприятном случае. Приобретенное число употребляется в качестве индекса Процедурное текстурирование частей массива, хранящего конфигурации полигонов. В конце концов, любая верхушка сгенерированного полигона помещается в подходящую позицию на том ребре куба, на котором она лежала вначале. Позиция рассчитывается оковём линейной интерполяции значений скалярного поля в концах ребра.

Заблаговременно вычисленный массив из 256 конфигураций полигонов можно получить поворотами и Процедурное текстурирование отражениями 15 разных конфигураций куба (рис. 2).

Рис. 2. 15 разных конфигураций куба

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

Данный метод обширно Процедурное текстурирование употребляется для трёхмерного моделирования меташаров либо других метаповерхностей (рис. 3).

Рис. 3. Пример работы метода на плоскости

Реализация эффектов

Для демонстрации реализации избранных мной эффектов компьютерной графики была составлена сцена (рис. 4), содержащая три полупрозрачных меташара (рис. 5), которые образуют эффект нетривиалного морфинга и анимацию со связность объектов (рис. 6). Также была установлена на фон Процедурное текстурирование сцены процедурная текстура, сделанная способом шума Перлина (рис. 7).

Рис. 4. Сцена программки

void InitMetaballs() { MetaBalls[0].radius = 0.3; MetaBalls[0].x = 0; MetaBalls[0].y = 0; MetaBalls[0].z = 0; MetaBalls[1].radius = 0.22; MetaBalls[1].x = 0; MetaBalls[1].y = 0; MetaBalls[1].z = 0; MetaBalls[2].radius = 0.25; MetaBalls[2].x = 0; MetaBalls[2].y = 0; MetaBalls[2].z = 0; }

Рис. 5. Программный код, демонстрирующий инициализацию метошаров

void MetaballsAnimation(){ glRotatef((GLfloat)ElapsedTime / 30, 0.0, 0.0, 1.0); GLfloat c Процедурное текстурирование = 0.15*cos(ElapsedTime / 600.0); MetaBalls[0].x = -0.3*cos(ElapsedTime / 700.0) - c; MetaBalls[0].y = 0.3*sin(ElapsedTime / 600.0) - c; MetaBalls[1].x = 0.4*sin(ElapsedTime / 400.0) + c; MetaBalls[1].y = 0.4*cos(ElapsedTime / 400.0) - c; MetaBalls[2].x = -0.4*cos(ElapsedTime / 400.0) –0.2*sin(ElapsedTime / 600.0); MetaBalls[2].y = 0.4*sin(ElapsedTime / 500.0) - 0.2*sin(ElapsedTime / 400.0); }

Рис. 6. Программный код, описывающий движения меташаров

int PerlinNoise_2D(float x, float y, float factor){ float total = cosf Процедурное текстурирование(sqrtf(2))*3.14f; float persistence = 0.5f; float frequency = 0.25f; float amplitude = 1.75; x += (factor); y += (factor); for (int i = 0; i < NumOctaves; i++){ total += CompileNoise(x*frequency, y*frequency) * amplitude; amplitude *= persistence; frequency *= 2; } total = fabsf(total); int res = int(total*255.0f); return res; }

Рис 7. Основная функция по созданию шума Перлина

Для Процедурное текстурирование реализации эффектов был избран язык С++ и среда разработки Microsoft Visual Studio 2015.

ЗАКЛЮЧЕНИЕ

В рамках курсового проекта были реализованы последующие эффекты компьютерной графики:

· процедурное текстурирование;

· объекты «биллбоард» с полупрозрачностью;

· меташары;

· нетривиальный морфинг и анимация с конфигурацией связности объектов.


Перечень ЛИТЕРАТУРЫ

1. Современная терминология 3D графики. [Электронный ресурс] URL: http://www.ixbt.com/video2/terms Процедурное текстурирование2k5.shtml#pt (дата воззвания 15.02.17)

2. Kerman, Phillip. Macromedia Flash 8 @work: Projects and Techniques to Get the Job Done. Sams Publishing. 2006

3. Учебное пособие по OpenGL. [Электронный ресурс] URL: http://rsdn.org/article/opengl/ogltutor.xml#EXEAG (дата воззвания 17.02.17)

4. Создание прозрачных объектов в OpenGL. [Электронный ресурс] URL: http://media Процедурное текстурирование.ls.urfu.ru/435/1147/2454 (дата воззвания 19.02.17)

5. Intro to Metaballs. [Электронный ресурс] URL: http://steve.hollasch.net/cgindex/misc/metaballs.html (дата воззвания 20.02.17)

6. William E. Lorensen, Harvey E. Cline: Marching Cubes: A high resolution 3D surface construction algorithm. In: Computer Graphics, Vol. 21, Nr. 4, July 1987


proceduri-i-funkcii-dlya-raboti-s-fajlami-i-katalogami.html
proceduri-i-funkcii-sistema-zadach-i-uprazhnenij-po-yaziku-programmirovaniya-pascal-sost-e-yuzhohova-i-e-kokoreva.html
proceduri-napryamuyu-vliyayushie-na-sliyanie.html