[unity3d] Портируем террейн /или/ Дербаним *.unr файлы

(Эта статья была бы не возможна без таких людей, как gildor, acmi, deMev и teoma)
Часть#1 : Туллчейн 
Для портирования террейна из Lineage][ в unity5 понадобятся следующие утилиты:

UModel от Gildor

Чертовски шикарный тулл, автор охотно идет на контакт.
Пожалуй, если бы не было этой программы, то не было бы порта на unity3D.

Позволяет экспортировать модели, текстуры, материалы, звуки, музыку и пр из разных версий Unreal like игр.

Качать тут:
http://www.gildor.org/projects/umodel
http://www.gildor.org/projects/unactorx






L2Tool и L2PE от acmi

Утилита замечательна тем, что позволяет не только извлечь текстуры в utx, но и запаковать их обратно.
Для нас замечательна тем, что umodel не имеет поддержки формата G16
*Gildor отказался добавлять поддержку формата в umodel вроде бы из-за отсутствия времени*

L2PE поможет нам найти луч света в темном царстве unr.

Качаем тут:
https://sites.google.com/site/l2clientmod/l2tool
https://sites.google.com/site/l2clientmod/l2pe






UEdTexKit
Программа служит для конвертирования карты высот из G16 в православный TIFF.

http://www.foogod.com/UEdTexKit/

Еще нам потребуется фотошоп (запаситесь им заранее)


Часть#2 : Экспорт и подготовка

Ищем в директории Textures файлы типа T_xx_yy.utx. Для примера возьмем T_17_25.utx (это 1/4 от Talking Island), и посмотрим, что у нас внутри:

me@Adam:~/workspace_ogre/umodel_linux$ ./umodel -path=/media/me/lib/GF_lineage.ru/ -list /media/me/lib/GF_lineage.ru/Textures/T_17_25.utx
Found 842 game files (490 skipped)
Loading package: /media/me/lib/GF_lineage.ru/Textures/T_17_25.utx Ver: 123/37 Names: 31 Exports: 12 Imports: 5 Game: 2005
   0      1C6      403 Palette Palette7
   1      5C9    20102 Texture 17_25
   2    206CB    80105 Texture 17_25_G1
   3    A07D0    80105 Texture 17_25_S3
   4   1208D5    80105 Texture 17_25_WR
   5   1A09DA    80104 Texture 17_25_S
   6   220ADE    80104 Texture 17_25_C
   7   2A0BE2    80104 Texture 17_25_R
   8   320CE6    80104 Texture 17_25_G
   9   3A0DEA    80105 Texture 17_25_G2
  10   420EEF    556E9 Texture 17_25_S2
  11   4765D8        1 Package Height

17_25 - G16 h_map
17_25_* - чернобелые маски для накладывания текстур.

Как я уже говорил umodel не хавает G16 формат и на выходе нас ожидает TGA 1x1px. Вот тут нам поможет L2Tool. Интерфейс программы интуитивно прост : открываем utx, выбираем Height.17_25 и жмем "Export".

Полученный BMP конвертируется в TIFF через UEdTexKit:
g16convert_w.exe Height.17_25.bmp Height.17_25.tiff

Теперь мы можем построить terrain в unity, но сначала нам надо отзеркалить его в фотошопе. Зеркалим по вертикали.. кажется, по вертикали.. в любом  случае вы сразу поймете, что ошиблись, когда импортнёте текстуры. Ну и сохраняем в RAW.

Теперь запускаем L2PE, и открываем 17_25.unr
В списке слева находим TerrainInfo0 и жмакаем по нему. Данный класс самый обьемный, и парсинг может занять продолжительное время.


Теперь по свойствам :

  • Layers - нулевой слой, самый "нижний" из слоев 
  • Layers[0]-[10] - остальные слои
Разберем вложенные свойства слоя:
[Texture=T_sland.SL_G, AlphaMap=T_17_25.Height.17_25_G1, UScale=1.0, VScale=1.0 ***


Texture - текстура слоя, T_sland.SL_G - SL_G.tga в папке T_sland (соотв. надо вытащить всё содержимое T_sland.utx);
AlphaMap- маска слоя, T_17_25.Height.17_25_G1- 17_25_G1.tga в папке T_17_25\Height;
UScale VScale- масштаб для тайлинга
Аналогичные вложенные свойства имеются для DecoLayers  (трава, цветы).
Остальные данные свойств Layers[*] не используются.

В "боевом" варианте все эти данные из *.unr извлекаются собственноручно написанным тулом сразу в json для быстрого импорта в проект unity.

Далее запланировано продолжение: Часть#3 Импорт в Unity3D.

PS// Если какой-то из пунктов вызывает затруднения, то помним что внизу есть комментарии.