Материал: Разработка программы 3D-планетария для CAVE-систем

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Рисунок 9 - Пример CAVE-системы VE corp

На данный момент, CAVE-системы используются во многих областях, таких как архитектура, медицина, промышленный дизайн, машиностроение, схемостроение, инженерное дело, развлекательные цели и прочее. Использование таких систем позволяют не только использовать их в образовательных целях, но также и в научном деле, что для множества компании или университетов является значимой частью.

Множество университетов по всему миру имеют CAVE-системы. Так, например, в конце 2014 года в университете МИЭМ НИУ ВШЭ была реализована CAVE-система. Построена была система с использованием короткофокусных проекторов Panasonic с применением технологии мягкой сшивки изображения. Для построение 3D-изображения, необходимо выводить модель из одного источника, в данном случае управляющий компьютер.

Рисунок 10 - Форма геометрии потолка в CAVE-cистеме

1.2.3 CAVE 2

CAVE 2 (New Generation CAVE) - это усовершенствованная версия CAVE-системы, которая состоит из множества экранов, расположенных вдоль стен. Это широко расширяемая система виртуальной реальности, которая является гибридом нескольких технологий: настенных дисплеев, с функцией адаптивного расширения разрешения, а также системы виртуальной реальности. Комбинация Эти экраны, в последствии, создают 3D-изображения. Также эти экраны имеют панорамный вид. Ниже представлена спецификация для CAVE-системы второго поколения:

градусов, панорамный дизайн

Экраны высотою в 8 футов

Расширяемый высокопроизводительная кластерная система

.1 звуковая аудио система

Ультравысокое разрешение 0.029 на пиксель

Благодаря таким изменениям возможны расширения зоны покрытия в считанные часы. Комбинация нескольких технологий позволяет улучшить взаимодействие с пользователем, а также улучшить качество отображения. позволяет настраивать количество отображаемых интерфейсов различных приложений. SAGE (Scalable Adaptive Graphics Environment) - позволяет стенам в системе CAVE2 разделяться на «окна», на каждом из которых будет отображаться определенная информация двухмерной иди трехмерной графики.

1.2.4 Leap Motion

В качестве технологии, позволяющей взаимодействовать с компьютером и с виртуальным миром в частности, была выбрана Leap Motion. Это технология, основанная на захвате изображения, для осуществления определенного (запрограммированного) взаимодействия с любой системой.

Устройство выглядит как небольшая коробка, присоединяющаяся по USB-интерфейсу к компьютеру или любому другому устройству для обмена информацией, поступающей с Leap Motion. Это устройство создает невидимое 3D-область, которая имеет форму куба, с размером ребра около 60см. Для определения движения используются две камеры и трех инфракрасных светодиодов. В качестве особенностей стоит выделить несколько характеристик: скорость и точность захвата, которая достигает 200 кадров в секунду.

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

Использование данного устройства обусловлено тем, что с помощью технологии виртуальной реальности разработчик может перенести пользователя в любую ситуацию, где он, без особых навыков или специального непривычного оборудования будет стараться взаимодействовать с виртуальным миром. Однако, благодаря Leap Motion взаимодействие между пользователем и виртуальным окружением будет для человека естественным.

Глава 2. Выбор методов построения системы

Написанию любой системы начинается с построение архитектуры и выбора необходимых методов реализации. В данном случае необходимо выбрать из нескольких категорий: выбор игрового движка и выбор языка программирования, который будет также иметь весомую часть в реализации проекта 3D-планетарий для CAVE-систем.

2.1 Обзор игровых движков

До начала обзора необходимо было выделить основных конкурентов, которые будут участвовать в сравнении. Стоит выделить, на данный момент, двух гигантов среди программного обеспечения для создания программного обеспечения с использованием элементов двухмерной и трехмерной графики - Unity и Unreal Engine.- это набор различных инструментов для разработки приложении, с использованием двухмерной или трехмерной графики. Приложения, созданные с помощью данного программного обеспечения, работают под различными операционными системами, такими как Windows, MacOs, Windows Phone, Android, iOS, Linux и так далее, включая операционные системы, используемые в игровых консолях последнего поколения. Приложение, созданные в Unity, поддерживают работу с OpenGL и DirectX. Сам Unity написан на языках C, C#, JavaScript и Boo.

Рисунок 11 - Unity среда разработки.

Данное программное обеспечение имеет множество различных функциональных возможностей. Далее будут представлены основные из них:

Мощный Drag&Drop интерфейс

Поддержка нескольких языков написания сценариев

Легкая иерархическая модель объектов

Поддержка физики тел различных материалов

Генерация различных игровых элементов автоматически (средой разработки)

Инструмент создания 3D-анимации

Имеется также система упаковки игровых данных в формат .unityassets, которые в последствии могут быть переданы другим разработчикам или могут быть предоставлены разработчикам через внутренний магазин Unity Asset Store.

Следующий игровой движок, который будет рассмотрен - Unreal Engine. Это игровой движок, написанный на языке программирования C++. Благодаря выбранному языку программирования и остальных элементов, участвующих в разработке, данный движок позволяет создавать игр для большинства операционных систем, включая операционных системы, установленные на игровых консолях различных поколений, а также мобильных операционных систем, такие как iOS и Android.Engine использует модульную систему зависимостей. Это позволяет расширять функционал без изменения основного кода, а также имеет горизонтальную расширяемость функционала. Это технология позволяет добавлять поддержку различных устройств ввода, например систему LeapMotion.

