Перейти к содержимому

Где делать модели для unity

  • автор:

Использование Blender и Maya с Unity

Blender и Maya — это ведущие пакеты для моделирования и анимации. На этой странице мы расскажем, чем они вам понравятся в сочетании с Unity на вашем пути в разработке игр.

Мощное дополнение в инструментарий разработчика игр

Мощное дополнение к инструментарию

Мир игровой разработки устроен так, что чем больше у вас инструментов, тем больше у вас возможностей. Blender и Maya — это одни из самых мощных доступных инструментов. Они занимают ведущие позиции в графике и анимации. Эти приложения повышают гибкость игровой разработки и в конечном итоге помогают сделать игру качественнее. В этой статье мы расскажем, чем хороши Blender и Maya в составе инструментария начинающего разработчика игр в Unity.

  • Больше, чем графика и анимация
  • Бесшовный импорт в Unity
  • Объединение усилий дизайнеров и разработчиков

Больше, чем графика и анимация

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

Другой пакет, Autodesk Maya, хоть и не бесплатен, но стал промышленным стандартом. Практически любой блокбастер в мире игр и кино, выпущенный в этом десятилетии, содержит визуальные эффекты, анимации и трехмерные ресурсы, созданные в Maya (или в его аналоге 3ds Max).

Слыша «Blender» или «Maya», люди автоматически думают о графике или анимации. Но многие не знают, что возможности этих программ выходят далеко за пределы этих задач. Blender и Maya имеют множество других функций и преимуществ, например:

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

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

Sykoo — Руководство по использованию Blender 2.8 и Unity 2019 для начинающих

Бесшовный импорт в Unity

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

Для импорта ресурсов из Blender в Unity выберите пункт меню Assets > Import New Asset на панели меню Unity, а затем найдите и откройте файл .blend.

Для импорта файлов Maya в Unity выберите пункт меню Assets > Import New Asset на панели меню Unity, а затем найдите и откройте файл Maya с расширением .fbx.

Сотрудничество Unity и Autodesk над форматом FBX: демонстрация обмена файлами между Maya и Unity

Объединение усилий дизайнеров и разработчиков

As a game creator, your main concern will always be having everything you need to make the game you’ve envisioned. At Unity, we believe that game creation, particularly for new developers, should always be efficient and enjoyable.

Combining these programs with Unity unleashes powerful design and development capabilities. Using Blender or Maya with Unity is hassle-free: no complicated pipelines, no special installations or conversions, and every tool you need to succeed in developing your first game. With all of this creative power at your fingertips, you’ll be on your way to making truly amazing games.

Создание трехмерной модели местности в Unity 3D

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

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

Рис 1. Интерфейс проектирования ландшафтов в Unity3D

Стандартный процесс моделирования ландшафта в Unity выглядит следующим образом: [1]

создание и задание основных параметров (высота, длинна, ширина) для пустого объекта Terrain (выглядит в виде прямоугольной плоскости)

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

нанесение текстур (могут быть использованы как базовые текстуры, так и созданные в различных графических редакторах; наносить текстуры рекомендуется после создания конечного рельефа, т.к. в противном случае можно получить деформированные текстуры)

добавление различных источников света (глобальных и локальных) и создание неба (в контексте Unity именуется, как SkyBox)

проработка деталей, особенностей местности и объектов (деревья, трава, вода, камни и т.д.)

расстановка камер (позволяет создавать визуальные эффекты или принуждает пользователя смотреть так, как хочет создатель приложения)

Методы оптимизации при работе с ландшафтами в Unity3D

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

Для уменьшения количества полигонов применяется алгоритм редукции полигонов. Редукция — процесс упрощения 3D модели путем уменьшения количества полигонов. Принцип работы метода заключается в замещении группы полигонов одним, наиболее близким к исходной группе по расположению вершин. Большинство 3D редакторов имеют возможность задавать интенсивность редукции, что позволяет выбрать нужное соотношение между уровнем проработки модели и экономией вычислительной мощности.[2]

02 reduction

Рис. 2 Использование инструмента редукции полигонов для 3D модели ландшафта

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

