Уроки Unity3d - Окружение, редактор ландшафта

Создавая свой 3D мир, вы будите использовать два различных типа окружения - здания и пейзажи, созданные в сторонних 3D редакторах, и ландшафт, созданный в редакторе ландшафта (terrain editor) Unity.

В этой главе мы рассмотрим использование обоих типов, будет дан краткий обзор необходимых параметров настройки импорта для внешне созданных моделей, но, главным образом, мы сосредоточимся на использовании собственных инструментов Unity по созданию ландшафта. Так же мы рассмотрим следующие темы:
• Создание вашего первого проекта в Unity;
• Создание и настройка ландшафта;
• Использование инструментария ландшафта (terrain toolset), для создания острова;
• Освещение сцены;
• Использование звука;
• Импорт пакетов ресурсов (Packaged Assets);
• Использование внешних 3D моделей.

Внешнее моделирование.

Поскольку 3D дизайн, сам по себе, сложная и обширная дисциплина, я советую вам, потрать время на изучение выбранного вами 3D редактора. Если вы новичок в 3D
моделирования, то здесь список пакетов 3D моделирования в настоящее время поддерживаемых Unity:
• Maya
• 3D Studio Max
• Cheetah 3D
• Cinema 4D
• Blender
• Carara
• Lightwave
• XSI

Эти восемь 3D редакторов рекомендует Unity Technologies, как наиболее подходящие. Главная причина для этого состоит в том, что они экспортируют модели в формате, который может быть автоматически прочитан и импортирован Unity, и после сохранен в папку Assets вашего проекта. Эти восемь форматов корректно импортируются в Unity с сохранением мешей, текстур, анимации, костей, в то время как, другие небольшие 3D пакеты могут утерять анимацию или кости при импорте.
Таблицу совместимости можно увидеть тут: http://unity3d.com/unity/features/asset-importing

Ресурсы.

