Покоряя Unreal. Часть 2 - Борьба с нереальностью

Прошлые части

Введение

В этой части я буду записывать то что я вынес из экспериментов с Unreal будет много текста и технических моментов. Неинтересных любопытствующим, очевидных для профессионалов. Визуально корабль измениться минимально

Известные проблемы

В прошлый раз я остановился на знакомстве с движком. Было очевидно что мне не хватает базы и нужно идти "курить мануал". Добрые люди в коментариях советовали официальную документацию.

Официальные ошибки

Начал я с исправления ошибок на которые указывает сам анрил. Наверняка он подсказывает что то полезное

Покоряя Unreal. Часть 2 - Борьба с нереальностью

Ошибок было более 70 что очень сильно пугало, но уникальных было всего 4 вида. Напоминает игры где разработчики хвастаются "тысячами типами врагов" которые отличаются только цветом и названием.

  • ошибка один - неправильное имя материалов. Unreal не терпит пробелов в названии. Просто нужно убрать все пробелы перед импортом.
  • ошибка два - отсутствие групп сглаживания. Перед экспортом указал что нужно сглаживать FACE. Этого оказалось достаточно что бы убрать ошибку. Но чувствую тему нужно изучить глубже.
  • ошибка три и четыре - Это проблемы UV. Тут тоже все просто. Я еще не делал нормальной UV, поэтому и ошибки очевидны

Реальный проблемы

Не хочу описывать использованный метод проб, и перейду сразу к сделанным выводам.

Есть как минимум 2 способа импортировать объект в Unreal.

1)импортировать в коллекцию
2)импортировать в сцену

Если импортировать в коллекцию, то ваша коллекция пополнится кучей независимых элементов. И придется заново собирать корабль. Не очень хочется этого делать.

Если импортировать в сцену. То у вас все еще пополнится коллекция, но дополнительно в сцене появится объект внутри которого будут правильно составленные элементы. Такой вариант меня устраивает.

Покоряя Unreal. Часть 2 - Борьба с нереальностью

Проблемы с масштабом

Unreal считает все в сантиметрах, Blender в метрах. Поэтому когда мы экспортируем куб 2 метра он становится 2см. Тогда почему сцена с кораблем выглядела нормально? Оказывается у FBX есть отдельный множитель, который масштабирует всю сцену.

Зная эту математику мы увеличиваем корабль в 100 раз. А потом уменьшаем масштаб FBX в 100 раз. И тогда в Unreal у нас получается 1:1. и все работает отлично.

Покоряя Unreal. Часть 2 - Борьба с нереальностью

Новые горизонты

Окей с известными ошибками разобрались, время создать себе новые проблемы. Что нужно сделать что бы кораблик было не стыдно показать друзьям? Мы уже можем условно ходить по его поверхностям, но этого явно мало.

  • Материалы- Я знал что из блендера они не перенесутся, поэтому и не сильно заморачивался. Теперь нужно изучить материалы Unreal
  • Коллизия- не очень приятно застревать в объектах, даже если этого объекта не видно
  • Повторное использование объектов- в корабле много повторявшихся элементов. Перила, колоны, веревки, окна. Многие объекты симметричные. Если в Unreal модификатор miror? Как избежать дублирования? Корабль с повторным использованием объектов весит 12 мегабайт. Если каждый элемент сделать уникальным то все 90. Есть ли массивы? массивы по кривой?
Покоряя Unreal. Часть 2 - Борьба с нереальностью

Довольно быстро разобрался с экспортом без дублирования. Хотя иногда случаются сбои, вероятно из-за модификаторов. Базово начал изучать материалы. В одном из уроков встретил понятие "мастер матириал", думал что это что-то интересное, оказалось просто базовый материал который ты потом копируешь.

Сделать стекло просто, красивое стекло нет
Сделать стекло просто, красивое стекло нет

Нодовая система знакома мне по блендеру. Почитав документацию и посмотрев примеры работ, я смогу создать базовые материалы. Unreal так же содержит множество своих технологий. Как включить рейтрейсинг? люмин? запеченные отражения? Где наниты? оно мне надо? столько вопросов

Покоряя Unreal. Часть 2 - Борьба с нереальностью

Часть перил я решил собрать из кубов. Позволит легче настроить коллизию, и вроде как уменьшить нагрузку на видеокарту(или нет?). Это привело к проблемам шейдинга где 2 плоскости накладываются друг на друга. Профессионалы зовут такое z fight. Нужно изменить дизайн, разделить поверхности в разные плоскости.

Покоряя Unreal. Часть 2 - Борьба с нереальностью

После пары часов экспериментов, я пришел к более менее выверенному пайплайну экспорта. Теперь нужно переделать корабль под новые требования, закончить детализацию. Параллельно изучить создание материалов в Unreal. Совсем скоро я получу первое "играбельное" демо

Ковыряя модель

"оптимизация" стала для меня идеей фикс. Минимум сетки, минимум вызовов отрисовки. Реально в этом нет никакой необходимости. 15 мегабайт на локацию 300к фейсов. В 2008 на Iphone сцена в мобильной игре могла быть 8000 полигонов. Killzone на пс4 cодержала около миллиона полигонов на сцену(непроверенные данные), или 85к на персонажа в Ryse: Son of Rome на слабом Xbox ONE. Так же есть показатель draw call, для Unreal в среднем рекомендуют 1000-4000.

Даже слабый пк легко потянет мою модельку. Но если я не стараюсь, как я могу требовать старание от остальных? Не хочу терять моральное право ныть про криворуких разработчиков.

Смотрим сетку в блендере и замечаем что её распределение не очень равномерное, и не факт что оно улучшает картинку

Покоряя Unreal. Часть 2 - Борьба с нереальностью

Первой в глаза бросается веревка. 576 полигонов на каждый виток? ого а в сцене 20 веревок по 4 витка. почти 20% всех полигонов !

Первое что приходит в голову это удаление внутренних полигонов. сразу -96 на виток.

Покоряя Unreal. Часть 2 - Борьба с нереальностью

Затем я разделяю веревки на "близко к игроку", "рядом с игроком" и "далеко от игрока". Те веревки которые видно только издалека можно сжать до 120 фейсов. Те что будут постоянно в кадре, но к которым нельзя подойти, сжимаю до 192. Те к которым камера приближается в упор, оставляю на 480

Самая сжатая веревка.
Самая сжатая веревка.

Начинал я с 296 тысяч поверхностей, и сократил их до 280! только на веревке. А поковыряв сцену смог опустить и до 170. Конечно эта цифра вырастит при увеличении детализации. Но я постараюсь держать её в разумных приделах.

Теперь проверяем вызовы отрисовки. Надеюсь я нашел правильный счетчик.
350+- с кораблем , стабильные 220 в пустой сцене.

Покоряя Unreal. Часть 2 - Борьба с нереальностью

Вроде немного, а вроде и перебор для одного кораблика. Попробуем изучить эту тему. Для начала объединим разрозненные меши, сократим количество объектов корабля с 160 до 70. + мы уже сократили количество полигонов. Теперь игра с корабликом показывает 220-290 вызовов. Гораздо лучше. Когда добавил шейдер метала сразу стало под 330. Видно материалы сильно влияют. Хотя учитывая что у меня нет запеченного освещения, это неудивительно.

Cледующей глобальной задачей стала победа над лестницами. У них слишком крутой наклон и персонаж просто скатывается. Наверно это можно поправить в настройках персонажа, но я тупо хочу больше коллизий. Начну с чтения гост и подгонки размеров, так лестница будет выглядеть реалистичней, и возможно проблема наклона пропадет сама.

Покоряя Unreal. Часть 2 - Борьба с нереальностью

В итоге я вручную создал коллизию для каждой ступеньки. Отдельно меня поразило что манекен подстраивает анимацию ходьбы под окружение.

Покоряя Unreal. Часть 2 - Борьба с нереальностью

Подпорки под перила созданы по кривой. Потом разделены на индивидуальные объекты. А эти индивидуальные объекты заменены на ссылки на одну колону.

Покоряя Unreal. Часть 2 - Борьба с нереальностью

C подпорками корабль выглядит цельней и логичней.

Базовая коллизия. С ней можно ходить по кораблю
Базовая коллизия. С ней можно ходить по кораблю

На этом эксперименты с анрилом временно прекращаю, и возвращаюсь к классическому моделированию. Нужно переделать голову барашка, и добавить недостающие детали окружения. Потом следует заняться шейдером воды, и материалами для корабля. Дальний план это телепортация игрока в стартовую точку при выпадении "за борт". И компиляция в исполняемый файл.

Детализация

Покоряя Unreal. Часть 2 - Борьба с нереальностью

Моделирую руль, его не видно игроку поэтому не сильно запариваюсь с проработкой механизма.

Покоряя Unreal. Часть 2 - Борьба с нереальностью

Изменил структуру корабля. Это потребовало много времени, но теперь удобно скрывать отдельные элементы, и быстро вносить правки.

Покоряя Unreal. Часть 2 - Борьба с нереальностью

Прорабатываю интерьер, заменяю заглушки на проработанные модели.

Покоряя Unreal. Часть 2 - Борьба с нереальностью

Из интересного можно обратить внимание на ящик с яблоками. Сначала я симулировал падение сфер в ящик. Потом заменил сферы яблоками. Сами яблоки даже получили текстуру, целых 128 пикселя!

Покоряя Unreal. Часть 2 - Борьба с нереальностью
Покоряя Unreal. Часть 2 - Борьба с нереальностью

Итог

Анрил не кажется таким страшным как раньше, и сейчас меня ждет только рутинная работа по созданию детализации. Думаю это стоит вынести в отдельную часть, хоть я и начал описывать какие то элементы тут.

1616
13 комментариев

Эх, когда нибудь и я окунусь с головой в мир нереальных энджинов... Но пока я только изучаю анатомию 😅

1
Ответить

Ну а я может и до анатомии дойду)

3
Ответить

Комментарий недоступен

Ответить

Не первый день с ним . Для 3d печати не раз боролся с размерами

Ответить

Не не пробовал. Отзывы были так себе(2 года назад) и я решил напрямую

Ответить

Есть ещё такое неофициальное дополнение для автоматизации переноса из Blender'а
https://github.com/xavier150/Blender-For-UnrealEngine-Addons

Ответить