понедельник, 23 августа 2010 г.

Разработка графической библиотеки

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

1.1 Состав графической библиотеки

clip_image001
Рисунок 1. Состав графической библиотеки
Графическая библиотека состоит из двух основных частей: программного кода и содержимого (Рисунок 1). Программный код будет подробно описан в следующих разделах.
К содержимому графической библиотеки относятся файлы содержащие различные, необходимые компоненты такие как: текстуры, модели, файлы шрифтов и шейдры. Это содержимое может быть скомпилировано отдельно, при этом каждый файл преобразуется в файл в специальном платформенно независимом формате .xnb.
Программный код компилируется в .dll сборку. Полученные файлы .xnb и .dll подключаются к новому приложению.

1.2 Архитектура графичекой библиотеки

Рассмотрим подробнее программный код графической библиотеки (Рисунок 2).
clip_image002
Рисунок 2. Архитектура графической библиотеки
Графическая библиотека состоит из нескольких важный модулей, рассмотрим более подробно каждый из модулей.
1.2.1 Модуль работы с графическими примитивами
В качестве платформы реализации графической библиотеки была выбрана технология Microsoft XNA Framework, однако эта технология не поддерживает работу с трехмерными графическими примитивами высокого уровня, такими как сферы, кубы и.т.д.
В рамках работы используется библиотека графических примитивов поддерживающая следующие примитивы:
  • Тор
  • Сфера
  • Куб
  • Цилиндр
  • Чайник
Все примитивы создаются из вершин формата VertexPositionNormal то есть устанавливают для каждой вершины позицию и нормаль. Иерархия классов библиотеки примитивов приведена на рисунке 3.
clip_image004
Рисунок 3. Иерархия классов графических примитивов
Каждый примитив может использовать как стандартный эффект BasicEffect так и произвольный эффект из графической библиотеки.
1.2.2 Модуль вспомогательных компонентов
В данном модуле собраны различные вспомогательные элементы, которые упрощают прототипирование, разработку и отладку приложений, разрабатываемых с использованием графической библиотеки.
Реализовано несколько различных моделей описания и управления камерой:
  • Свободная камера – эту камеру наиболее удобно использовать в отладочных целях. Все управление с клавиатуры и мыши уже реализовано внутри библиотеки.
  • Камера от первого лица – камера реализует «вид из глаз». Камера может использоваться в множестве различных видов игр, а также в найчных приложения и приложениях 3D моделирования.
  • Камера от третьего лица – камера «прикреплена» к какому-либо объекту на определенном расстоянии от него. Может применяться в различных приложениях, основное применение – игры от третьего лица.
Все они реализуются в виде отдельных классов, которые наследуются от основоного класса AbstractCamera, который, в свою очередь, реализует интерфейс GameComponent, что позволяет максимально легко интегрировать камеру в новое приложение.
clip_image006
Рисунок 4. Иерархия классов камеры
Основными параметрами камеры являются ее позиция, которая совпадает с позицией наблюдателя, а также матрица вида, которая необходима при использовании эффектов.
Также реализованы такие компоненты как счетчик количества кадров в секунды, профилировщик, логгер.
Счетчик количества кадров в секунду легко подключается к любому приложению и является основным инструментом для определения производительности.
Счетчик поддерживает различные методы вычисления количества кадров в секунду:
  • Моментальное текущее значение – вычисляется по формуле
clip_image008, (1)
где clip_image010 - время рендеринга предыдущего кадра в секундах. Определяется как разница между временем начала рендеринга предыдущего и текущего кадров. Значение является наиболее точным, однако подвержено слишком частым изменениям в зависимости от текущих параметров сцены, в связи с чем может потребоваться вычисление среднего значения на некотором интервале времени.
  • Значение на интервале времени – вычисляется по формуле
clip_image012, (2)
где frames – это количество кадров, отрисованных за интервал времени t (в секундах).
  • Инерционное значение – определяется по формуле:
clip_image014 (3)
где clip_image016-значение количества кадров в секунду на предыдущем интервале, clip_image018 – текущее значение количества кадров в секунду. К – коэффициент инерционности. Данный вид счетчика позволяет избавиться от скачков значений (которые присутствуют при использовании счетчика, определяющего моментальное значение).
Профилировщик собирает такие важные значения как количество объектов, полигонов и т.д. Это параметры сцены оказывают большое влияние на время рендеринга сцены и итоговую производительность приложения.
1.2.3 Модуль базовых компонентов 3D
Модуль реализует базовые элементы 3D графики:
  • Источники освещения – реализованы различные источники света.
  • Материалы объектов – материал объекта задает такие важные параметры как коэффициенты взаимодействия с освещением, текстуры, дополнительные параметры различных эффектов и т.д.
  • Трехмерные модели – реализуют представление моделей в графической библиотеке. Связывают загруженную из файла модель с определенными эффектами, материалами, позволяют задавать мировую матрицу для объекта, а также поддерживают другую необходимую функциональность.
