Ландшафт в Unity3D. Часть 2. Импорт карты высот в Photoshop с редактированием и сохранением в формате RAW. Импорт карты высот в Unity 3D для изменения террейна

Данная статья — урок посвящена тому, как импортировать карты высот в формате RAW в Adobe Photoshop, а также основам работы в Photoshop с изображениями карт высот, сохраненных в 16-битном режиме в градациях/оттенках серого. В данном уроке вы узнаете, как «проявлять»/осветлять изображение на холсте с целью увидеть «невидимую» карту высот, чтобы иметь возможность ее редактировать. Данный урок также включает сохранение карты высот в формате RAW (16bit grayscale), который понимает Unity3D. Данная часть серии уроков заканчивается импортом текстуры карты высот в Unity3D и построением на ее базе ландшафта.

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

Получая пожертвования автор сайта уделяет меньше времени на сон и больше — на написание уроков и статей :). Спасибо! 

 

Импорт карты высот в Photoshop

Итак, мы экспортировали карты высот из Unity3D, давайте теперь откроем его в одном из графических редакторов, например, Adobe Photoshop. Через стандартное меню открытия файлов (File -> Open) или путем перетаскивания файла в окно Фотошопа открываем файл с экспортированной картой высот и нам открывается меню настроек формата RAW “Photoshop Raw Option”. Размер импортируемого в Фотошоп изображения, как правило, приложение выбирает само, в гашем случае – 257 на 257 пикселей.

Если этого не произошло, то выставьте параметры импортируемого изображения (карты высот), соответствующие разрешению/размеру карты высот в Unity3D в разделе “Resolution”. Устанавливаем количество слоев “Count” в разделе каналов “Channels” равным единице (1), а битность изображения – равную шестнадцати битам (16 Bits), а формат – IBM PC. Размер заголовка “Size” для заголовка RAW в разделе “Header” выставляем в ноль (0). Жмем кнопку “OK” и видим вместо карты высот — Черный квадрат Малевича.

import heightmap from unity 3d to photoshop
На рисунке показано меню настроек импорта изображения в формате RAW и импортированная карта высот в Adobe Photoshop.

Но где же наша красивая карта высот, соответствующая пикам (холммам и горам) и впадинам (ямам, расщелинам, каньонам, дну озер, рек и океанов), созданным в Unity3D?

Осветление изображения в Photoshop с использованием Авто-контраста и Авто-тона с целью «проявить» (сделать видимой) карту высот

Давайте попробуем использовать инструмент быстрой коррекции тона Автотон/Auto Tone, выбрав соответствующую вкладку в меню изображения “Image” главного меню или нажав сочетание клавиш Shift + Ctrl + L. Того же эффекта можно достичь, воспользовавшись стоящим рядом в меню “Image” инструментом Автоконтраста/Auto Contrast или нажав сочетание горячих клавиш Alt +Shift + Ctrl +L.

heightmap auto contrast in photoshop
На рисунке показана импортированная в Фотошоп карта высот после применения инструмента Автоконтраста в Фотошопе (или после применения инструмента Автотон).

Вот и проявилась наша карта высот. Зернистость карты высот обусловлена небольшим разрешением карты высот (всего 257 x 257 пикселей) и более чем трехкратным ее увеличением в окне программы Фотошоп.

Почему же не видна была импортированная карта высот сразу после ее импорта в Фотошоп? Все дело в том, что мы поставили высоту ландшафта равной 600 единицам/юнитам в Unity 3D, а высота наших пиков (холмов и гор) не добирается и до 15 единиц/метров в Unity3D.

landscape height measurement in unity3D. Измерение высоты террейна, созданного из карты высот в Unity 3D
На рисунке показана модель стандартного примитива 3D куба в Unity 3D, растянутая по высоте до 15 единиц/юнитов/метров, нижний торец которой установлен на поверхность ландшафта, т.е. нулевые координаты ландшафта совпадают с координатами вершин нижнего квадрата куба.

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

Как говорится:

— Видишь суслика?

– Нет!

– И я не вижу. А он есть.

Из фильма “ДМБ”.

Сохранение изображения карты высот в Photoshop в формате RAW 16-bit в градациях/оттенках серого (grayscale)

Итак, давайте посмотрим, что же будет, если использовать в Unity3D измененную нами в Фотошоп карту высот. Для этого нам потребуется экспортировать карту высот в формате RAW, который понимает Unity. Чтобы экспортировать карту высот, в Фотошопе выберите вкладку “File” (Файл) в главном меню вкладку, после чего в выпадающем меню выберите вкладку сохранения “Save As” (Сохранить как…). Измените формат файла для сохранения карты высот на “Photoshop RAW (*.RAW)” и нажмите кнопку “Save” (Сохранить), чтобы открыть меню настроек/опций формата RAW. В данном меню выберите 0 для заголовка файла RAW (Header) и “IBM PC” в разделе “Byte Order”, чтобы определить последовательность байтов (порядок следования байтов). Данный раздел “Byte Order” доступен только для 16-битных изображений, при сохранении RAW файла в формате 8 бит на канал (8 Bits/Channel) данный параметр не используется.

По сути, RAW файл представляет собой двоичный файл, который не содержит никакой посторонней информации, а также не содержит сжатия, как и определения размера и цветового режима изображения. В каждом байте данных закодировано значение яркости в канале. Нажмите “OK”, чтобы подтвердить сохранение изображения, содержащего карту высот с выбранными установками.

