Особенности Unity в создании виртуальной рабочей среды.
Мало кто в наше время напрямую использует низкоуровневые API для разработки в сравнительно быстрые сроки многопользовательского проекта. В основном, производители берут на вооружение готовые игровые движки (Game Engine), которые уже включают в себя движок рендеринга, физический движок, звук, систему скриптов, анимацию, искусственный интеллект, сетевой код, а также управление памятью и многопоточность. На крайний случай, разработав и протестировав игровой движок один раз, компания может сэкономить немалые средства и время, повторно используя свой продукт как основу для многих игровых проектов.
Большинство игровых движков содержит в себе интегрированную среду разработки, что позволят тестировать скрипты и все игровые действия в буквальном смысле «на лету».
Для нашей виртуальной рабочей среды мы решили использовать Unity – мульти платформенный инструмент для разработки трехмерных приложений, работающих в частности под операционной системой Windows.
Unity3d – это мощный мультиплатформенный инструмент для разработки и программирования интерактивных браузерных и настольных приложений с двух- и трехмерной графикой, обрабатываемой в реальном времени.
Проект Unity3d основан в 2005 году в Дании компанией Unity Technologies, имеет штаб-квартиру в San Francisco и рабочие группы в Копенгагене, Лондоне, Стокгольме, Вильнюсе, Сеуле, Токио.
Все версии проекта Unity3d содержат интегрированный редактор проектов, поддерживают импорт графических и неграфических ресурсов (моделей, в том числе анимированных, текстур, скриптов и т. д.), содержат встроенные ландшафты, шейдерную систему, сочетающую простоту использования, гибкость и производительность. Программирование графики в Unity3d осуществляется средствами JavaScript, Boo (диалект Phyton) и C# на основе .NET; реализована работа с сетью, используется физический движок Ageia PhysX, смешивание 3D-графики реального времени с потоковым аудио и видео. Сервер ресурсов Unity обеспечивает контроль версий в Unity.
Unity3d поддерживает широкий диапазон платформ: Windows (XP /Vista / W7), MacOs X, iPhone, iPod, iPad, Xperia PLAY, PS3, Flash 3D player.
В 2013г. проект Unity дошел до финальной стадии версия Unity 4.1, в которой список поддерживаемых платформ расширился до iOS, Android, Wii, XBox 360, PlayStation 3, Linux. Поддерживаемые браузеры: IE, FireFox, Chrome, Opera, Safari.
Разработчиками выпускаются две версии программного продукта: обычная версия и платная версия Unity3d Pro. Первая отличается ограниченным функционалом, вторая позволяет осуществить все этапы графического конвейера, включая рендер в текстуру, эффекты пост-процесса, удаление из процесса рендеринга невидимых вершин и полигонов.
Инструментарий Unity3d построен на использовании для разработки интерактивных приложений с двух- и трехмерной графикой, обрабатываемой в реальном времени, концепции игрового движка (Game Engine).
Несмотря на специфичность названия, игровые движки широко используются в других типах интерактивных приложений, использующих 3D-графику в реальном времени, таких, как демонстрационные рекламные ролики, архитектурные визуализации, обучающие симуляторы и среды моделирования.
Игровой движок (Game Engine) – это центральный программный компонент интерактивных приложений с трехмерной графикой, обрабатываемой в реальном времени, в том числе компьютерных и видеоигр. Он обеспечивает основные технологии моделирования и 3D-визуализации, упрощает процесс разработки проектов, обеспечивает возможность их запуска на нескольких платформах, таких как игровые консоли и настольные операционные системы, например, GNU/Linux, Mac OS X и Microsoft Windows.
Игровой движок обеспечивает основную функциональность пакета Unity3d. Он включает в себя многократно используемые программные компоненты: графический движок («визуализатор»), физический движок, звуковой движок, систему скриптов, анимацию, искусственный интеллект, сетевой код, управление памятью и многопоточность.
В дополнение к многократно используемым программным компонентам, игровые движки, как правило, предоставляют набор визуальных инструментов для разработки проектов. Эти инструменты обычно составляют интегрированную среду для упрощенной, быстрой разработки интерактивных приложений на манер поточного производства, предоставляя гибкую и многократно используемую программную платформу со всей необходимой функциональностью для разработки приложения, сокращая затраты, сложность и время разработки.
Часто игровые движки имеют компонентную архитектуру, позволяющую заменять или расширять некоторые подсистемы движка более специализированными (и часто более дорогими) компонентами, например, для симуляции физической природы взаимодействия (Havok), звука (FMOD) или рендеринга (SpeedTree). Однако некоторые игровые движки, такие как RenderWare, проектируются как набор слабосвязанных компонентов, которые могут выборочно комбинироваться для создания собственного движка, вместо более традиционного подхода, который заключается в расширении или настройке гибкого интегрируемого решения.
Рассмотрим основные компоненты любого игрового движка – графический и физический движки.
Графический 3D-движок (англ. 3D-graphics engine; система рендеринга или «визуализатор») – промежуточное программное обеспечение (ППО), основной задачей которого является визуализация (рендеринг) двух- или трехмерной компьютерной графики. Может существовать как отдельный продукт или в составе игрового движка и использоваться для визуализации отдельных изображений или компьютерного видео. Графические движки, использующиеся в программах по работе с компьютерной графикой (таких, как 3ds Max, Maya, Cinema 4D, Zbrush, Blender), обычно называются «рендерерами», «отрисовщиками» или «визуализаторами». При этом основное и важнейшее отличие «игровых» графических движков от «неигровых» состоит в том, что первые должны обязательно работать в режиме реального времени, тогда как вторые могут тратить по несколько десятков часов на вывод одного изображения. Вторым существенным отличием является то, что, начиная приблизительно с 1995-1997 года, графические движки производят визуализацию с помощью графических процессоров (GPU) видеокарт. Программные графические движки используют только центральные процессоры (CPU).
Физический движок (англ. physics engine) – программный движок, который производит компьютерное моделирование физических законов реального мира в виртуальном пространстве 3D-сцены с той или иной степенью аппроксимации. Чаще всего физические движки используются не как отдельные самостоятельные программные продукты, а как составные компоненты других программ. Выделяют игровые и научные физические движки.
Первый тип используется в компьютерных играх как компонент игрового движка. В этом случае он также должен работать в режиме реального времени, то есть воспроизводить физические процессы в игре с той же самой скоростью, в которой они происходят в реальном мире. Вместе с тем от игрового физического движка не требуется точности вычислений.
Современные физические движки симулируют не все физические законы реального мира, а лишь некоторые, причем с течением времени и прогресса в области информационных технологий и вычислительной техники список «поддерживаемых» законов увеличивается. Современные физические движки, как правило, могут симулировать следующие физические явления и состояния: динамику абсолютно твердого и деформируемого тела, динамику жидкостей и газов, поведение тканей и веревок (тросы, канаты и т. д.).
На практике физический движок позволяет наполнить виртуальное 3D-пространство статическими и динамическими объектами – телами (англ. body), указать некие общие законы взаимодействия тел и среды в этом пространстве, в той или иной мере приближенные к физическим, задавая при этом характер и степень взаимодействий.
Собственно расчет взаимодействия тел движок и берет на себя. Когда простого набора объектов, взаимодействующих по определенным законам в виртуальном пространстве, недостаточно, в силу неполного приближения физической модели к реальной, возможно добавлять к телам связи (англ. joint, «соединение»). Связи представляют собой ограничения объектов физики, каждое из которых может накладываться на одно или два тела.
Рассчитывая взаимодействие тел между собой и со средой, физический движок приближает физическую модель получаемой системы к реальной, передавая уточненные геометрические данные в графический движок.
Unity3d в качестве физического движка использует Nvidia's PhysX engine.
Основной концепцией Unity3d является использование в сцене легко управляемых объектов, которые, в свою очередь, состоят из множества компонентов. Создание отдельных игровых объектов и последующее расширение их функциональности с помощью добавления различных компонентов позволяет бесконечно совершенствовать и усложнять проект.