Ландшафт в Unity3D. Часть 1. Создание террейна в Unity 3D и экспорт карты высот из Unity 3D

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

 

Создаем ландшафт в Unity3D

Для того чтобы создать заготовку для нового террейна в Unity3D выберите в главном меню вкладку “Game Object”, в которой в свою очередь выберите вкладку “3D Object”, а в ней – “Terrain”. В окне сцены “Scene” появится плоскость, похожая на стандартный примитив “Plane” или “Quad”, расположенные все в той же вкладке “3D Object”.

create terrain in unity 3d. Создаем ландшафт в Unity3D
На рисунке показано меню создания ландшафта террейна в Unity3D.

Хотя только что созданная плоскость террейна и имеет компонент “Transform”, как любые другие объекты в Unity 3D, данный компонент позволяет лишь менять расположение террейна в пространстве, абсолютно игнорируя изменения значений для масштаба “Scale” и поворота “Rotation” террейна (выделено красным на рисунке выше).

Но значение для Rotation можно изменить, если его вращать через Гизмо. Конечно существуют инструменты позволяющие повернуть ландшафт в Unity3D, точнее будет сказать, не террейн, а карту высот террейна. Одним из таких инструментов является ассет с Unity Asset Store Terrain Rotator.

terrain rotator unity3d
На рисунке показан ассет Terrain Rotator, позволяющий повернуть карту высот ландшафта в Unity 3D, по сути, позволяющий развернуть террейн Unity 3D.

 

Особенности и секреты террейна/ландшафта в Unity3D

Вместо того чтобы задавать размер террейна через масштаб “Scale” в компоненте преобразования трансформации “Transform” (как это работает, например, для 3D моделей, импортированных в Unity3D), необходимо использовать параметры ширины террейна (по оси Z в глобальных/мировых единицах) и длины/протяженности террейна (по оси X в глобальных/мировых единицах) – “Terrain Width” и “Terrain Length”, задаваемые в настройках/установках террейна “Terrain Settings” (выделено на рисунке выше зеленым цветом). Особенностью созданной заготовки-плоскости для террейна является то, что она может быть изменена имеющимися в Unity3D встроенными инструментами создания террейна, расположенными в компоненте “Terrain” в окне инспектора “Inspector”, такими как понижение/повышение террейна ”Raise/Lower Terrain”, выравнивание террейна до заданной высоты “Paint Height”, сглаживание террейна “Smooth Height”, раскрашивание ландшафта текстурой “Paint Texture”, размещение деревьев на террейне “Place Trees”, размещения травы и мешей “Paint Detail”. Более подробно данные инструменты для работы с террейном в Unity3D описаны в разделе Ландшафтный движок в официальном руководстве Unity3D.
Для данной статьи нам подойдет ландшафт в Unity3D размером в 100 на 100 единиц/units, которые в Unity можно условно приравнять и одному метру, и одному миллиметру (например, для создания макромира в Unity 3D) и нескольким тысячам километров (для создания стратегий в бесконечном космосе в Unity 3D). Остальные настройки (выделены зеленым на рисунке выше в правом нижнем углу) я выставил также не слишком высокими (выделены в нижней правой части рисунка выше зеленым цветом). Обратите внимание, что размер/разрешение карты высот задается не в стандартных размерах 256 (x256), 512 (x 512), 1024 (x 1024), 2048 (x 2048), а к данным значениям добавляется единица, но об этом несколько позже.
Забавности с террейном на этом не заканчиваются: попробуйте повернуть террейн вокруг любой из его осей. Для того чтобы повернуть 3D объект, выберите его (в данном случае террейн), щелкнув по нему Левой Кнопкой Мыши, и перейдите в режим поворота/вращения объекта, нажав клавишу ‘E’, после чего, чтобы повернуть объект вокруг оси Z, щелкните Левой Кнопкой Мыши на синей окружности гизмо, которая окрасится в желтый цвет и удерживая Левую Кнопку Мыши, переместите мышь. За поворот террейна (да и любого другого 3D объекта в окне сцены Unity 3D) вокруг оси Y отвечает зеленая окружность, а вокруг X — красная.

rotate terrain unity 3d. Поворачиваем ландшафт в Unity3D
На рисунке показан “повернутый” ландшафт в Unity3D, который на самом деле не развернулся, а лишь поменял свое местоположение.

Обратите внимание, что ландшафт в Unity3D не поворачивается вокруг своей оси, а поворачивается вокруг некоей точки, как если бы его pivot point лежал не в центре самого террейна, причем ориентация террейна при повороте сохраняется, т.е. если левый край террейна смотрел на сервер, а правый – на юг, то данная ориентация краев террейна не изменится после процедуры вращения террейна. После того как вы «повернете» ландшафт в Unity3D, в результате этого «поворота» изменится лишь его положение в 3D пространстве. В зависимости от того, вокруг какой оси вы поворачиваете террейн, зависит то, по каким осям происходит смещение террейна. После того как вы повернете ландшафт в Unity3D, отпустите Левую Кнопку Мыши и поверните террейн еще раз вокруг той же оси. Попробуйте вернуть его в прежнее положение! Не получается… Получается, что как только вы отпускаете Левую Кнопку Мыши, опорная точка pivot point (как Pivot Center for Rotation/Scaling в Blender) террейна автоматически перемещается в новую точку.
Такое поведение террейна, не как обычного 3D объекта, обусловлено условиями, предъявляемыми к оптимизации террейна в Unity3D. Отсутствие поворота – и плюс и минус одновременно. Минус – вы не можете вращать террейн, но при больших локациях, открытых мирах и огромных уровнях вращение террейна просто убило бы производительность и снизило бы FPS до нуля. Для небольших уровней, например, в виде отдельных островков, отсутствие возможности повернуть террейн может считаться минусом, но при данных начальных условиях всегда можно использовать меш взамен террейна, поскольку в данном случае производительность (даже без поворота террейна) может встать на сторону использования именно мешей, а не террейнов.