Также при моделировании ландшафта важно учитывать, что на нем могут присутствовать различные элементы (камни, деревья, здания и т.п.), которые будут придавать уникальность моделируемой местности. Процесс отрисовки каждого элемента это трудоемкая задача для компьютера. Occlusion Culling – функция Unity, которая отключает отрисовку объектов, невидимых камерой или заслоняемых другими объектами в данный момент времени. [3]

03 Occlusion-Culling

Рис.3 Использование инструмента Occlusion Culling для отключения объектов, которые в данный момент не видны основной камере

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

К примеру, для создания «Солнца» обычно используется инструмент Direction Light, так как он влияет на все поверхности в сцене. Особенностью Direction Light является то, что для своей работы этот инструмент потребляет мало ресурсов графического процессора. Для создания других источников света, к примеру, уличных, автомобильных фонарей применяют инструмент Point Light, так как он идеально повторяет их естественный свет. Но данный тип освещения потребляет наибольшее количество ресурсов графического процессора.

04 Light

Рис. 4 Принцип работы Point и Direction Light

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

05 SkyBox

Рис. 5 Пример работы инструмента SkyBox для моделирования неба

Используя вышеописанные методы создания и оптимизации 3D ландшафтов, была создана тестовая сцена для интерактивного приложения WitchCraft в программном пакете Unity.

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

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

  • операционная система: OS X Maverics
  • процессор: 1,3 GHz Intel Core i5 Haswell
  • оперативная память: 4 Gb 1600 Ghz DDR3
  • видеокарта: Intel HD 5000 1024 Mb

07 results

Рис. 7 Ресурсоемкость тестовой сцены при заданной конфигурации

На этапе тестирования, приложение показало хорошие показатели FPS, что говорит о том, что местность смоделирована «экономно», несмотря на большую площадь с разнообразным рельефом и достаточно большое количество объектов.

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

Список Литературы

  1. «Unity 3D Basic Info and Tutorials» http://www.csit.carleton.ca/~arya/ds4/etc/Unity_Toturial.pdf
  2. «Grome Terrain Modeling with Ogre3D, UDK, and Unity3D» http://it-ebooks.info/book/2036/
  3. «Occlusion Culling» http://unity3dscripts.16mb.com/translate/occlusion/01/

Где делать модели для unity

Комментарии

Популярные По порядку
Не удалось загрузить комментарии.

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ

13 главных ошибок, мешающих разрабатывать игры

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

Разработка игр – это просто: 12 этапов изучения геймдева

Разработка игр на плаву, она перспективна и набирает популярность. Мы подготовили подробную инфографику о пути изучения разработки игр.

15 материалов по разработке игр

Обзор материалов по геймдеву: книги, видеокурсы и полезные ресурсы, которые пригодятся при разработке игр под любую платформу.

Импорт 3D-моделей в Unity и подводные камни

В мире компьютерной графики существует множество форматов представления 3D-моделей. Некоторые из них позиционируются как универсальные, другие — как оптимизированные под конкретные задачи или платформы. В любой сфере мечтают работать с универсальным форматом, но реальность говорит нам «нет». Более того, из-за такого зоопарка получается порочный круг: разработчики «универсальных» инструментов придумывают свои внутренние форматы для обобщения предыдущих, увеличивая популяцию и плодя средства преобразования форматов. Так появляется проблема потери или искажения данных при конвертации. Проблема стара как мир (мир IT, конечно), и она не обошла стороной импорт моделей в Unity.

В этой статье мы расскажем о некоторых трудностях, с которыми приходится сталкиваться при работе с моделями в Unity (особенности функционирования ModelImporter, разница представлений 3D-объектов и др.), а также о том, какие инструменты мы создали, чтобы эти трудности преодолеть.

Особенности работы ModelImporter

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

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

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

Сюзанна, триангулированная в Blender (Quad Method: Beauty) и в Unity (автоматически при импорте)

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

Самокат здорового человека и самокат курильщика

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

Исходный полигон

Полигон, триангулированный в Blender

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

Полигон в Unity с треугольником, близким к вырожденному (правый треугольник практически неотличим от отрезка)

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

Я 3D-пакет, я так вижу

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

Для некоторых художников же не всегда очевидно, что вершина определяется не только своей позицией. Моделлеры прекрасно знают понятия Hard/Soft Edges и UV Seams, но не все осознают, каким образом они реализованы программно. Дополнительно сбивают с толку 3D-пакеты, которые в стандартном режиме показывают количество вершин как количество уникальных позиций.