Модели из этой книги можно найти в Интернете в формате .fbx ("родной" формат Unity, который является общим для большинства 3D приложений). Загружая контент, который используется в упражнениях этой книги, вам необходимо использовать систему управления пакетами Unity (package system). Доступно в меню Assets -> Import/Export Package, импорт и экспорт пакетов Unity дает вам возможность передачи ресурсов (assets) между проектами, включая dependencies (зависимости). Dependency (зависимость) это просто еще один ресурс (asset) связанный с импортируемым/экспортируемым. Например, при экспорте 3D модели, как части пакета Unity (для передачи другому человеку или в другой ваш проект), вам надо передать и материал с текстурой, которые связаны с этой моделью, и эти сопутствующие ресурсы будут называться зависимости модели (model's dependencies).

Ваш первый проект.

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

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

В этой книги мы начнем создавать игру с нуля, поэтому нам понадобиться новый проект, создадим его – в главном меню выберем File –> New Project, это закроет текущий проект
и предоставит в наше распоряжение Project Wizard – диалоговое окно, в котором вы можете выбрать готовый проект или создать новый, выбирая из нескольких начальных Asset Packages (пакетов ресурсов).

Помните, что если вы хотите начать работу с Unity в окне Project
Wizard, при запуске Unity Editor удерживайте клавишу Alt .

Что бы создать свой проект(project) Unity, для начала необходимо указать папку, в которой он будет храниться, для этого укажите путь в поле Project Location или нажмите кнопку Browse и укажите папку в диалоговом окне. Я назвал свой проект Project 1, но вы можете назвать ваш, как вам угодно. Теперь установите флажок напротив Standard Assets. Это даст вам множество ресурсов (assets), предоставляемых Unity Technologies. Когда все будет готово, нажмите Create, для создания и сохранения вашего проекта.
Фото

Использование редактора ландшафта.

При создании любой игры, которая реализует открытые пространства, редактор ландшафта (terrain editor) – обязательный инструмент разработчика. Unity, начиная с версии 2.0, имеет встроенный редактор ландшафта, что делает создание окружения быстрым и легким.

В представлении Unity, ландшафт (terrain) - это просто игровой объект (game object), к которому прикреплен компонент инструментария ландшафта (terrain toolkit component). Начав с Plane - плоскости, односторонней 3D фигуры – в скором времени, вы преобразуете ландшафт в завершенную реалистичную геометрию, с дополнительными деталями, такими как деревья, камни, трава, и даже атмосферными эффектами, такими как скорость ветра.

Функции меню ландшафта.

Для того, что бы использовать функции, описанные ниже, в первую очередь, вам необходимо создать ландшафт (terrain). Поэтому давайте начнем, введя в игру нового объекта ландшафта (terrain object) – это ресурс (Asset), который может быть создан в пределах Unity, для этого выберете в меню Terrain –> Create Terrain.

Прежде чем изменять ваш ландшафт(terrain), вы должны настроить различные параметры размера и детализации. Меню Terrain, в верхней части Unity, не только позволяет создать ландшафт, но и выполнить следующие операции:

Importing and exporting heightmaps.
Карта высот (Heightmaps) - это 2D изображение со светлыми и темными областями, которые представляют рельеф ландшафта, и может быть импортировано, как альтернатива использованию инструментов “рисования” высот (height painting tools) Unity. Карта высот (heightmaps) может быть создана либо в графическом редакторе, например Photoshop, либо в специализированной программе генерации ландшафтов, после чего карта высот должна быть сохранена в файле формата .RAW. Т.к. для создания окружения мы будим использовать инструментарии Unity, подробно вопрос об использовании карт высот(heightmaps), в рамках этой книги, рассмотрен не будет.

Set Heightmap resolution.
Фото
Данное диалоговое окно позволяет установить ряд свойств нового ландшафта, который вы создали. Эти параметры должны быть настроены до создания рельеф ландшафта, т.к. их изменение может привести к пересозданию ландшафта.
• Terrain Width, Height and Length (ширина, высота и длина ландшафта):
Измеряется в метрах. Отметьте, что Height (Высота) здесь означает максимальную высоту рельефа ландшафта;
• Heightmap Resolution (разрешение карты высот): в пикселях, разрешение текстуры, которую Unity хранит для представления рельефа. Обратите внимание, что хотя большинство текстур Unity должно имеет разрешение равное степени двойки - 128, 256, 512 и т.д., разрешение карт высот (heightmap) всегда на один пиксель больше, например, мы имеем ландшафт 4х4, это значит, что сетка/меш ландшафта имеет 4 клетки в ширину и 4 в длину, но при этом, у нее 5 = 4+1 вершин, как в высоту, так и в длину – см. рисунок ниже;
Фото
• Detail resolution: разрешение изображение, известного как Detail resolution map (карта разрешения деталей). Она определяет, как точно можно разместить Details (детали) на ландшафте. Details (детали) – это дополнительные элементы ландшафта, такие как камни, трава, кусты и т.п. Чем больше значение, тем более точно вы можете разместить Details на ландшафте, с точки зрения позиционирования;
• Control Texture Resolution: разрешение текстур наносимых на ландшафт. В Unity известна как Splatmap текстура, значение Control Texture Resolution (разрешение контрольной текстуры) управляет размером, а, следовательно, и детализацией, любой текстуры наносимой на ландшафт. Высокое разрешение сильно влияет на производительность, поэтому стало хорошей практикой, оставлять это значение равным 512;
• Base Texture Resolution: разрешение текстуры используемой Unity для визуализации(render) рельефа ландшафта на расстоянии, при значительном отдалении игровой камеры или на слабых компьютерах.

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

Этот диалог позволяет создавать карту освещений (lightmap), от нескольких источников света. К примеру, на вашей сцене размещен Directional light, для имитации солнечного света, так же на сцене имеется несколько Point light, в качестве фонарей или огня. Поскольку мы создаем новый рельеф ландшафта, используя внутренний инструментарий Unity, в процессе работы нам придется пересоздавать карту освещений (lightmap) несколько раз.

Mass Place Trees.
Эта функция делает точно то, что говорит ее имя (Много деревьев) - размещает указанное количества деревьев на ландшафте, конкретное дерево и его параметры, определяются в Place Trees компонента Terrain (Script) в Инспекторе (Inspector). Эта функция не рекомендуется для общего использования, поскольку она не дает вам контроля над положением деревьев. Я рекомендую вам использовать в Place Trees компонента Terrain (Script), чтобы вручную ‘нарисовать’ более реалистическое размещение.

Flatten Heightmap.
Flatten Heightmap позволяет вам выровнять весь ландшафт по указанной высоте.

Refresh Tree and Detail Prototypes.
Если вы внесли изменения в ресурсы (assets), из которых созданы деревья или детали(details) размещенные на ландшафте, вам необходимо выбрать Refresh Tree and Detail Prototypes,что бы обновить.

Инструментарий ландшафта.
The terrain toolset.

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

После того как вы создали ландшафт (terrain), он должен быть выбран в окне Иерархии (Hierarchy), если не выбран, выберете его, что бы отразить его свойства в Инспекторе свойств (Inspector).

Terrain Script.
В инспекторе свойств (Inspector) инструментарием ландшафта (terrain toolset) является компонент Terrain (Script). Он дает вам возможность использовать различные инструменты и задавать параметры настройки ландшафта, в дополнение к функциям, доступных из меню Terrain, описанным выше.

На рисунке ниже, вы можете увидеть, что это второй из трех компонентов игрового объекта (game object) Terrain (другими являются Transform и Terrain Collider).
Фото
Компонент Terrain (Script) имеет семь секций, которые легко доступны с помощь кнопок в верхней части компонента. Прежде чем мы начнем работу по созданию ландшафта, вот их краткий обзор:

Raise/Lower Terrain.
Этот инструмент позволяет ‘рисовать’ рельеф на ландшафте. Левой кнопкой мыши мы увеличиваем значения высот ландшафта, если зажать Shift высота будет уменьшаться.

Прим. пер.: учтите, что сделать высоту ландшафта отрицательной вы не смежите, если вам необходимо создать такие элементы рельефа как овраг, русло реки и т.п., необходимо увеличить высоту всего ландшафта, используя инструмент меню Terrain-> Flatten Heightmap (описанный выше), а уж потом создавать нужные вам элементы рельефа.
Фото
У вас есть возможность определить стиль кисти (Brush), а с помощью параметров Size и Opacity определить площадь и силу деформации.
Фото

Paint height.
Этот инструмент схож с предыдущим инструментом, только он имеет дополнительный параметр Height.
Фото
Это означает, что можно указать ограничение по высоте (height), т.е. когда область ландшафта, которую вы изменяете, достигнет высоты указанной в параметре Height, действие инструмента прекратится – это удобный способ для создания плато:
Фото

Smooth height.
Это дополнительный инструмент, служит для сглаживания резких элементов рельефа.
Фото
Например, создавая плато, у мя получились острые края, которые я хочу сгладить:
Фото
Paint Texture.
Paint Texture - инструмент, который в качестве кисти (brush) использует текстуру – в терминах Unity - Splats, для нанесения ее на ландшафт.
Фото

Что бы начать наносить текстуру, она вначале должна быть добавлена в палитру поля Textures этого инструмента. Для добавления текстуры необходимо нажать на кнопку Edit Textures и выбрать Add Texture, что позволит вам выбрать любую текстуру, загруженную в проект(project), вместе с параметрами “облицовки” (tiling). Следующий рисунок, пример этого инструмента с тремя текстурами в палитре. Первая текстура, которую вы добавите, будет нанесена на весь ландшафт по умолчанию. Далее, используя другие текстуры, вы сможете создать реалистичную поверхность.
Фото
Что бы выбрать текстуру для рисования, просто выберете ее в палитре Textures, выбранная текстура отмечена синим подчеркиванием.

Place Trees.
Этот инструмент позволяет быстро и легко размещать на ландшафте деревья (да, в принципе, любые меши), указав какие ресурсы (assets) вы будите для этого использовать.
Фото
Точно так же, как вы добавляли текстуры в инструменте Paint Texture, так и тут для этих целей существует кнопка Edit Trees, с помощью которой вы можете добавлять, редактировать или удалять ресурсы (assets) из палитры.

В настройках(Settings) Place Trees можно указать:
• Brush Size: количество деревьев(trees) размещаемых за клик;
• Tree Density: плотность расположения деревьев;
• Color Variation: применяется случайное изменение цвета деревьев;
• Tree Width/Height: размер ресурса (asset) размещаемого на ландшафте;
• Tree Width/Height Variation: дает вам случайное изменение в размере деревьев. Этот инструмент использует клавишу Shift, что бы убрать внесенные им изменения, т.е. стереть деревья с ландшафта, в сочетании с клавишей Ctrl стирает только выбранные в палитре деревья.

Paint Details.
Этот инструмент работает по аналогии с инструментом Place Trees, но предназначен для работы с detail objects (объектами деталей), такими как камни, трава, кусты и т.п.
Фото

Terrain Settings.
Terrain Settings в Terrain (Script) содержит различные настройки отображения ландшафта.
Фото
Здесь вы можете задать различные параметры, влияющие на LOD (Level of Detail — уровни детализации).

LOD (Level of Detail) приём в разработке игр, заключающийся в изменении уровня детализации в зависимости от расстояния объекта до игрока.

От переводчика: в книге далее идут три абзаца ‘воды’ посвященные параметру Base Map Distance (расстояние, на котором текстуры ландшафта будут отображаться в высоком разрешении) - я лучше опешу все параметры, используя информацию по этой ссылке http://docs.unity3d.ru/Components/terrain-OtherSettings.html (так же доступна, если нажать на значок книжечки с вопросом в компоненте).

Base Terrain (базовые настройки):
• Pixel Error: количество допустимых ошибок в отображении геометрии ландшафта. По существу, это настройка LOD;
• Base Map Distance: расстояние, на котором текстуры ландшафта будут отображаться в высоком разрешении;
• Lighting: Метод освещения ландшафта: Vertex, Lightmap, Pixel;
• Cast Shadows: Определяет, отбрасывает ли ландшафт тени.

Tree & Detail Settings (настройки деревьев и деталей):
• Draw: Если включено — все деревья, трава и детали отрисовываются;
• Detail Distance: Дистанция, на которой отрисовываются детали;
• Tree Distance: Дистанция, на которой отрисовываются деревья;
• Billboard Start: Расстояние от камеры, на котором деревья начнут отображаться, как Billboards вместо Meshes;
• Fade Length: Диапазон, который будут использовать деревья для перехода от Billboards к Meshes;
• Max Mesh Trees: Общее количество мешей деревьев, которым позволено отображаться на ландшафте.

Wind Settings (настройки ветра):
• Speed: Скорость, с которой ветер дует на траву (прим. пер.: больше подойдет термин – частота ветра);
• Size: Определяет области травы, которые реагируют на ветер асинхронно;
• Bending: Сила воздействия на траву - значение, на которое она согнется под действием ветра;
• Grass Tint: Общий оттенок для всей травы (Grass) и мешей деталей (Detail Meshes). На рисунке, для наглядности, показан ландшафт с низким значением Base Map Distance
Фото