Создание фотореалистичных изображений является одной из основных проблем компьютерной графики. Для построения таких изображений используются различные алгоритмы, которые постоянно совершенствуются.
Фотореалистичные изображения создаются специальными алгоритмами, которые используют стандартные графические библиотеки OpenGL или DirectX. Эти библиотеки предоставляют базовый набор инструментов. Однако получаемые при этом изображения нельзя назвать фотореалистичными. Дело в том, что функции OpenGL и DirectX используют простую модель освещения (способ определения цвета пикселя), а также не учитывают преломление и отражение света от других объектов сцены.
Для построения фотореалистичных изображений необходимо использовать более сложные модели освещения и алгоритмы, которые учитывают свет, отраженный от окружающий обстановки. Специалисту, занимающемуся созданием таких алгоритмов, их тестированием и совершенствованием, необходимы средства, позволяющие уменьшить трудозатраты и ускорить процесс разработки.
Построение трехмерного изображения состоит из нескольких этапов. Первый этап, моделирование - создание формы и расположение объектов сцены. Сцена - это совокупность геометрических примитивов с наложенными на них материалами, источников света и камер. Второй этап - описание и наложение материалов на объекты. Третий этап - расстановка источников света для того, чтобы появились эффекты теней, отражения, преломления и т.п. Четвертый этап, установка камеры - выбор точки, из которой наблюдатель смотрит на сцену. Последний этап, визуализация - построение изображения по описанию сцены. На этапе визуализации учитывается модель освещения. В качестве алгоритма визуализации в работе используется алгоритм трассировки луча [3].
Программы построения фотореалистических изображений - достаточно сложные. Одним из способов борьбы со сложными системами является технология ООП [2]. Природа трёхмерных объектов позволяет выделить у них общие, а также специфические особенности и на базе этого анализа построить объектно-ориентированную модель.
В работе создана надстройка над графической библиотекой DirectX, которая предоставляет готовые легко-модифицируемые инструменты для построения фотореалистичных изображений, избавляя специалиста от реализации необходимых ему методов. Стоит отметить, что эта надстройка является легко-модифицируемой и расширяемой. Например, специалист может добавить новые графические примитивы без повторного написания большого количества кода. Таким образом, разработана технологию создания трехмерных фотореалистичных изображений с использованием алгоритма трассировка луча. Эта технология предоставляет гибкий и расширяемый инструментарий.
На рис. 1 представлена структура системы построения фотореалистических изображений.
Для описания сцены используется язык Scene Description Language (SDL) [1]. На базе спецификации этого языка разработан текстовый редактор с простой подсветкой синтаксиса и автодополнением ключевых слов SDL. В дальнейшем планируется разработать визуальный редактор сцены, который будет генерировать описание на SDL. Описание сцены на SDL используется для построения иерархии классов сцены. На рис. 2 представлена эта иерархия.
Геометрические примитивы
Для геометрических примитивов вершиной иерархии является абстрактный класс GeomObj, реализующий виртуальные функции процесса визуализации. От этого класса наследуются три класса. Первый класс, Shape - простые геометрические примитивы с наложенным материалом. От класса Shape наследуются конкретные примитивы, такие как куб, сфера и т.п. Второй класс, Spline - представляет собой объекты, заданные сплайнами. Третий класс, BoolObj - сложные составные объекты, получающиеся из простых с помощью операций объединения, разности, пересечения и т.п.
Материалы
Для материалов вершиной иерархии является абстрактный класс Material, реализующий виртуальные методы получения цвета объекта. От него наследуется три класса: BitmapTexture - растровая текстура, ProceduralTexture - текстура, задаваемая некоторым алгоритмом, SimlpeMaterial - простой материал, задаваемый фоновой, зеркальной и диффузной составляющей.
Источники света
Для источников света вершиной иерархии является класс Light, содержащий общие для всех видов источников света свойства - расположение, цвет и яркость. От него наследуются источник света типа прожектор(SpotLight) и направленный источник света (DirectionalLight).
Кроме того, существуют дополнительные классы, которые не являются частью иерархии, такие как вектор, матрица, луч, точка, цвет и т.п. Эти классы используются для организации процесса визуализации.
Разработанная иерархия может быть расширена за счет добавления новых видов примитивов, источников света и материалов без существенного изменения кода системы.
После описания сцены и построения соответствующей объектной модели начинается этап визуализации. Во время визуализации используется предварительно выбранная модель освещения. Модели освещения различаются своей реалистичностью и ресурсоемкостью. В некоторой ситуации надо получить изображение быстро, но не очень качественно, в некоторых - наоборот. Существует много различных моделей освещения. Поэтому для работы с ними предложено использовать модульный принцип построения приложения, а именно плагины. Плагин - это независимо компилируемый программный модуль, динамически подключаемый к основной программе и предназначенный для расширения её возможностей.
Каждая отдельная модель освещения реализуется плагином со своими настройками. Для реализации плагинов используется интерфейс IPluginShading. Этот интерфейс инкапсулирует два свойства и два метода, которые необходимо реализовать разработчику в своем плагине:
Для разработки нового плагина разработчику необходимо:
Важно отметить, что визуализатор взаимодействует только с графической библиотекой, что позволяет при необходимости сменить ее (например, OpenGl на DirectX), переписав лишь визуализатор.
На рис. 3 и рис. 4 показаны примеры построенных сцен. Для визуализации сцены на рис. 3 использована модель освещение Фонга, а для визуализации сцены на рис. 4 - модель освещение Кука-Торренса.
Обе модели освещения реализованы в виде плагинов. Для каждой модели реализован учет теней и множественного отражения. Кроме того, в других приложениях реализованы дополнительные эффекты, такие как прозрачность и преломление.
Первоначальное приложение для отображения изображения использует DirectX. Другое использует OpenGL. Для этого переписан визуализатор, а остальные части (иерархия классов для описания сцены; плагины, реализующие модели освещения, редактор) используются без изменения.
В дальнейшем планируется реализовать и другие эффекты, например, мягкие тени. Для этого нужно создать свой плагин, который будет содержать реализацию модели освещения, поддерживающей необходимые спецэффекты. Таким образом, тестирование разработанной системы на различных приложениях подтверждает её работоспособность.
Библиографический список
Научный руководитель:
Доцент кафедры математического обеспечения вычислительных систем ПГНИУ, кандидат физико-математических наук, доцент Залогова Л.А.