export raw heightmap from photoshop. Экспорт карты высот в формате RAW из Фотошопа для создания террейна из карты высот в Unity 3D
На рисунке показан процесс экспорта изображения в формате Photoshop RAW для карты высот в Unity 3D.

 

Импорт карты высот в Unity 3D

Пришло время импортировать в Unity 3D нашу измененную в Фотошопе карту высот для построения из нее нового террейна.

Для того чтобы была возможность сравнить созданный террейн из импортированной измененной карты высот в Unity 3D, давайте не будем удалять старый террейн, а создадим новый. Создайте новый террейн, как мы это делали в начале статьи.

Не обязательно. Выберите террейн Левой Кнопкой Мыши и откройте меню “Terrain Settings” во вкладке “Terrain” Инспектора (Inspector). Вы можете выставить (хотя и не обязательно, поскольку параметры габаритов и разрешения карты высот будут заданы параметрами импорта карты высот, а остальные параметры могут быть изменены сразу после импорта карты высот, НО до начала раскрашивания террейна и расстановки травы и деревьев) те же настройки для террейна в разделе разрешения “Resolution”, что и для вашего первого террейна: Terrain Width = Terrain Length = 100 единиц, Terrain Height  = 600 единиц, Heightmap Resolution = 257 пикселей, остальные параметры, как было только что сказано, такие как Detail Resolution (отвечает за разрешение карты отдельных островков травы Detail Resolution Map), Detail Resolution Per Patch (отвечает за размеры квадратов островов, отрисовываемых за один draw call), Control Texture Resolution (определяет размер карты смешивания текстур террейна “splatmap” ), Base Texture Resolution (определяет разрешение композитной текстуры, используемой при удалении точки наблюдения от террейна или на слабых компьютерах) вы можете настроить, а можете оставить, как есть.

Для того чтобы создать террейн из новой карты высот в Unity 3D, необходимо импортировать ее (измененную и сохраненную в формате RAW) для только что созданной заготовки для террейна. Чтобы это сделать нажмите в разделе “Heightmap” кнопку  “Import Raw”, чтобы открыть меню импорта карты высот в формате RAW “Import Raw Heightmap”. Выберите измененную в Фотошопе карту высот и нажмите кнопку “Open”, чтобы открыть меню импорта карты высот “Heightmap”, в котором выставьте все те же параметры, что вы устанавливали при экспорте карты высот, т.е. битность изображения RAW “Depth” выставьте в 16 бит (Bit 16), для ширины “Width” и высоты “Height” изображения карты высот – по 257 для каждого параметра, для последовательности бит “Byte Order” выберите “Windows”, флаг-галочку напротив Flip Vertically не ставьте. Назначьте ширине Z и длине X террейна в разделе “Terrain Size” этого же меню импорта карты высот выставьте каждой по 100 единиц, а для высоты террейна Y выберите 600 единиц, как и у изначального террейна, с которого была снята оригинальная карта высот. Нажмите кнопку “Import”, чтобы импортировать карту высот.

import heightmap to unity3D. Импорт карты высот в Unity 3D
На рисунке показаны процесс импорта карты высот в Unity3D и два террейна: оригинальный (слева), с которого снималась неизмененная карта нормалей, и получившийся (справа) из импортированной карты высот, “осветленной” в Фотошопе при помощи инструмента Автоконтраст “Auto Contrast” (или инструмент Автотон “Auto Tone”).

Как вы можете видеть на рисунке, получившийся из импортированной карты высот ландшафт/террейн больше похож на сосульку, чем на холмистую местность. Почему так произошло? Все дело в том, что использование в Фотошопе инструментов Автоконтраст “Auto Contrast” или инструмент Автотон “Auto Tone” привело к сильному осветлению осветлении карты высот, а согласно теории карт высот, описанной в статье Создание карты нормалей (normal map), карты смещения (displacement map), карты затенения/освещения (ambient occlusion map), самоовещенной карты нормалей и карты отражений/блеска (specular map) из текстуры или карты высот (heightmap) для игровых движков на примере Unity3D. Часть 2. Теория карт высот, белый цвет на карте высот соответствует самой верхней точке ландшафта, а черный цвет соответствует самой нижней точке ландшафта.

Что нужно сделать, чтобы «понизить» террейн в Unity 3D

Чтобы исправить ситуацию, необходимо в меню “Terrain Settings” во вкладке “Terrain” Инспектора (Inspector) в разделе “Resolution” снизить максимальную высоту ландшафта с 600 единиц до 12 единиц, как в моем случае.

change terrain height in unity 3d. Изменение высоты ландшафта, созданного из карты высот в Unity 3D
На рисунке показан ландшафт, созданный из карты высот в Unity 3D, после изменения максимальной высоты террейна (Terrain Height).

После изменения максимальной высоты террейна созданный из измененной карты высот террейн стал похож на первоначальный террейн, с которого снималась карта высот. Почему я написал похож, а не идентичен? Наверное, вы уже и сами это поняли: самые верхушки нового террейна оказались  обрезаны при “осветлении” карты высот в Photoshop все теми же Автоконтрастом и Автотоном. Изменение максимальной высоты террейна ни к чему не приведет, кроме как к растяжению террейна по высоте.

Чтобы разобраться, как с этим бороться и как это исправить, будет рассказано в следующих уроках данной серии, в частности, в ///статье, посвященной теории битности изображений, включая изображения в формате RAW grayscale, которые понимает система импорта карты высот в Unity 3D.

Поддержите автора проекта. Сделайте пожертвование на поддержку и развитие сайта.

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

goldmaxval@gmail.com

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