Рисунок 12 - UnrealEngine среда разработки.

Таблица 2 - Сравнение штук


Unity3D

Unreal Engine 4

Поддержка виртуальной реальности

+

+

Языки программирования

C#, JavaScript

C++

Легкое обучение работы в среде разработки

+

-

Удовлетворительность ценовой политикой

+

-

Скорость обработки больших массивов математических вычислений

-

+


2.2 Язык разработки

Для разработки данного проекта был выбран мультипарадигмальный язык программирования C#. Данный язык программирования является языком с C-подобным синтаксисом, с объектно-ориентированной моделью. Имеет статическую типизацию, однако благодаря оператору ‘var’ и ‘dynamic’ можно использовать в сложных конструкциях, когда тип возвращаемого результата неизвестен или используется полиморфная модель поведения. Чаще всего данные операторы используются вместе с технологией LINQ.

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

Язык программирования C# сильно похож на язык программирования Java, так как последний оказал сильное влияние на выбранный язык разработки данного проекта. Так как язык программирования C# перенял множество положительных качеств языков, оказавших на него влияние, при его разработке учитывались и языковые недочеты. Например, популярная модель ромбовидного наследования, или же множественного в языке программирования C# запрещена. Вместо этого класс может быть наследником только одного класса, по умолчанию которым является класс “Object”.

Сам язык C# реализует основные понятия объектно-ориентированного программирование, а именно: инкапсуляция, полиморфизм и наследование. Это достигается различными языковыми конструкциями.

Основным его преимуществом является легкий синтаксис, оптимизированная исполняемая среда CLR, интеграция со средой разработки и игровым движком Unity 5.

2.3 Операционная система

В качестве операционной системы была выбрана операционная система семейства Windows - Windows 10. Данная операционная система имеет ряд преимуществ по сравнению с другими в контексте работы с виртуальной реальность (VR). Многие библиотеки, сервисы и программные обеспечения, нацеленные на создание продукции для виртуальной реальности (VR), возможно использовать исключительно на Windows.

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

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

На основе вышеупомянутых фактов можно сделать вывод, что разрабатывать данный проект лучше всего с использованием игрового движка Unity, а в качестве языка программирования выбрать C#, так как он имеет сильную интеграцию с данной системой разработки приложений с использованием двухмерной и трехмерной графики. Немаловажным фактом является постоянное обновление исполняемой среды для данного языка программирования, а также политику компании Microsoft, так как в последние годы они сделали огромный шаг в сторону открытости их продуктов. Например, попытки переноса платформы .NET на семейство операционных систем Linux и Unix, а также MacOS. Однако, если бы проекту была необходима более сильная вычислительная мощь, то необходимо было использовать движок Unreal Engine в связке с языком программирования C++, так как в данном двигателе показатели обработки различных математических задач выше, а также в языке программирования C++ делается серьезный уклон на скорость по причине ручного управления выделением динамической памяти.

Глава 3. Теоретическая часть

.1 Алгоритмы

В программе для 3D-планетария для CAVE-систем будут использоваться несколько алгоритмов, для построения реалистичной модели движения небесных тел в нашей Солнечной системе. Движение тел Солнечной системы можно определить различными методами, включая численным интегрированием дифференциальных уравнений их движения. Однако, существую и другие подходы, которые не требуют тех же вычислительных мощностей и предоставляют информацию с определенной минимальной погрешностью, которая в случае первого варианта приложения является приемлемой. Одно из популярных решений данной задачи является решение классического уравнения Кеплера.

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


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

Гравитация Солнца

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

Космический мусор

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

3.2 Использование баз данных

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

Все зависит от перспективы разработки. Если обновлений не будет, значит не будет вводится динамическая модель создания небесных объектов, а значит, что требования к системе изменяются. Для данного проекта лучший вариант это реляционная модель данных, а в качестве системы управления баз данных можно выбрать PostgreSQL по некоторым причинам: бесплатное программное обеспечение, обширная база пользователей данной системы, простота изучения.

Основные сущности, в данный момент, являются планеты и звезды. У данных сущностей можно выделить некоторое количество параметров, необходимые для функционирования и расширения программы. Примерная ER-диаграмма представлена на рисунке ниже:

Рисунок 13 - ER-диаграмма для базы данных 3D-планетария

Однако, если бы наши цели изначально указывали бы на то, что разработка будет продолжаться довольно длительное время, то выбор пал бы на модель данных NoSQL[10]. Причин для этого достаточно:

Легкая расширяемость

Легкое изменение параметров сущностей

Большая вариативность выбора модели данных

Работы с BigData

Секционирование

3.3 Разработка интерфейса

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

Интерфейс будет строится на основе моделей «сцен», который активно используются в Unity. Ниже приведена схема взаимодействия сцен, которые будут в реализации данного проекта.

Схема 1 - Взаимодействие сцен в 3D-планетарии.

3.4 Программное конструирование

В качестве кодовой архитектуры оптимальным вариантом является трехуровневая архитектура, или же архитектура на базе концепции «слоев». Мы Будем использовать слой представления данных для вызовов функции, описание которых будет размещено в уровне бизнес-логики. И только часть бизнес-логики будет обращаться к слою хранения данных.

Основные классы расположены в слое бизнес-логики:

Классы взаимодействия в устройствами виртуальной реальности

Классы логики взаимодействия объектов

Классы сохранения глобального состояния

Классы работы с базой данных