Перенос рельефа и карты высот в Unreal
17.10.2024 07:23:06
17.10.2024 07:23:06
Да, Utu не справился с этой задачей, но у меня также есть все исходники - карта высот (Height Map), основная текстура ландшафта, карта нормалей и несколько текстур для отрисовки различных слоев (песок, трещины, вершины в виде камней и т.п.). Все это - ассеты в универсальных форматах, а значит, их можно использовать в любом движке и в теории задача сводится к воссозданию геометрии ландшафта через карту высот, применению к ней материала из основной текстуры + карты нормалей и дополнительной отрисовке слоев с использованием остальных текстур.
Начал с карты высот для воссоздания геометрии ландшафта. Она у меня сохранена в формате .raw, который Unreal, как и Unity, поддерживает и, казалось бы, нужно просто импортировать высоты в Unreal при создании Terrain и получим дюны. Но, как обычно, хрен там...
Первое, что не пошло - Unreal'у не понравился формат изображения в .raw файле. В карте высот монохромное изображение контролирует высоту геометрии ландшафта (чем темнее пиксель - тем ниже, чем светлее - тем выше). Отличный же способ передачи информации без заморочек с различными 3D-форматами! Но что-то пошло не так. Я попробовал открыть этот файл в Photoshop - ему тоже не очень понравилось, но он задал несколько вопросов и в итоге открыл изображение. Изображение оказалось отрисованным процентов на 75, остальное - белые пиксели. Странно.
Я пошел к ChatGPT и спросил, что может быть не так с форматом. Тот посоветовал пересохранить изображение из Photoshop с разными настройками битности и прочим... ничего не помогло, Unreal'у файл по-прежнему не нравится. После этого я попросил ИИ сконвертировать файл в формат, который Unreal точно поймет, и... он сделал это. Сгенерированный файл я скормил движку, и тот все понял! Ландшафт появился, но... слишком маленький + там, где пиксели были белыми - плоская возвышенность. Стало очевидно, что в Unity эта карта высот используется не полностью и с какими-то дополнительными настройками, которые в редакторе Unity не отображаются.
Следующее, что я попробовал сделать - экспортировать актуальную карту высот из Unity. Тут ChatGPT посоветовал юзнуть специально созданный для этого плагин и угадайте что? В старой версии Unity плагин просто не запустился, сказав, что он был создан в более новой версии движка, а в последней версии Unity он тоже не запустился, потому что его перестали поддерживать после версии 2023 года. Хорошо, я уже принял решение уйти на Unreal...
В процессе борьбы с плагином нашел стандартную функцию экспорта карты высот глубоко в настройках Terrain. Не знаю, почему ИИ о ней ничего не сказал, но она отработала отлично. Новоиспеченную карту высот я снова скормил ChatGPT и попросил конвертнуть в формат для Unreal - он покорно выполнил задачу, я импортнул результат в Unreal и... опять фигня. Теперь изображение без артефактов, но слишком маленькое, и Unreal его дублирует на все секции Terrain'а...
Поигравшись с настройками Terrain, я пришел к выводу, что проще увеличить изображение под нужный размер, тогда движок сразу создаст и ландшафт достаточного размера. Конечно, не просто растянуть в Фотошопе, я пошел к онлайн-сервисам, которые делают AI upscaling, и увеличил изображение без потери качества в 5 раз. И вроде бы все отлично, геометрия ландшафта создана, но после импорта этого в Unreal стало понятно, что ландшафт в Unity создан из какой-то малой части этой карты высот и потом сильно растянут.
Тут мои нервы уже сдали, и я пошел и просто создал ландшафт в Unreal с нуля по туториалу. Получилось в итоге существенно лучше, чем в оригинале.



Qwuack
