Сегодня существует множество подходов к созданию нефотореалистичных изображений, но только некоторые из них можно применить для движущихся изображений. Такие области, как мультипликация, кино и создание игр, - не могут обойтись без визуализации в реальном времени. Решений построения фотореалистичной графики уже достаточно много. Однако на данный момент не существует общего решения проблемы построения на компьютере нефотореалистичных изображений и их последующей анимации. Студии, сталкивающиеся с данной проблемой, применяют свои решения для создания рисованных мультфильмов и нефотореалистичной визуализации, которые приспособлены под их конкретные проекты. В то же время, существующие методы постоянно совершенствуются и создаются новые. Задача разработки методов нефотореалистичной графики является очень интересной и сложной.
В заключение данной главы можно резюмировать, что система нефотореалистичного рендеринга, работающая в реальном времени и доступная для использования рядовым пользователем, не имеющим специфических навыков в области компьютерной графики, была бы востребованной. Не подлежит сомнению, что проблема разработки новых эффективных методов нефотореалистичной компьютерной графики в настоящее время является актуальной.
В этой статье будет рассмотрена архитектура и программная реализация разрабатываемой графической библиотеки.
1.1 Состав графической библиотеки
Рисунок 1. Состав графической библиотеки
Графическая библиотека состоит из двух основных частей: программного кода и содержимого (Рисунок 1). Программный код будет подробно описан в следующих разделах.
К содержимому графической библиотеки относятся файлы содержащие различные, необходимые компоненты такие как: текстуры, модели, файлы шрифтов и шейдры. Это содержимое может быть скомпилировано отдельно, при этом каждый файл преобразуется в файл в специальном платформенно независимом формате .xnb.
Программный код компилируется в .dll сборку. Полученные файлы .xnb и .dll подключаются к новому приложению.
1.2 Архитектура графичекой библиотеки
Рассмотрим подробнее программный код графической библиотеки (Рисунок 2).Рисунок 2. Архитектура графической библиотеки
Графическая библиотека состоит из нескольких важный модулей, рассмотрим более подробно каждый из модулей.
1.2.1 Модуль работы с графическими примитивами
В качестве платформы реализации графической библиотеки была выбрана технология Microsoft XNA Framework, однако эта технология не поддерживает работу с трехмерными графическими примитивами высокого уровня, такими как сферы, кубы и.т.д.В рамках работы используется библиотека графических примитивов поддерживающая следующие примитивы:
- Тор
- Сфера
- Куб
- Цилиндр
- Чайник
Рисунок 3. Иерархия классов графических примитивов
Каждый примитив может использовать как стандартный эффект BasicEffect так и произвольный эффект из графической библиотеки.
1.2.2 Модуль вспомогательных компонентов
В данном модуле собраны различные вспомогательные элементы, которые упрощают прототипирование, разработку и отладку приложений, разрабатываемых с использованием графической библиотеки.Реализовано несколько различных моделей описания и управления камерой:
- Свободная камера – эту камеру наиболее удобно использовать в отладочных целях. Все управление с клавиатуры и мыши уже реализовано внутри библиотеки.
- Камера от первого лица – камера реализует «вид из глаз». Камера может использоваться в множестве различных видов игр, а также в найчных приложения и приложениях 3D моделирования.
- Камера от третьего лица – камера «прикреплена» к какому-либо объекту на определенном расстоянии от него. Может применяться в различных приложениях, основное применение – игры от третьего лица.
Рисунок 4. Иерархия классов камеры
Основными параметрами камеры являются ее позиция, которая совпадает с позицией наблюдателя, а также матрица вида, которая необходима при использовании эффектов.
Также реализованы такие компоненты как счетчик количества кадров в секунды, профилировщик, логгер.
Счетчик количества кадров в секунду легко подключается к любому приложению и является основным инструментом для определения производительности.
Счетчик поддерживает различные методы вычисления количества кадров в секунду:
- Моментальное текущее значение – вычисляется по формуле
где - время рендеринга предыдущего кадра в секундах. Определяется как разница между временем начала рендеринга предыдущего и текущего кадров. Значение является наиболее точным, однако подвержено слишком частым изменениям в зависимости от текущих параметров сцены, в связи с чем может потребоваться вычисление среднего значения на некотором интервале времени.
- Значение на интервале времени – вычисляется по формуле
где frames – это количество кадров, отрисованных за интервал времени t (в секундах).
- Инерционное значение – определяется по формуле:
где -значение количества кадров в секунду на предыдущем интервале, – текущее значение количества кадров в секунду. К – коэффициент инерционности. Данный вид счетчика позволяет избавиться от скачков значений (которые присутствуют при использовании счетчика, определяющего моментальное значение).
Профилировщик собирает такие важные значения как количество объектов, полигонов и т.д. Это параметры сцены оказывают большое влияние на время рендеринга сцены и итоговую производительность приложения.
1.2.3 Модуль базовых компонентов 3D
Модуль реализует базовые элементы 3D графики:- Источники освещения – реализованы различные источники света.
- Материалы объектов – материал объекта задает такие важные параметры как коэффициенты взаимодействия с освещением, текстуры, дополнительные параметры различных эффектов и т.д.
- Трехмерные модели – реализуют представление моделей в графической библиотеке. Связывают загруженную из файла модель с определенными эффектами, материалами, позволяют задавать мировую матрицу для объекта, а также поддерживают другую необходимую функциональность.
Рисунок 5. Иерархия классов источников света
Реализованы стандартные виды источников света:
· Направленный – бесконечно удаленный точечный источник света. Лучи от такого источника света идут параллельно и не ослабевают с расстоянием.
· Точечный – лучи рассеиваются равномерно во все стороны, свет затухает с расстоянием.
· Прожекторый (Spot) – реализует источник света подобный прожектору (фонарю). Лучи направлены в одну сторону, идут параллельно. Затухают с увеличением расстояния от точки, в которую направлен источник света.
Источники света реализуют DrawableGameComponent, что позволяет автоматически отрисовывать их в отладочных целях.
1.2.4 Модуль работы с эффектами
Модуль работы с эффектами – это основной модуль графической библиотеки, он разбит на несколько подмодулей (Рисунок 6). Модуль реализует эффекты нефотореалистичной графики описанные в предыдущих главах, с использоваем шейдеров на языке HLSL и классов, реализующих шейдерные эффекты на C#. Такие классы позволяют работать с низкоуровневыми шейдерами в понятиях высокоуровнего языка.Рисунок 6. Модуль работы с эффектами
Рассмотрим подробнее подмодули системы.
Поскольку рассматриваемые эффекты являются достаточно сложными с точки зрения рендеринга необходима поддержка множественных плоскостей рендеринга. Данные подмодуль позволяет управлять плоскостями рендеринга, получать с них текстуры и обрабатывать дополнительными шейдерами.
Подмодуль вспомогательных эффектов реализует такие вспомогательные эффекты как: рендеринг нормалей, различных буферов (таких как буфер глубины) на дополнительную плоскость рендеринга.
Подмодуль обработки растровых изображений служит как для итоговой постобработки изображения так и для реализации промежуточных преобразований.
Рассмотрим некоторые эффекты, реализованные в данном подмодуле:
- Фильтры размытия (медианный фильтр, фильтр среднего значения и т.д.)
- Фильтры выделения границ (оператор Робертса, оператор Собеля и т.д.)
- Точечные фильтры (преобразование цветовых схем, коррекция контраста и т.д.)
- Сложные эффекты (выделение границ оператором Кенни и др.)
Реализованы такие эффекты как: различные модели освещения, эффекты штриховки, выделение контуров объектов и т.д.
Рисунок 7.Иерархия эффектов, реализующих модели освещения
Рассмотрим более подробно программную реализацию моделей освещения (Рисунок 7). Реализовано четыре модели освещения:
- Модель Ламберта
- Модель Фонга
- Модель Гуч
- Модель Toon
1.3 Примеры использования
Также в ходе работы было создано несколько приложений, использующих библиотеку для апробации методов нефотореалистичной компьютерной графики, а также несколько различных демонстрационных приложений.Рассмотрим основные функции наиболее интересных приложений.
Рисунок 8. Интерфейс приложения, реализующего методы выделения границ на центральном процессоре
На рисунке 8 приведен пользовательский интерфейс приложения, реализующего методы выделения на центральном процессоре.
К основным функциям приложения относятся:
· Загрузка изображений
· Выбор метода выделения границ и задание порога
· Определение производительности
· Определение отношения сигнал/шум для изображения
Рисунок 9. Интерфейс приложения, реализующего методы выделения границ на видеокарте
На рисунке 9 приведен пользовательский интерфейс приложения, реализующего методы выделения на видеокарте.
Функционально приложение практически ничем не отличается от предыдущего.
Рисунок 10. Интерфейс приложения, реализующего метод выделения внутренних границ объектов в трехмерной сцене
На рисунке 10 приведен пользовательский интерфейс приложения, реализующего метод выделения внутренних границ объектов в трехмерной сцене.
К основным возможностям приложения относятся:
· Управления камерой
· Управление позицией источника света
· Вывод информации из раличных буферов (буфер идентификаторов, буфер нормалей, карты границ) на экран
· Определение производительности приложения
Рисунок 11. Интерфейс приложения, реализующего модель освещения Toon
На рисунке 11 приведен пользовательский интерфейс приложения, приложения, реализующего стандартную модель освещения Toon, а также модифицированную модель освещения Toon.
К основным возможностям приложения относятся:
· Управления камерой
· Управление позицией источника света
· Управление моделью
· Вывод информации из различных буферов (буфер диффузного освещения, буфер нормалей, карты границ) на экран
· Загрузка маски освещения
· Определение производительности приложения
Комментариев нет:
Отправить комментарий