Так, обычный примитив Cube геометрически представим 8 вершинами. Однако чтобы корректно передать отражение света от каждой грани и правильно наложить текстуру, в каждом углу куба необходимо по 3 вершины с одинаковой позицией, но разными нормалями и текстурными координатами, поскольку в каждом из углов сходится по 3 ребра. Этому моменту посвятили небольшой блок документации. Там же можно посмотреть примеры.

Метрики куба в Blender

Метрики куба в Unity

Хватит это терпеть!

Столкнувшись с этими и подобными проблемами, мы решили создать инструмент анализа и валидации моделей при импорте в проект Unity. Иначе говоря, кастомный валидатор, который на запрос «Ешь!» ответит: «Не буду! Переделывай», — или выплюнет наборы предупреждений и значений различных параметров, оповещая о том, что ему что-то невкусно.

Для анализа и проверки мы разработали следующий функционал:

  • подсчет количества уникальных позиций вершин, раскрашенных вершин, Hard Edges, UV Seams;
  • расчет Axis-Aligned Bounding Box (AABB) и его центра;
  • определение выхода значений координат UV-развертки за диапазон 0.0–1.0;
  • определение наложений в текстурной развертке;
  • проверка текстурной развертки на достаточность заданного пиксельного отступа при заданном разрешении текстуры.

Подсчеты количества уникальных позиций вершин, Hard Edges, UV Seams и раскрашенных вершин — необходимы для проверки соответствия задуманной художником модели той, что была импортирована в Unity. Этот функционал также позволяет следить за соблюдением требований к оптимизации модели (например, чтобы количество вершин не превышало определенное значение). Из-за все той же особенности 3D-пакетов, которые показывают по факту количество уникальных позиций, бывают случаи, когда метрика числа вершин в редакторе моделей удовлетворяет этому ограничению, однако после внесения файла в проект может оказаться, что это не так.

Вычисление AABB и его центра — позволяет определить смещение модели относительно начала ее собственной системы координат. Это необходимо для предсказуемого позиционирования ассетов, которые инициализируются в сцене уже во время работы приложения. Так, AABB здания по-хорошему должен иметь minY = 0, а какой-нибудь люстры, которая крепится к потолку — maxY = 0.

Выход координат вершин UV-развертки за диапазон 0.0–1.0 — в большинстве случаев (например, если текстура должна тайлиться на модели) предусмотрен. Часто такой подход используется для представления в сцене множества низкодетализированных мелких объектов (растительности) и/или находящихся вдалеке, а также замощения больших однородных объектов (зданий). В случае тайлинга значениям координат конкретного UV-канала просто обрезают целую часть на уровне шейдера, если Wrap Mode текстуры установлен в Repeat.

Представьте теперь, что вы уложили текстуру в атлас (и накрыли одеялком :3). В шейдер будут приходить уже преобразованные координаты, соответствующие атласу (x * масштаб + смещение). Никакой целой части на этот раз вероятнее всего уже не будет и обрезать будет нечего, а модель залезет на чужую текстуру (одеялко оказалось маленьким). Эта проблема решается двумя способами.

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

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

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

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

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

Пример базовой UV-развертки с наложениями (показаны красным)

Однако затем мы решили не использовать эти модели как динамические, а расставлять их в качестве статичного декора на уровне. Для оптимизации, как известно, освещение статических объектов в сцене запекают в специальный атлас. Отдельного UV2-канала для карты освещения у этих моделей не было, а качество работы автоматического генератора в Unity нас не устраивало, поэтому мы решили как можно чаще использовать базовую текстурную развертку для запекания.

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

Некорректно запеченное освещение модели (слева) и исправленное (справа)

Unity при формировании карты освещения в первую очередь пытается использовать UV2-канал. Если он пустой, то используется основной UV, если и этот пуст, то извините, нате вам исключение. Запечь модели в карту освещения без предварительно подготовленного UV2 в Unity можно двумя способами.

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

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

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

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

  • Блог компании Plarium
  • Работа с 3D-графикой
  • Разработка игр
  • Unity

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *