А. Гиацинтов, К. Мамросенко.

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

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

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

Подсистема визуализации является одним из основных компонентов, необходимых для построения тренажерно-обучающих систем (ТОС) сложных технических комплексов. Данная подсистема обеспечивает отображение текущего состояния визуализируемых подсистем моделируемой системы с помощью устройств отображения информации.

Одним из компонентов подсистемы визуализации является графический движок Horde3D. Для реализации требований, предъявляемых к подсистемам визуализации ТОС, были исследованы методы обработки систем координат графическим движком Horde3D, разработаны алгоритмы и внедрена функциональность анимации камеры в виртуальной трехмерной сцене. Также был разработан метод отображения виртуальных трехмерных объектов с частичной прозрачностью.
 
1.Методы обработки систем координат

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

В элементарной геометрии координаты — величины, определяющие положение точки на плоскости и в пространстве. На плоскости положение точки чаще всего определяется расстояниями от двух прямых (координатных осей), пересекающихся в одной точке (начале координат) под прямым углом; одна из координат называется ординатой, а другая — абсциссой. В пространстве по системе Декарта положение точки определяется расстояниями от трёх плоскостей координат, пересекающихся в одной точке под прямыми углами друг к другу, или сферическими координатами, где начало координат находится в центре сферы.
Наиболее часто используемая система координат — прямоугольная система координат (также известная как декартова система координат).

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

В системах компьютерной графики применяется несколько систем координат, основными из которых являются мировая, видовая и объектные системы. С каждым объектом сцены связана своя объектная (локальная) система, в которой задаются координаты всех вершин его полигональной модели. В мировой системе координат задаются положения и ориентации всех объектов вместе с их локальными системами координат. Основной системой координат приложения моделирования 3ds Max является прямоугольная система координат. Положение осей координат задаются дизайнером.

При импорте ресурсов в движок Horde3D из внешнего приложения моделирования  происходит преобразование системы координат импортируемого трехмерного объекта или трехмерной сцены. В Horde3D используется система координат графического интерфейса OpenGL. Ось OY является осью аппликат, ось OX является осью абсцисс, а ось OZ является осью ординат. При преобразовании системы координат из приложения моделирования 3ds Max 2009 в систему координат графического движка значение координат объекта по оси OX не меняется, ось OZ становится осью OY, а значения координат по оси OY в движке будут являться координатами объекта по оси OZ умноженными на -1 (минус единицу).    

2.Анимация виртуальной камеры

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

Не указано

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

Экспорт объектов и анимации в формат Collada происходит через модуль (плагин) OpenCollada для пакета моделирования 3ds Max 2009. Для корректной обработки анимации приложением-импортером ресурсов экспортируемый из приложения моделирования файл формата Collada должен содержать дискретные кадры анимации.

Анимация камеры преобразовывается из формата Collada в формат XML, поддерживаемый Horde3D. Для каждой камеры, присутствующей в сцене, при наличии у них анимации, записывается информация о кадрах анимации. Структура файла анимации:

 
Не указано

Рис.1. Структура файла анимации

Для воспроизведения анимации в графическом движке Horde3D, был разработан следующий алгоритм анимации камеры.

2.1. Описание алгоритма

Задаются номера начального и конечного кадров анимации камеры, а также скорость их воспроизведения. Заданные кадры должны быть в пределах массива кадров анимации, данные которого берутся из файла анимации камеры. Если запрашиваемый сегмент выходит за границы массива кадров анимации, в том числе хотя бы одна из границ сегмента меньше нуля, то анимация не воспроизводится. Скорость задается в кадрах в секунду, как правило, 25, 30, 50, 60.

Кадры анимации для всех камер хранятся в одном массиве, поэтому необходимо делать выборку используемых кадров для каждой из камер. Предположим, что в массиве хранятся кадры анимации для двух камер. Для каждой камеры существует по 60 кадров анимации. Необходимо воспроизвести анимацию второй камеры. После задания требуемого сегмента воспроизводимых кадров для второй камеры (от 0 до 60) происходит выборка начального и конечного кадров для получения корректной анимации. В массиве данные анимации для второй камеры хранятся, начиная с 60 кадра, следовательно, нулевым кадром анимации для второй камеры является 60 кадр массива анимации. Соответственно, при воспроизведении анимации для второй камеры будут воспроизводиться кадры массива от 60-го до 120-го.

Разработанный алгоритм способен обрабатывать анимацию камеры не только в случае, когда последовательность воспроизводимых кадров возрастающая (предположим, происходит воспроизведение анимации камеры с 0-го кадра по 60-й), но и в случае, когда последовательность является убывающей (с 60-го по 0-й). Данная функциональность позволяет избежать необходимости создания дополнительных кадров анимации камеры в приложениях трёхмерного моделирования.
Не указано


Используя данный алгоритм, возможно достичь воспроизведения анимации камеры, созданной в приложении моделирования, подсистемой визуализации ТОС.

3.Отображение трехмерных объектов с частичной прозрачностью

Альфа-канал (Alpha channel) - дополнительный канал в изображении, который используется для создания эффекта полной или частичной прозрачности при комбинировании изображений [2]. Широко применяется при создании окончательных изображений в 3D-графике. Термин альфа-канал впервые введён в оборот Алви Смитом в конце 1970-х и детально проработан в статье Томаса Портера и Тома Даффа 1984 года.
Основные растровые форматы, поддерживающие альфа канал:
psd - формат Adobe Photoshop, широко используется во многих областях компьютерной графики;
tiff – один из самых распространенных растровых форматов, широко используется в полиграфии;
gif – формат позволяющий создавать изображения с прозрачными областями для web, не поддерживает частичную прозрачность;
png– как и gif, широко используется в web, но в отличие от него поддерживает частичную прозрачность;
iff – формат для обмена данными, используется программой Maya.
tga – растровый формат графики, созданный компанией Truevision в 1984 году. Применяется в компьютерной графике и при обработке видео.
png – растровый формат, предназначенный для хранения и передачи растровых изображений: черно-белых до 16 бит на пиксель (для односоставных), а цветных - до 48 бит (для многосоставных). Он использует прогрессивный метод сжатия без потерь, позволяет сохранять в файле палитру, текстовую информацию.

Для достижения частичной прозрачности изображения в подсистеме визуализации Horde3D был использован растровый формат png. Основными преимуществами формата являются:
•  алгоритм сжатия, позволяющий избежать потерь информации при сжатии;
•  возможность хранения индексированных изображений с палитрой до 256 цветов;
•  прогрессивное отображение чересстрочных данных;
•  поддержка альфа-канала и прозрачности;
•  независимость от аппаратной конфигурации и платформы;
•  наличие CRC-метода обнаружения ошибок в потоке данных.

В формате PNG определено 4 типа стандартных блоков, иначе именуемых критические блоки, которые должны поддерживаться любой программой чтения и записи PNG. Далее следует перечень этих блоков:
•    заголовочный блок (IHDR). Заголовочный блок содержит основную информацию о данных изображения и должен быть первым блоком в потоке данных PNG (не допускается более одного заголовочного блока);
•    блок палитры (PLTE). Палитра несёт в себе данные таблицы цветов, связанные с данными изображения. Этот блок присутствует, только если данные изображения используют палитру и должен находиться перед этими данными;
•    данные изображения (IDAT). Блок данных изображения содержит в себе само изображение, и допускается несколько таких блоков в потоке данных, причём все они должны следовать друг за другом;
•    замыкающий блок изображения (IEND). Замыкающий блок изображения должен находиться в конце файла или потока данных PNG.

Среди этих блоков IHDR, IDAT и IEND должны присутствовать в любом потоке данных PNG.

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

Блок Прозрачности содержит значение прозрачного (ключевого) PNG изображения, не содержащего соответствующих альфа-данных. Значения пикселей для полноцветных и чёрно-белых изображений, совпадающих с прозрачным цветом, считаются прозрачными (альфа-значение - 0), остальные же считаются непрозрачными.

Изображения с индексированными цветами содержат массив альфа-значений, максимум по одному на элемент палитры. Эти значения прозрачности обрабатываются как альфа-значения. Элементам палитры, не имеющим значений прозрачности, присваивается значение по умолчанию 255 (абсолютно непрозрачные). Хотя реализация прозрачности без использования альфа-канала дает менее качественное изображение, она вполне применима для большинства случаев и требует меньше места для хранения данных.

