Как начать создавать карту в UE4

    Всем доброго дня


    Как работают другие — одно из немногого, на что можно смотреть вечно. Но рано или поздно пора начинать что-то делать самому. Меня неожиданно сильно зацепил 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). см. Update#1 в конце статьи.


    Теперь у нас есть плоский трафарет на ландшафте, с которым можно работать. Следующим шагом я решил придать ему объём. Но меня ждал очередной облом — стандартные 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. Я не совсем уверен в легальности использования Яндекс.Карт как референс для чего-нибудь (надеюсь, что хоть в статье можно), изучите этот вопрос прежде чем использовать для чего-то серьёзного.



    Update#1 К сожалению, чуда не случилось и та магия не работает. Точнее работает, но растягивает картинку сильнее, чем надо (это я выяснил борясь с кривизной отображения положения игрока, когда делал миникарту). Следующая версия материала для ландшафта проще и работает. «Магическое число» 4033 в Divide — общее разрешение уровня:



    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 4

      0

      Можно попробовать взять open street maps и написать какие-то скрипты, чтобы прям по дорогам/домам/лесам в UE4 сгенерировалась карта. Этот путь более сложен, и для создания одной карты, возможно, писать скрипты будет дольше, чем сделать карту вручную. Но зато потом можно будет легко и быстро добавлять в игру любые понравившиеся кусочки земного шара.

        0

        Это всё-таки велосипед. Давно существует возможность генерации карт высот с того же google maps или openstreetmaps. Можете сгенерировать карту для одного райцентра, а можете для всего материка. Ну а построение готового ландшафта на основе карты высот существует почти во всех 3-мерных движках, и существовало уже больше 10 назад. Разумеется, в UE4 эта возможность имеется. Поищите интереса ради книжку "Создание 3D-ландшафтов в реальном времени с использованием C++ и DirectX 9" 2007 года, автор Г.Снук, там об этом есть. Остаётся только немного поиграться с градацией серого, но, думаю, сделав 10-15 карт подобным образом, это не будет вызывать проблем.

          0
          Есть сервис terrain.party, который отдает карты высот любой местности
            0

            Бывают совпадения. Тоже в данный момент делаю карту в ue4. Только я пошёл другим путём. В блендере сделал рельеф с натянутой текстурой из гуглмапс. Затем экспортировал в ue4. И начал экспериментировать с получившимся "террейном". Высаживать растительность и т.п. Но у этого метода большой недостаток нельзя на лету менять текстуру и изменять меш. Пришлось выгружать карту высот и делать террейн по карте. Зато теперь есть модель с текстурой и террейн. Я их совместил и теперь можно текстурить террейн и расставлять другие объекты на сцене.

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое