• Для классификации инструментов можно выделить три основных признака. Является ли инструментальное средство стандартной частью редактора Unity, инструмент не является частью стандартного инструментария, но является расширением, встраиваемым в Unity. Инструмент вообще не является частью среды разработки Unity, но прекрасно интегрируется в пайплайн Unity. Немаловажной особенностью можно считать взаимозаменяемость отдельных инструментальных средств. Всё это обеспечивает достаточность выбора.
• Другой важный фактор – это трансферные форматы файлов, которые можно использовать совместно с Unity и для обмена данными между редакторами. Для Unity предусмотрены интерпретаторы для исходных форматов файлов разных редакторов- lxo, mb, ma, max, dxf, 3ds, dae, Blend, obj, и др., но стандартом является FBX, при помощи которого переносятся как модели, так и анимация, включая скелетную и вертексную (морфинг), так же группы сглаживания UV сеты, вертексный цвет и многое другое. Есть специфические форматы для параметрической генерации контента – это SBSAR и OTL. Имеется возможность создавать свои интерпретаторы для импорта и экспорта других файловых форматов, либо использовать сторонние. Как пример, можно использовать интерпретатор формата MDD для использования кэша вершинной анимации в Unity, создавая такой кеш в каком-либо анимационном редакторе.
• Unity не обладает встроенной системой моделирования и текстурирования. Эта часть работы выполняется в традиционных средствах моделирования и текстурирования. Спектр этих средств велик. Maya, Modo, и.т.д.
• Всё же для Unity предусмотрены простейшие инструменты моделирования и редактирования UV развёрток. Эти средства поставляются сторонними разработчиками. Некоторые из них распространяются свободно. К примеру, Game Draw и UV Editor Pro.
• Инструменты растрового текстурирования не предусмотрены в Unity, но принимаются почти все известные форматы растровых файлов в качестве текстур. Помимо растровых редакторов для изготовления текстур, используются средства для запекания различных видов текстур в 3D редакторах. От возможности запекать текстуры и переносить детализацию с высокополигональных моделей на низкополигональные зависит качество текстурирования и выразительность результата. Особое требование к 3D пакетам - это возможность free hand painting across model (свободного рисования от руки) по поверхности модели. Некоторые средства моделирования обладают продвинутыми возможностями такого плана, а некоторые не имеют такой возможности вовсе. При этом возможности такого текстурирования в различных пакетах существенно различаются. Это специфическое требование играет особую роль при выборе пакета для текстурирования. Можно отметить специальные редакторы и утилиты для запекания текстур и отрисовки текстурных карт по модели. Knald, Faundry Mari и Modo, Photoshop plugins DDO, NDO, crazy bump. ZBrush, Mudbox, Bodypaint и др.
• Инструменты для анимации в Unity имеются в базовом виде. Можно анимировать почти все параметры, которые имеют числовое значение или изменяемое состояние. Понимание анимации в Unity отличается от того, что подразумевается под анимацией в традиционных 3D редакторах. В Unity любые изменения, происходящие во времеыни, могут быть воспроизведены разными способами. Разумеется, стандартный метод покадровой анимации ключами тоже имеется, как и соответствующий редактор. Деформации геометрии во времени - это отдельная тема. В Unity можно использовать анимацию деформаций посредством скелетной иерархии или морфингом (blendshapes). Формат FBX может содержать подобные типы анимации, а большинство 3D пакетов позволяют создавать такую анимацию. Способов персонажной анимации великое множество. Мне пришлась по вкусу система HumanIK в Maya. Эта система рассчитана на анимацию антропоморфных персонажей, из-за наследования предшествующих вариантов реализации (FullBodyIK), это средство прекрасно интегрируется с MotionBuilder и Endorphin, ещё два популярных пакета, оба рассчитаны на персонажную анимацию, причём второй помогает создавать естественные интеракции с окружающей средой, используя уникальный физический симулятор. Что ещё более важно, благодаря структуре скелета, анимация, получаемая посредством HumanIK в Maya, наилучшим образом подходит для использования Unity Mecanim- системой управления и смешивания анимаций в Unity. Система Mecanim в свою очередь очень схожа с системой Naturalmotion Morpheme, которая так же применяется в разработке игр, как и Mecanim. Такой пайплайн анимации персонажей уже можно назвать стандартным. Другая система анимации, которую я периодически использую, подходит больше для не гуманоидных персонажей, у которых имеются многочисленные конечности, асимметрия в строении тела. Эта система основана на сольвере IKinema, а в Modo она имеет название Full Body IK Pose tool. Система весьма схожа с IK Booster в Lightwave. Этот анимационный инструмент хорош тем, что нет необходимости создавать сложные и громоздкие средства контроля и управления персонажем. Скелет персонажа сам по себе уже содержит все средства управления, которые на ходу, в процессе анимации, можно настраивать под управление IK и FK быстро и легко. Процесс анимации с этой системой очень прост, что экономит время, позволяя акцентироваться на самой анимации, а не настройках рига. Для совсем ленивых существует сервис Mixamo, который помогает быстро создать скелет для персонажа и добавить заранее созданные заготовки анимаций. Для игровой индустрии особенно важно получить многочисленные анимации в короткое время. Для этого используют различные системы захвата движений MotionCapture (mocap). Сами системы для захвата весьма дороги. На помощь приходят подручные средства, к примеру- Microsoft Kinect. Это игровой девайс, но при помощи модуля Nevronmotion для Lightwave им можно пользоваться как системой захвата движения. Существует расширение для Unity, которое помогает не только использовать Kinect для игр, разрабатываемых на Unity, но и позволяющее записывать анимацию с Kinect в редакторе. Lightwave, кстати, имеет плагин при помощи которого Unity в состоянии принимать формат сцены lws, в связи с чем интеграция между редактированием комплексных сцен в Lightwave и Unity существенно возрастает. Персонажная анимация – это краеугольный камень многих проектов, поэтому интерация Unity с различными редакторами и выбор этих редакторов, имеют очень большое значение.
• Процедурная и параметрическая генерация 2D и 3D контента. На текущий момент существует не так много средств изготовления процедурной и параметрической графики. Так сложилось, что в Unity мы можем использовать два самых мощных редактора процедурной графики как 2D- Substance Designer, так и 3D – Houdini. Субстансы- это самодостаточные генераторы параметричеких текстур, с форматом SBSAR. Этот формат нативно принимается Unity, позволяя использовать все возможности параметризма и процедурализма в текстурированиии. Houdini- это широко известный продукт компании SideFX, с возможностью создания цифровых ассетов в формате OTL. Houdini Engine – это движок, делающий возможным использование цифровых ассетов OTL в Unity. Субстансы и ассеты можно изготавливать самостоятельно или приобретать подходящие на Orbolt и Unity AssetStore. Параметрическая графика, помогает быстро создавать большое количество отличающихся друг от друга, но однотипных объектов, а так же массивных сцен, с возможностью гибкого редактирования на любом этапе. Ещё одна польза от процедурализма - это интерактивность. Генерация и регенерация процедурного контента в движке происходит в реальном времени и позволяет увеличить степень интерактивности для конечного пользователя. Процедурность сложно переоценить. Особенно, если речь заходит об архитектурных проектах или промышленном дизайне. Разумеется, в Unity можно создавать свои редакторы процедурной генерации контента. На одном из проектов мне довелось поучаствовать в создании такого генератора, который должен создавать целые комплексные сцены из коллекции элементов проекта.
• Редактор сцены проекта Unity. Сцена в Unity- это то 3D пространство, которое можно смело назвать виртуальным. В конечном итоге, именно с этим пространством будет взаимодействовать пользователь. От того, как тщательно и качественно будет построено это пространство, будет зависеть эффект воздействия на зрителя - пользователя. Unity удобен как редактор сцены. В сцене собираются воедино все кусочки проекта и очень важно, что дизайнер виртуального пространства, видит то что увидит зритель и ещё чуточку больше. В редакторе Unity можно комфортно и легко работать с очень массивными сценами.
• Физика и физические симуляции. Часть разработчиков избегают физических симуляций в реальном времени, а другие, напротив, выстраивают вокруг этого весь проект. Unity использует PhysX, а сами физические атрибуты очень важны для интерактивной графики. К примеру, габариты столкновений (colliders) используются не только для физики, но и для обеспечения интерактивности этих объектов. Объект перестаёт быть просто 3D объектом, когда ему присваивается collider. Объект становится участником событий в сцене. Сквозь него нельзя пройти, его можно кликнуть и получить информацию или какое- то действие. Это отличает интерактивную графику от традиционной, где важно только внешняя видимость симуляции физических свойств с конечным, ожидаемым визуальным эффектом.
• Шейдинг. Магию шейдеров трудно переоценить. До сих пор многие CG художники полагают, что качество картинки ограничено рамками редактора материалов и механизмом отрисовки финального изображения на мониторе. Это не совсем так. Качество графики, в первую очередь, зависит от реализации шейдеров, которые отдают инструкции видеокарте или рендеру, как следует отрисовывать освещение и затенение на объекте, как отрисовать текстурные каналы, как должно работать отражение или преломление. Непонимание роли шейдеров в качестве изображения, порождает миф о том, что графические возможности Unity ограничены тем качеством, что достижимо при использовании стандартного набора шейдеров, распространяемого вместе с пакетом. Эти стандартные шейдера, следует рассматривать как примеры того, от чего можно отталкиваться при написании своих, уникальных шейдеров. Для этого используется классический CG language, именуемый так же, как Си для графики. Однако не для каждого художника видится возможным нырнуть в особенности написания кода на CG. По этой причине, появились (и продолжают появляться) разные редакторы шейдерной логики, где применяется традиционное нодовое редактирование. Это гораздо ближе для 3D художников. Наиболее интересные редакторы шейдерных «деревьев» (редакторы шейдеров)- Stumpy, Fusion и Forge. Хотя, следует отметить, что наиболее продвинутые результаты в шейдинге достигаются через работу с кодом. Интерактивная графика предполагает, так же, возможность производить изменения на уровне материалов поверхностей в реальном времени. Это достижимо при обращении к шейдеру через материал. Так, что интерактивность материалов для поверхностей объектов- это особая сфера внимания для интерактивной графики. Шейдеры нужны не только для материалов, но и для фильтров обработки итогового изображения. Эти фильтры обрабатывают картинку на высокой частоте fps и на них приходится большая доля увеличения качества итогового изображения
• Синематик. Любой игровой движок должен иметь все средства для создания синематика, это как если бы на игровом движке воспроизводился некий анимационный сюжет, ни чем не отличающийся по сути от анимационного фильма. Во многих играх, используются брейк сцены- анимационные перебивки, построенные по всем законам кинематографической драматургии. Чтобы сделать такой синематик на движке, потребуется масса разнообразных средств. Понадобится работа с камерами, анимация камер и их параметров, а так же переключение между камерами. Всё это необходимо для выстраивания динамичной смены кадропланов. В Unity для этого есть все традиционные средства работы с камерами, а так же сторонние разработки для выстраивания синематиков. Скриптование и написание своих расширений позволяет добиться гораздо большего, что и делают разработчики игр. Освещение - ещё одна важная составляющая для получения качественной и привлекательной графики. В Unity для этого есть всё. Динамическое освещение, шейдерные модели освещения, мощный генератор лайтмапинга и возможность использовать лайтмапы полученные в других редакторах, динамический лайтмапинг, а также всё те же сторонние средства для работы с освещением. Как пример - это экспериментальное расширение для получения глобального, рассеянного освещения, подобно тому, что используется в системах рендеринга. Все эти средства помогают создать картинку, мало чем уступающую традиционному рендерингу. Использование визуальных эффектов тоже традиционно не только для 3D редакторов, но и для движков. Так что в Unity имеется масса всевозможных способов создания эффектов. Самый распространённый - это частицы. При помощи частиц создаётся огонь, дым, взрывы и прочее. Продвинутые разработчики используют все возможности DirectX 11 для создания флюидных систем или пирокластических эффектов, волос и шерсти и прочего.
• Ещё одна особенность присущая игровым движка - AI (искусственный интелект) для персонажей и не только. Это понятие, в большинстве случаев, предполагает систему управления не игровыми персонажами, теми, что игроки именуют «боты». AI для не игровых персонажей может быть создан, как посредством написания скриптов, так и при помощи редакторов, к примеру, Behave. Сюда же можно отнести системы поиска пути (Path finding). По большому счёту, такие специфические расширения и возможности доступны именно благодаря использованию традиционных языков программирования, а не специфическим скриптовым языкам, как в традиционных редакторах или других движках. В особенности это использование популярного языка C#.
• Скриптинг и программирование. Unity использует три языка программирования- C#, Java, Boo. Все три языка работают на платформе NET, а для написания скриптов и работы с кодом, вместе с Unity поставляется Mono Develop- простое и удобное средство для работы с кодом. Надо отметить, что программирование в Unity отличается от программирования для 3D редакторов. Наиболее продвинутые разработчики - программисты могут создавать такие приложения на Unity, которые уже сами по себе становятся редакторами для каких- либо манипуляций с растровыми изображениями или 3D объектами. К примеру, это могут быть рисовалки или конструктор мебели, аудио секвенсор, клиентская оболочка для удалённого доступа к базе данных, или программка для мобильника с доступом к биржевым сводкам, или 3D вебсайт. Это может быть всё, что угодно, а не только игра. Я рассматриваю Unity, как удобную платформу для разработки интерактивных приложений, обладающую достаточным количеством готовых графических решений и имеющую удобные средства редактирования проекта в целом. В Unity предусмотрены такие способы интеграции графики и исполняемого кода, как Event System, когда какой-либо метод в скрипте выполняется, когда это предусмотрено в анимации. Одно из мощных средств скриптинга в Unity- это корутины или сопрограммы. Они позволяют контролировать различные исполняемые процессы во времени или эмулировать отдельные процессы, выполняемые параллельно. В большинстве своём, художники сторонятся работы с кодом. Я заметил, что 3D художники, которые могут скриптовать, не имеют художественного образования. Бывают и исключения, но редко. Оно и понятно, художественное правополушарное мышление трудно совместить с логикой левополушарного. Художники и так перегружены специфической информацией о 3D, а тут ещё и алгебру с тригонометрией вспоминать нужно и синтаксис языка осваивать, изучать архитектуру алгоритмов. Для многих это слишком и потому находится масса оправданий для того, чтобы не лезть в скриптование. Однако есть и компромиссы. Это визуальное программирование.
• Визуальное программирование применяется в таких программах как Houdini и Grasshopper для Rino. В редакторе движка UDK, тоже имеется такое средство- Kismet. Визуальное программирование предполагает конструирование алгоритмов исполняемых сценариев при помощи редактора графов. Каждый отдельный оператор имеет визуальный вид ярлыка со слотами для входящих и исходящих данных, и называется узлом (node). Последовательность таких узлов- операторов, соединённых связями входящих и исходящих данных (графами), образует древовидное ветвление сценария и называется дерево графа (Graph Tree). Почти во всех 3D пакетах есть такие редакторы графов, при помощи которых можно настроить шейдинг материалов. Unity позволяет использовать нодовые редакторы для создания скриптов, как альтернативу традиционному написанию кода. Во первых это uScript Visual Scripting, который полностью имитирует Kismet. Имеются и другие аналоги- Antares Universe (VIZO), Playmaker, и др. Польза от таких редакторов в том, что помогает людям с образным, а не абстрактным складом мышления, комфортно работать со скриптингом. Можно сразу видеть всю структуру алгоритма, а это важно для «правополушарных» художников. Автор Antares VIZO, как-то сказал, что сподвигло его создать такой фундаментальный инструмент визуального программирования: «Мне гораздо удобней видеть алгоритм в визуальном виде», т.е., по сути, он создавал инструмент для себя. Также и команда разработчиков uScript, привыкшая иметь дело с Kismet, решила создать для себя подобную среду для Unity. Всё же многие профессиональные программисты критично относятся к подобному способу программирования и проповедуют традиционное написание кода. У такой позиции есть весомые аргументы, но одно другому не мешает. Можно использовать весь набор средств.
• Инфографика. Здесь мы подходим вплотную к неигровым задачам. В привычном виде, инфографика - это информация, подкреплённая визуально. Инфографика обычно сопровождает учебники, презентационные проекты. Диаграмма - это инфографика. Механизм в разрезе с подписями и комментариями к его сторению - это инфографика. Инфографика прошла путь от энциклопедических кодексов и простых картинок, до телевизионной моушен графики, такой, какую мы видим в прогнозе погоды. Сам собой напрашивается следующий шаг- соединить 3D, текстовую информацию и интерактивность взаимодействия пользователя с этой информацией. Это доступно с применением Unity. Это новый гибрид интерактивности WEB и 3D. Если с 3D всё понятно и самая простая интерактивность в случае с 3D объектом - сделать его кликабельным, т.е. кликом мыши по объекту мы можем вызвать какое- то событие. Это может быть окно с информацией об этом объекте или панель управления функциями этого объекта, возможностью контролировать его визуализацию. Таким образом, нам нужны средства разработки интерфейса. Сегодня существует два способа разработки интерфейса. Первый - стандартный Gui class в Unity. Интерфейсы разрабатывать удобно и можно делать очень продвинутые интерфейсы, но чем более громоздкий интерфейс создаётся, тем более он ресурсоёмкий. Другой способ - построение интерфейса непосредственно в 3D среде, что добавляет контроля и оптимизации, но это уже не столь удобно и менее гибко. Для такого способа разработки интерфейса используется расширение NGUI. Профи склоняются к использованию именно NGUI, но стандартный GUI не стоит сбрасывать со счетов, когда нужно быстро добавить информацию для презентации дизайн - проекта. С интерфейсами можно делать множество интересных вещей, в сочетании с которыми, 3D становится интерактивной инфографикой. Главная идея такой инфографики в том, что 3D объект является контейнером для хранения информации, а 3D пространство, наполненное интерактивными объектами, гораздо более удобная среда для взаимодействия с этой информацией.
• 2D. Стоит упомянуть, что Unity имеет особую популярность у разработчиков 2D игр. Было время, когда разработчики игр на Flash, выражали массу сомнений, что Unity сможет соперничать с Flash в разряде 2D игр. Потом Unity покусилась на формат Flash, используя Molehill. Теперь, когда стало ясно, что формат flash больше не будет развиваться и поддерживаться, многие разработчики и художники обратили свой взор на Unity, как самую преемлемую среду создания 2D игр. Последняя версия Unity, предоставляет спектр фитч для реализации 2D приложений и игр. Продвинутый генератор спрайтов, спрайтовая анимация, физика для 2D, использование Mecanim для 2D анимации.
• Устройства ввода. Это не связано напрямую с графикой, но когда начинаешь описывать возможности такой среды разработки как Unity, то трудно удержаться от соблазна взглянуть на весь спектр устройств, с которыми Unity может работать. Под устройствами ввода подразумеваются любые способы интерактивного контроля над приложением. Поскольку цель любого проекта - получение самодостаточного мультимедийного приложения, то важно думать не о редактировании проекта, а о том, как будет пользователь с ним взаимодействовать. Мышь, к примеру, имеет две оси перемещения в горизонтальной плоскости и три кнопки. Всего, пять инпутов. Клавиатура имеет только кнопки, но их достаточно много. Геймпад имеет несколько осей и кнопок, приблизительно около 20 инпутов. Мультитач, гироскоп, компас, акселерометр, микрофон и веб-камера, всё это устройства ввода с которыми работает Unity. Это обширный спектр возможностей. Unity- кроссплатформенная среда. Практически все известные устройства и операционные системы поддерживают Unity. Так же и большинство браузеров поддерживают Unity веб-сборки. На Unity можно создавать такие приложения, которые могут воспроизводить картинку на нескольких мониторах или одно приложение с различными клиентскими оболочками на различных устройствах. Область экспериментов ещё не исчерпана. Всё выше перечисленное делает возможным воплощать самые неожиданные идеи в интерактивной графической форме. Всё зависит от вас, вашего воображения и изобретательности.