Чёрно-белые и полноцветные изображения глубиной от 8 до 16 битов могут содержать несопоставленные данные альфа-канала, называемые альфа-маской. Если используются данные альфа-маски, каждый чёрно-белый или полноцветный пиксель содержит дополнительно значение альфа-канала для данного пикселя. Изображения с индексированными цветами могут содержать альфа-канал в блоке прозрачности.
Альфа-значение определяет уровень прозрачности пикселя. Минимальное значение битовой глубины (всегда 0) указывает на абсолютную прозрачность, а максимальное значение, либо отсутствие альфа-маски, указывает на полную непрозрачность.[3]

В графическом движке Horde3D прозрачность объектов реализуется через шейдеры. Шейдеры являются небольшими программами, исполняемыми на графической карте на различных этапах аппаратного конвейера. Horde3D использует вершинные и пиксельные шейдеры. Вершинные шейдеры влияют напрямую на геометрию и определяют позиции и текстурные координаты вершин. Пиксельные шейдеры (фрагментные шейдеры) используются для расчета цвета пикселов в процессе растеризации. Код шейдеров Horde основан на языке шейдеров OpenGL (GLSL). Движок использует свой формат шейдеров, позволяющий определять различные функции – контексты. Контекст в шейдере Horde определяется для ситуации в процессе рендеринга, когда используется шейдер. Например, обычно в шейдерах существует контекст карты теней, используемый при расчете теней, а также контекст света, отвечающий за взаимодействие объектов с источниками света. В большинстве случаев для работы шейдерам необходимы входные данные. Это могут быть как геометрические данные модели, такие как позиции вершин, нормалей и текстурных координат, так и текстуры, используемые для рендеринга, и переменные, определяемые пользователем, называемые uniforms. Примером uniform переменной может служить вектор направления силы ветра, применяемый к модели дерева в вершинном шейдере. Эти данные передаются в шейдер посредством материалов. Материал в Horde содержит ссылки на используемый шейдер, список используемых текстур и значений переменных uniform, определенных в шейдере.

Шейдеры движка Horde3D хранятся в текстовых файлах с расширением .shader. Файл шейдера состоит из нескольких секций: секции FX и произвольного количества именованных кодовых секций. Секция начинается с тега [id], где id является уникальным идентификатором, используемым в качестве имени секции. Специальным идентификатором является FX, который характеризует начало секции FX.

Для реализации функционала прозрачности в секции FX шейдера необходимо создать новый контекст шейдера с произвольным названием (например, TRANSLUCENT). Название контекста должно быть указано латинскими прописными буквами. В данном контексте будут определены используемые шейдерные подпрограммы (вершинная и пиксельная), а также их свойства.

Используемая подпрограмма вершинного шейдера описана в поставляемом вместе с пакетом разработчика движка Horde3D шейдере model.shader и называется VS_GENERAL. Префикс VS обозначает, что это вершинный шейдер.

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

Необходимо также отметить следующие свойства контекста: запись в Z буфер должна быть отключена (функция ZWriteEnable = false), а режим смешивания должен быть выставлен в Blend (смешивание).

Для соответствия разрабатываемой подсистемы требованиям, предъявляемым к подсистемам визуализации ТОС, были решены следующие задачи:
•    исследованы методы обработки систем координат в графическом движке Horde3D;
•    разработаны и внедрены метод и алгоритмы анимации камеры в виртуальной трехмерной сцене, работающие на основе данных, получаемых из приложения моделирования;
•    разработан метод и модернизированы компоненты графического движка Horde3D для отображения трехмерных объектов с частичной прозрачностью.

Литература:
1.     Михайлюк M.B. и Торгашев М.А. Технология работы с модельно-видовыми матрицами в видеотренажерах // Сб. трудов, посвященный академику С.А.Лебедеву. Москва, 2002.
2.    Alpha-канал (Альфа-канал) [Электронный ресурс]. URL: http://www.eskizspb.ru/glos_alph.html (дата обращения: 02.06.2011).
3.    Форматы: PNG [Электронный ресурс]. URL: http://netghost.narod.ru/gff2/graphics/summary/png.htm (дата обращения: 26.05.2011).
4.    Решетников В.Н. и Мамросенко К.А. Методика и алгоритмы визуализации для обучающих модулей компьютерных тренажерно-обучающих систем // Труды международной научной конференции, посвященной 80-летию со дня рождения академика В.А.Мельникова. Москва: Научный фонд «Первая Исследовательская Лаборатория имени академика В.А.Мельникова», 2009. - С. 76-80.