Модифицируем/изменяем террейн в Unity 3D

Итак, вернемся к созданному мешу. Верните “развернутый” террейн в прежнее его положение, нажав сочетание клавиш Ctrl+Z, являющейся широко используемой комбинацией для отмены последней операции (в 3D редакторах, текстовых редакторах, графических редакторах и т.д.).
Давайте придадим некую форму созданной заготовке нашего террейна, чтобы он был больше похож на какой-нибудь абстрактный ландшафт. Для этого выберем инструмент повышения/понижения высоты террейна “Raise/Lower Terrain”, выберем соответствующую кисть в разделе “Brushes” , зададим размер и непрозрачность (нажим) кисти и, удерживая Левую Клавишу Мыши, проведем по поверхности будущего ландшафта. Я не стал залезать на края заготовки для террейна, хотя существуют инструменты и скрипты, позволяющие “сшивать” несколько частей террейна (например, созданных непосредственно в Unity3D), даже значительно разнящихся на границах без заметных артефактов.

simple terrain in unity 3d. Как создать простой ландшафт в Unity3D
На рисунке показаны инструменты компоненты «Transform», при помощи которых можно создать ландшафт в Unity3D.

Ландшафт в Unity3D, как много содержится в этих словах и как много можно с ним сделать. Что же мы можем сделать с только что созданным террейном? Раскрасить текстурами, высадить на нем деревья, кустарники и траву, установить Зону ветра “Wind Zone” и настроить ее для травы, а также настроить отображение размещенной растительности и объектов на террейне, включая подмену 3D моделей билбордами (одной или несколькими плоскостями, имитирующими деревья на большом расстоянии от наблюдателя/камеры с целью снизить нагрузку на графический процессор – все равно на большом удалении игрок не увидит каждую веточку дерева или траву, да и не обращает игрок на них, как правило, внимание, за исключением отдельных перфекционистов, которые и в XCOM2, Skyrim, FarCry, Crysis, серии Assasins Creed, Mass Effect, Final Fantasy, Bioshok, Just Cause, Prince of Persia или последнем Ведьмаке , которые по праву считаются одними из самых красивых игр, увидят недостатки, несоответствия, недостаточный реализм и т.д. и т.п.).
Кстати, если вам не хватает имеющихся кистей в Unity3D, вы можете с Unity 3D Asset Store скачать ассет Generic Terrain Brushes, включающий 35 кистей для террейна, либо создать свои кисти. О том, как это сделать, я рассказал в уроке по террейну в Unity 3DТеррейн в Unity 3D. Часть Вводная – для затравки. Создание лабиринтов и подземелий в Unity3D”.

Кроме всего перечисленного Unity 3D позволяет, как импортировать, так и экспортировать созданный террейн в другое приложение для его редактирования. Точнее будет сказать, экспортируется не сам террейн, а карта высот, ведь именно карты высот мы рисуем, когда водим различными кистями по поверхности террейна. Приложениями, в которые может быть импортирована карта высот, созданная в Unity 3D, могут быть и 3D редакторы, например, Blender 3D, и специализированные приложения для создания террейнов/ландшафтов, например, World Machine 2 (поддерживающее множество известных инструментов для построения качественного ландшафта).

world machine terrain generator
На рисунке показан один из ландшафтов, созданных в редакторе ландшафтов World Machine.

Приложение World Machine «выросло» из GeoControl, о чем извещает страница, на которой ранее располагался сайт GeoControl 2.

geocontrol is now woldcreator
На рисунке показана страница перенаправления на один из сайтов, на котором можно познакомиться и купить генератор ландшафтов World Machine 2.

 

Экспорт террейна в Unity3D через экспорт карты высот ландшафта

Давайте экспортируем карту высот, по которой создается ландшафт в Unity3D. Опция экспорта карты высот террейна в формате RAW доступна в меню установок террейна “Terrain Settings” (иконка с шестеренкой).

export height map in raw format from unity 3d. Как экспортировать ландшафт в Unity3D
На рисунке показан процесс экспорта карты высот из Unity3D.

В окне Инспектора в компоненте “Terrain” в разделе карты высот “Heightmap” выберите кнопку “Export RAW”, чтобы открыть меню экспорта карты высот (на базе которой и построен ландшафт в Unity3D). В данном меню вам предложат выбрать параметры для формата RAW экспортируемого изображения. Выберите 16 bit для параметра Depth, чтобы сохранить карту высот в 16-битном формате (об этом мы поговорим в одном из следующих уроков по созданию ландшафта в Unity3D); для Byte Order – Windows, и НЕ ставьте флаг/галочку напротив параметра Flip Vertically, отвечающем за переворот/зеркальное отображение экспортируемого изображения по вертикали. Осталось лишь кликнуть на кнопке “Export”, открыть окно стандартного сохранения файлов, в котором вам останется лишь выбрать папку, в которую вы хотите сохранить карту высот, и имя файла карты высот, после чего – нажать кнопку “Ok”.

Автор: Максим «MANMANA» Голдобин

goldmaxval@gmail.com

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