Всем доброго дня
Как работают другие — одно из немногого, на что можно смотреть вечно. Но рано или поздно пора начинать что-то делать самому. Меня неожиданно сильно зацепил MudRunner своей атмосферностью, но мне не хватает в нём зимы (погоды, снега) и какой-то осмысленностив задачах. Проект задумывается для себя, а не для продажи копий в магазинах, по этому выходящий в конце апреля SnowRunner может «навредить» только забрав всё свободное время.
Для создания автосимулятора необходимы, в минимальной комплектации, автомобили и дороги. С первым для начала проекта у меня проблем нет, в UE Marketplace бесплатно раздавали Vehicle Variety Pack, а так же от самих Epic Games есть проект Vehicle Game (доступный в Epic Games Launcher), откуда можно «позаимствовать» машинку. А вот с дорогами не всё так хорошо. Мне кажется оптимальным временем на миссию 10-15 минут, по этому необходимо создать около 10км дорог на карте, что приводит к размерам карты от 4км х 4км и выше. Из той же Vehicle Game трассу не позаимствуешь (мала), готовых и бесплатных ландшафтов подобных размеров у меня нет. Хочется купить Brushify — Country Roads Pack, подожду немного, может скидки будут.
А пока попробую создать карту своими руками, благо даже несколько туториолов смотрел, где достаточно быстро и не сложно создают красивые рельефы. Желаемый размер, как упоминалось выше — 4х4 км. Оказывается, существуют рекомендации по параметрам при создании ландшафтов разных размеров. В моём случае итоговый «внутренний» размер получился 4033x4033 (при стандартном scale 100 по X и Y). Z scale тоже 100, это будет важно чуть позже. Дальнейший план был накидать дорог и сделать рельеф, как в туториалах.
Но всё пошло не по плану с самого начала =( Полетав минут 20 над получившимся огромным серым квадратом (от края до края долететь уже задача), я понял, что просто не представляю откуда начинать рисовать дорогу, как выдумывать изгибы, повороты и развилки. Пошёл думать над «референсом». И придумал следующий «хитрый план»: ведь можно полетать над глобусом, взять картинку приглянувшегося места со спутниковых Яндекс.Карт и «натянуть» на ландшафт. А дальше уже по картинке, как по трафарету нарисовать дороги. И вообще отметить все интересные участки (леса, поля, озёра, реки, поселения и т.д.). Эх, был бы у Яндекс.Карт рельеф с высотами, то тогда вообще можно было стримить реальные места в UE… Масштаб карт, перед скриншотом, разумеется, надо выставлять примерно соответствующий размеру карты в проекте и разрешение должно быть кратно 2, т.к. это будет текстурой. У меня получилось так:
Однако сама по себе она не будет растягиваться на всю карту и получится мозаика типа
Для растягивания необходимо сотворить некую магию
Пара слов про этот M_Map_fill — я не смог нагуглить решение, пришлось делать самому и это первый в моей жизни UE Material, который я сделал сам. Я не могу сказать как он работает, делал по наитию. Чтобы он сработал у вас надо в WorlAlignedTexture подать свою картинку как TextureObject в TextureObject, её разрешение в TextureSize (z=0, 1024х1024 в моём случае). WorlPosition будет z=0, а вот с X и Y придётся немного поиграться. Сначала TextCoord надо умножить на -1 (чтобы совпало с картой высот, об этом позже, иначе оно вверх ногами будет), потом разделить на количество повторений в одном направлении (просто поставьте сначала 1, примените материал и откорректируйте по месту, в моём случае 4).
Теперь у нас есть плоский трафарет на ландшафте, с которым можно работать. Следующим шагом я решил придать ему объём. Но меня ждал очередной облом — стандартные Sculpt тулы из UE абсолютно не подходят для больших уровней. Максимальный размер Brush size казался запредельным для карт 500 на 500 из туториалов, но вот при моём размере его явно не хватает, «приподнять один угол карты» может занять несколько часов. Нужна карта высот для импорта. И тут снова пригодился референс — ведь можно его просто загрузить в графический редактор (Gimp в моём случае, надо не забыть растянуть ещё изображение до размеров ландшафта с 1024х1024 до 4033х4033 в моём случае), и поверх цветной карты нарисовать в серых тонах где «повыше», где «пониже», а границу просто размазать в UE редакторе с помощью разных Smooth и Erosion. Реальность, же, как всегда, немного сложнее. Если картинка в 16bit gray, в HSV цветах и Z scale = 100 в самом UE, то одно значение V (возможные значения от 0 до 100) будет соответсвовать 2м метрам высоты в игре. По этому первоначальный:
c 7мью вариантами цвета (V=0,10,20,40,60,80,100), дал плохой вариант
Столь огромные перепады высот можно было уменьшить с помощью Z-scale ландшафта, но всё-равно стало понятно, что стоит потрать немного больше времени и сделать побольше разных областей, использовать меньшие перепады по V-цвету, сразу же в редакторе поиграться со сглаживаниями и фильтрами. В итоге я остановился на
что при Z-scale около 50-ти даёт нужный мне перепад высот.
Импортировав эту картинку как heighmap, получил приятный уровень, пригодный для экспериментов и дальнейших улучшений. В следующей части расскажу как достаточно быстро сделал грунтовую и асфальтовую дороги и миникарту.
P.S. Я не совсем уверен в легальности использования Яндекс.Карт как референс для чего-нибудь (надеюсь, что хоть в статье можно), изучите этот вопрос прежде чем использовать для чего-то серьёзного.