Рассмотрим более подробно иерархию классов, реализующих источники света (Рисунок 5).
clip_image020
Рисунок 5. Иерархия классов источников света
Реализованы стандартные виды источников света:
· Направленный – бесконечно удаленный точечный источник света. Лучи от такого источника света идут параллельно и не ослабевают с расстоянием.
· Точечный – лучи рассеиваются равномерно во все стороны, свет затухает с расстоянием.
· Прожекторый (Spot) – реализует источник света подобный прожектору (фонарю). Лучи направлены в одну сторону, идут параллельно. Затухают с увеличением расстояния от точки, в которую направлен источник света.
Источники света реализуют DrawableGameComponent, что позволяет автоматически отрисовывать их в отладочных целях.
1.2.4 Модуль работы с эффектами
Модуль работы с эффектами – это основной модуль графической библиотеки, он разбит на несколько подмодулей (Рисунок 6). Модуль реализует эффекты нефотореалистичной графики описанные в предыдущих главах, с использоваем шейдеров на языке HLSL и классов, реализующих шейдерные эффекты на C#. Такие классы позволяют работать с низкоуровневыми шейдерами в понятиях высокоуровнего языка.
clip_image021
Рисунок 6. Модуль работы с эффектами
Рассмотрим подробнее подмодули системы.
Поскольку рассматриваемые эффекты являются достаточно сложными с точки зрения рендеринга необходима поддержка множественных плоскостей рендеринга. Данные подмодуль позволяет управлять плоскостями рендеринга, получать с них текстуры и обрабатывать дополнительными шейдерами.
Подмодуль вспомогательных эффектов реализует такие вспомогательные эффекты как: рендеринг нормалей, различных буферов (таких как буфер глубины) на дополнительную плоскость рендеринга.
Подмодуль обработки растровых изображений служит как для итоговой постобработки изображения так и для реализации промежуточных преобразований.
Рассмотрим некоторые эффекты, реализованные в данном подмодуле:
  • Фильтры размытия (медианный фильтр, фильтр среднего значения и т.д.)
  • Фильтры выделения границ (оператор Робертса, оператор Собеля и т.д.)
  • Точечные фильтры (преобразование цветовых схем, коррекция контраста и т.д.)
  • Сложные эффекты (выделение границ оператором Кенни и др.)
Подмодуль обработки 3D объектов реализует различные эффекты применяемые к сцене до проекционного преобразования (то есть на том этапе, когда объекты еще представлены в трехмерных координатах).
Реализованы такие эффекты как: различные модели освещения, эффекты штриховки, выделение контуров объектов и т.д.
clip_image023
Рисунок 7.Иерархия эффектов, реализующих модели освещения
Рассмотрим более подробно программную реализацию моделей освещения (Рисунок 7). Реализовано четыре модели освещения:
  • Модель Ламберта
  • Модель Фонга
  • Модель Гуч
  • Модель Toon
Каждой модели освещения соответствует отдельный файл с шейдером, а в графической библиотеке реализованы классы, позволяющие обращаться к параметрам шейдера и использовать его для рендеринга моделей и примитивов. Некоторые параметры эффектов могут автоматически определяться из материалов, используемых моделями.

1.3 Примеры использования

Также в ходе работы было создано несколько приложений, использующих библиотеку для апробации методов нефотореалистичной компьютерной графики, а также несколько различных демонстрационных приложений.
Рассмотрим основные функции наиболее интересных приложений.
clip_image025
Рисунок 8. Интерфейс приложения, реализующего методы выделения границ на центральном процессоре
На рисунке 8 приведен пользовательский интерфейс приложения, реализующего методы выделения на центральном процессоре.
К основным функциям приложения относятся:
· Загрузка изображений
· Выбор метода выделения границ и задание порога
· Определение производительности
· Определение отношения сигнал/шум для изображения
clip_image027
Рисунок 9. Интерфейс приложения, реализующего методы выделения границ на видеокарте
На рисунке 9 приведен пользовательский интерфейс приложения, реализующего методы выделения на видеокарте.
Функционально приложение практически ничем не отличается от предыдущего.
clip_image029
Рисунок 10. Интерфейс приложения, реализующего метод выделения внутренних границ объектов в трехмерной сцене
На рисунке 10 приведен пользовательский интерфейс приложения, реализующего метод выделения внутренних границ объектов в трехмерной сцене.
К основным возможностям приложения относятся:
· Управления камерой
· Управление позицией источника света
· Вывод информации из раличных буферов (буфер идентификаторов, буфер нормалей, карты границ) на экран
· Определение производительности приложения
clip_image031
Рисунок 11. Интерфейс приложения, реализующего модель освещения Toon
На рисунке 11 приведен пользовательский интерфейс приложения, приложения, реализующего стандартную модель освещения Toon, а также модифицированную модель освещения Toon.
К основным возможностям приложения относятся:
· Управления камерой
· Управление позицией источника света
· Управление моделью
· Вывод информации из различных буферов (буфер диффузного освещения, буфер нормалей, карты границ) на экран
· Загрузка маски освещения
· Определение производительности приложения

1.4 Итоги

Итак, в процессе работы была разработана архитектура и осуществлена реализация прототипа графической библиотеки методов нефотореалистичной визуализации реального времени. Также для апробации методов НФГ, было создано несколько приложений, использующих разработанную библиотеку, а также несколько различных демонстрационных приложений.

Комментариев нет:

Отправить комментарий