Разработка среды
программирования для создания
систем синтеза реалистичных
изображений
Е.Ю. Денисов,
н.с, eed@spp.keldysh.ru,
Н.Б. Дерябин,
н.с., dek@keldysh.ru
А.Г. Волобой,
с.н.с., д.ф.- м.н., voloboy@gin.keldysh.ru
ИПМ РАН, г. Москва
Рассматривается решение проблемы эффективной
разработки разнородных программных комплексов оптического моделирования и
синтеза реалистичных изображений. Разработанный универсальный инструментарий
позволяет эффективно создавать, сопровождать, модифицировать и тестировать
такие комплексы. Разработана технология автоматизированного тестирования
сложных программных продуктов и их компонент в области компьютерной графики,
позволившая значительно сократить усилия разработчиков и сроки выпуска таких
программных продуктов. Предложены и реализованы эффективные подходы и методы
обеспечения аппаратной независимости и функциональной модульности разработки
программных комплексов оптического моделирования. На основе разработанного
инструментария созданы несколько программных комплексов компьютерной графики и
моделирования сложных оптических систем.
The
paper is devoted to the problem of efficient development of various software systems
of optical modeling and synthesis of realistic images. The suggested universal
framework allows efficiently develop, maintain and test such systems. Automatic
testing technology for computer graphics software significantly reduces efforts
and time spent for release of such software. Efficient approaches ensuring
independence from hardware and functional modularity of computer graphics
software systems were suggested and implemented. These approaches speed up the
development process and simplify maintenance of such complex software products.
A several different computer graphics and lighting simulation software systems
were developed on the base of that framework.
Алгоритмы реалистичной компьютерной графики широко
применяются в самых различных областях науки, техники, архитектуры. На базе их
решаются такие задачи, как моделирование распределения освещенности,
моделирование поверхностей различных материалов, моделирование распространения
света в различных средах и т.д. При моделировании новых материалов, позволяющем
перед производством проанализировать их оптические свойства (рис. 1), необходимо
применять различные методы синтеза. Для чернил характерна высокая концентрация
красящих частиц, их моделирование возможно только методами волновой оптики. У
автоэмалей низкая концентрация пигментов, применяется комбинация методов
лучевой и волновой оптики [1]. Для моделирования тканей применяется лучевая
оптика. Таким образом, охватывается широкий спектр технологий.
рис.
1 Примеры моделирования новых материалов
Часто требуется полная интеграция средств
моделирования в существующие системы автоматизированного проектирования и
производства, такие как 3ds Max, CATIA, SolidWorks. Автономные решения в этой
области являются маловостребованными.
Таким образом, возникает необходимость разработки и
поддержки разнородных программных комплексов (т.е. комплексов, использующих
разные вычислительные методы и разные интерфейсы) одним коллективом. Кроме
того, необходимо обеспечить эффективную работоспособность комплексов при их
использовании на различных вычислительных платформах. Для решения этой проблемы
оказалась необходимой разработка единого универсального инструментария,
пригодного для создания разнородных программных комплексов оптического
моделирования и генерации реалистичных изображений. Инструментарий должен
обеспечивать:
·
независимость процесса разработки от оборудования: необходимо освободить
прикладного программиста от заботы о поддержке различных компьютерных архитектур
и устройств;
·
поддержку объектно-ориентированной разработки: для повышения её эффективности
за счёт снижения стоимости и повышения качества;
·
автоматизацию разработки: применение различных путей и механизмов
снижения стоимости разработки.
Разработана поддержка различных версий Windows и
Linux, 32-битные и 64-битные платформы поддерживаются приложением
автоматически, без специальных усилий со стороны прикладных программистов.
Достижение цели стало возможным благодаря следующим примененным приемам:
§
разработанные правила программирования позволяют унифицировать исходный
код для успешной обработки его различными компиляторами на различных платформах:
Microsoft VC++ на Windows, GNU C++ на Unix, Intel C++ на Windows и Unix. Была
проведена большая работа по анализу отличительных особенностей данных
компиляторов, и выработаны правила, позволяющие обеспечить успешную трансляцию
кодов на всех компиляторах;
§
созданы библиотеки нижнего уровня, содержащие наиболее часто
используемую функциональность, зависящую от платформы (например: ввод-вывод;
управление процессами на многопроцессорных и многомашинных комплексах); для
каждой платформы используется свой вариант библиотеки, в то время как
прикладной программист использует единый интерфейс верхнего уровня;
§
используются существующие кросс-платформенные пакеты библиотек (Qt,
DirectX, Lattice Kernel, Open CASCADE,
FFT).
Поддержка различного оборудования скрыта от
разработчиков. Внутри библиотек нижнего уровня так же "спрятаны":
§
использование специфических свойств процессоров (в зависимости от
текущего процессора автоматически используется тот или иной его функционал,
например SSE);
§
использование специфических свойств видеокарт (например, различные шейдеры,
поддержка 3-х мерных изображений);
§
использование различных графических библиотек (OpenGL, DirectX);
§
использование специфических устройств ввода-вывода (SpaceMouse).
Реализована инфраструктура взаимодействия,
позволяющая четко отделить при программировании вычислительное ядро от
компонент, обеспечивающих взаимодействие с пользователем. Стало возможным
использование одного ядра с различными компонентами, обеспечивающими поддержку
различных интерфейсов пользователя. Все нижеперечисленные интерфейсы были
реально реализованы на базе:
Ø
Microsoft MFC;
Ø
X Window;
Ø
Qt;
Ø
интернет-сервисы (COM);
Ø
консольное приложение;
Ø
API.
Имеется так же возможность добавления любого
другого интерфейса – необходимо лишь создать часть, отвечающую за взаимодействие
с пользователем, которая будет использовать имеющееся вычислительное ядро.
Указанная подзадача реализована с помощью набора правил программирования и
созданной инфраструктуры взаимодействия интерфейса с ядром [2].
Правила программирования. Кроме обычных правил ООП
(таких, как принцип замещения Лисков, принцип открытости/закрытости, принцип инверсии
зависимости), еще были сформулированы и применяются свои правила, например:
§ контроль зависимости
компонент: избыточная и циклическая зависимость программных компонент не
допускается, контроль производится на стадии дизайна;
§ регламентируется
использование готовых компонент и их расширение;
§ регламентируется
эффективное и безопасное использование памяти: контроль выделения и
освобождения памяти, специальные техники контроля целостности, использование
разделяемой памяти, контроль доступа в параллельных программах.
Инфраструктура взаимодействия
интерфейса с ядром. В графических приложениях приходится поддерживать очень сложную модель
данных - сцену, состоящую из многих различных объектов, связанных определенными
иерархическими связями. Сцена может динамически меняться. В процессе эволюции
добавляются новые и новые типы объектов сцены.
Все классы, моделирующие сцену, должны обеспечивать
решение следующих общих задач:
§
обеспечение однородного иерархического представления сцены (чтобы вся
сцена могла быть визуально отображена в виде дерева с поименованными вершинами
(объектами сцены) и поименованными ребрами (связями между объектами));
§
обеспечение однородного способа получения списка возможных действий над
объектами сцены и выполнения этих действий (контекстное меню);
§
поддержка стандартных операций копирования, вставки, перетаскивания
объектов (например, при помощи мыши);
§
возможность отмены выполненных действий и повторное выполнение
отмененных действий (undo / redo);
§
возможность работы со сценой с помощью языка сценариев (script
language).
Для достижения этих целей было введено понятие
целевого объекта - объекта, составляющего часть целевого представления сцены.
Для целевого объекта определяются свойства и действия. Целевое свойство
представляет собой поименованную связь между объектами, представляющими сцену.
Целевое действие - это поименованная процедура (функция) с заданным набором
параметров, применимая к данному целевому объекту; она определяется на базе
конкретного метода целевого класса. Целевые действия, как правило, реализуются
как операции над целевыми свойствами (например, заменить значение данного
свойства новым объектом).
Принципиально важной является возможность работы со
свойствами и действиями исключительно через интерфейс базового класса. Это
обеспечивает применимость унифицированных компонент пользовательского
интерфейса (например, иерархическое представление сцены) и процессора языка
сценариев как к существующим, так и будущим (еще не разработанным) целевым
объектам и классам.
Расширяемость графических приложений потребовала
введения различных представлений сцены внутри приложения. Мы используем три вида представления сцены
(рис. 2):
·
Целевое представление. Это представление, ориентированное на конечного
пользователя. Оно использует уровень моделирования, описанный только что.
·
Каноническое представление. Это унифицированное представление сцены, содержащее
всю информацию о сцене в некотором каноническом виде. Оно оптимизировано для
быстрого доступа и является достаточным для простейшей визуализации сцены
(например, с использованием OpenGL) в процессе моделирования.
·
Специальное представление - представление, оптимизированное для
конкретного использования, например, для моделирования освещенности методом
Монте-Карло. В зависимости от конкретных вычислений, возможно использование различных
специальных представлений. Так, различные специальные представления удобны для
работы с разными моделями света (RGB, спектральной). Специальное представление
необходимо и для ускорения вычислений с использованием современных процессоров.
рис.
2 Различные представления сцены
Исходным представлением сцены является ее целевое представление.
Каноническое представление сцены строится по исходному целевому представлению.
Специальные представления строятся по каноническому представлению. Объекты
целевого и специального представлений могут ссылаться на объекты канонического
представления, но не наоборот и не между собой. Модификации сцены выполняются
при помощи целевых действий в объектах целевого представления. При этом целевой
объект соответствующим образом модифицирует каноническое представление. Специальные
представления, о которых каноническое представление формально ничего не знает,
отслеживают модификации канонического представления и перестраиваются должным
образом, используя аппарат уведомлений о событиях.
Описанная схема обеспечивает расширяемость
приложений без необходимости внесения изменений в существующую
функциональность.
Теперь о механизме, обеспечивающем независимость
ядра от интерфейса. К пользовательскому интерфейсу компьютерных систем мы
предъявляем следующие требования:
-
ядро графической системы, обеспечивающее функциональную часть
графического приложения, не должно зависеть от
пользовательского интерфейса;
-
ядро графической системы должно иметь возможность работы с различными
пользовательскими интерфейсами, в том числе через Интернет;
-
повторное (многократное) использование готовых компонент
пользовательского интерфейса.
Удовлетворение этим требованиям достигается
последовательным применением специально разработанной концепции управляющих
элементов.
Класс
управляющего элемента наследуется от подходящего класса системы пользовательского
интерфейса (такой как MFC, Qt) и хранит ссылку на управляемый объект (обычно
некоторый целевой объект ядра графической системы). Управляющий элемент визуально представляет
состояние управляемого объекта для конечного пользователя (например, в виде
диалоговой панели). Если пользователь
вносит какие-либо изменения, управляющий элемент изменяет контролируемый объект
(путем исполнения подходящего целевого действия) по имеющейся у него
ссылке. Если состояние управляемого
объекта изменяется по какой-то внешней причине, управляющий элемент узнает об
этом через механизм уведомления о событиях и модифицирует визуальное
представление для конечного пользователя. Концепция управляющего элемента
применяется иерархически ко всем элементам пользовательского интерфейса. Таким
образом, управляемый объект формально не знает о присутствии управляющего
элемента. Тем самым обеспечивается независимость ядра графической системы от
пользовательского интерфейса и возможность использования различных пользовательских
интерфейсов с одним и тем же ядром.
Кроме того, был создан собственный
кросс-платформенный пользовательский интерфейс. Важная особенность - запись и
воспроизведение действий пользователя с возможностью в любой момент перехватить
управление и продолжить работу. Он очень удобен при организации обучения работе
с системой. Его особенностью также является возможность записывать и
воспроизводить не только действия пользователя (т.е. движения курсора и работу
клавиатуры), но и внутреннюю работу программы (перехватываются и записываются
необходимые вызовы). Полученный сценарий (запись) может быть в дальнейшем
изменен или дополнен.
Независимость вычислительного ядра облегчает
встраивание его в существующие САПР: 3ds Max, CATIA
[3], SolidWorks и другие.
Высокий уровень абстракции оптических примитивов
позволяет использовать их в различных областях оптического моделирования. При
этом обеспечивается автоматическая поддержка сложных оптических эффектов, таких
как поляризация, флуоресценция, пространственное рассеяние и другие. Под
автоматической поддержкой здесь понимается обработка некоторых эффектов,
прозрачная для прикладного программиста. Например, при создании и реализации
нового алгоритма обработки световых лучей, скажем в особой оптической среде,
при использовании существующих объектов и методов трассировки луча, нет
необходимости специально программировать особое поведение луча при проходе
через поляризующие или флуоресцентные материалы. При правильном задании
параметров таких материалов нужные расчеты будут выполнены автоматически уже
имеющимися методами и объектами. И наоборот, новые особенности и свойства будут
автоматически применены в уже имеющихся и работающих алгоритмах.
Детали реализации различных протоколов обмена
данными скрыты от прикладного программиста и доступны через абстрактный
интерфейс. Прикладной программист заранее даже не знает, на скольких
процессорах и/или компьютерах будет выполняться его программа. Использование
специально разработанных библиотек нижнего уровня для управления процессами
обеспечивает "прозрачную" поддержку выполнения программы в распределенных
вычислительных системах различной топологии: обычная компьютерная сеть,
кластеры, гибридные компьютеры.
Для обеспечения возможности распределенной
разработки, в том числе, несколькими коллективами ученых и программистов,
находящимися в разных странах, были созданы определенные правила
программирования. В том числе были изучены правила, применяемые в крупных
программистских коллективах (Microsoft, Intel), полезные и подходящие правила
оттуда были взяты на вооружение.
Был обеспечен механизм
автоматического создания технической документации с помощью введенных правил
программирования и документирования программных объектов. В качестве основы
используется программа автоматической подготовки документации «Doxygen»;
она была доработана для автоматизации создания межкомпонентных зависимостей.
Сложность современных программных комплексов синтеза
фотореалистичных изображений достигла такого уровня, на котором классическое тестирование
этих комплексов (например [4]) становится неэффективным, а часто и невозможным
по ряду причин. Наиболее сложными аспектами этого тестирования и особенности, присущие
нашим продуктам, являются:
-
проверка правильности моделирования физических явлений [5];
-
интерактивность программных комплексов;
-
разнородные комплексы имеют общие программные компоненты;
-
частые выпуски новых версий;
-
ограниченные ресурсы и время.
Для ускорения и удешевления тестирования
используется автоматизация. При любом изменении кода комплекс проходит
процедуру автоматического тестирования. Набор тестов выявляет изменения в
поведении отдельных модулей и продукта в целом. Созданы программы сравнения
изображений и файлов, подходящие для использования в составе автоматических
тестирующих систем.
Среди существующих систем тестирования
пользовательского интерфейса пока не удалось найти систему, отвечающую всем
нашим требованиям. Поэтому была создана своя система автоматического
тестирования [6]. Регрессионное тестирование
обеспечивает совпадение поведения новой реализации системы и её предыдущей
реализации. Оно производится после изменения компоненты, сравнивает результат с
ожидаемым и после тестирования выдает результат "годен - не годен" (в
последнем случае программистом исследуется ожидаемый и реальный вывод и производится
исправление).
Собственный пользовательский интерфейс
используется, в том числе, и для тестирования. Тестирование поведения программы
производится как в пакетном режиме (возможны ошибки из-за отличающегося
поведения), так и в интерактивном (наблюдение за действиями программы в
процессе тестирования, особенно при визуализации).
Применение автоматизированного тестирования
позволило значительно увеличить его скорость.
Структура исходных кодов разработана с учетом
необходимости отдавать их часть сторонним разработчикам. В таком случае
отдаются только части, непосредственно изменяемые такими разработчиками.
Остальные части системы поставляются в виде выполняемых или объектных модулей,
с встроенным на этапе компиляции аппаратно-программным комплексом защиты.
В разработанной среде программирования были созданы
следующие программные комплексы:
ü Inspirer: физически аккуратное моделирование освещённости;
ü Catia Inspirer: плагин для САПР
CATIA;
ü InSight: плагин для САПР 3DS
MAX;
ü Specter: моделирование и анализ оптических систем;
ü Instant Light: моделирование и анализ систем освещения;
ü Instant Reflector: автоматическое моделирование отражателей;
ü Formula II: интерактивное моделирование оптически сложных покрытий;
ü LKernel: интерактивное моделирование освещенности для Web проектов;
ü Wave Solver: решение оптических задач волновыми методами;
ü SP2:
программная часть аппаратно-программного комплекса для измерения оптических
свойств поверхности.
Разработан единый
универсальный инструментарий для создания разнородных программных комплексов
оптического моделирования и генерации реалистичных изображений с использованием
методов как геометрической, так и волновой оптики. Инструментарий позволяет
эффективным образом разрабатывать, сопровождать, модифицировать и тестировать
такие комплексы.
Разработана оригинальная
технология автоматизированного тестирования сложных программных продуктов и их
компонент, позволяющая значительно сократить усилия разработчиков и сроки
выпуска программных продуктов в области оптического моделирования и
компьютерной графики.
На основе проведенного
анализа существующих решений предложены и реализованы эффективные подходы и
методы, обеспечивающие аппаратную независимость и функциональную модульность
разработки программных комплексов компьютерной графики. Они позволяют
существенно ускорить разработку и упростить поддержку сложных программных
комплексов.
На основе разработанной среды программирования
создано более десятка различных программных комплексов компьютерной графики и
моделирования сложных оптических систем, которые находят широкое применение в
нашей стране и за рубежом.
Работа поддержана грантами РФФИ № 11-01-00870, 12-01-00560, 13-01-00454,
а также фирмой Integra Inc.
1. Волобой А.Г., Ершов С.В., Поздняков С.Г. Интерактивное
моделирование автомобильных красок // Труды 22-й Международной Конференции по
Компьютерной Графике и Зрению, Московский Государственный Университет им.
М.В.Ломоносова, 01-05 октября 2012 года, с.242-247.
2. Галактионов В.А., Дерябин Н.Б., Денисов Е.Ю.
Объектно-ориентированный подход к реализации
систем компьютерной графики // «Информационно-измерительные и
управляющие системы>, № 6, 2009, с. 96-108 (<Интеллектуальные и
адаптивные роботы», № 1-2, 2009, с. 96-108).
3. Барладян Б.Х., Дерябин Н.Б., Шапиро Л.З. Интеграция
модуля компьютерной графики в систему CATIA
// Новые информационные технологии в автоматизированных системах: материалы
шестнадцатого
научно-практического семинара - Моск. Ин-т электроники и математики
национального исследовательского университета «Высшая школа экономики». М.,
2013, с. 11-19.
4. Майерс Г., Баджетт Т., Сандлер К. Искусство
тестирования программ, 3-е издание - М.: "Диалектика", 2012.
5. Волобой А.Г., Галактионов В.А., Ершов С.В., Жданов
Д.Д., Потемин И.С., Шапиро Л.З. Анализ точности компьютерного моделирования
освещения сложных сцен // "Информационные технологии в проектировании и
производстве", № 2, 2010, с. 83-94.
6. Денисов Е.Ю. Автоматизированное тестирование
программных комплексов оптического моделирования // Новые информационные
технологии в автоматизированных системах:
материалы шестнадцатого научно-практического семинара -
Моск. Ин-т электроники и математики национального исследовательского
университета «Высшая школа экономики». М., 2013, с. 202-206.