2. Модули😐
Следующей итерацией после общего блокинга сцены идет более детальное построение модульного конструктора с учетом всех размеров. На скрине я пересобрал сцену уже из конструктора.
В геймдеве обычно используются размеры модулей кратные двойке (2x2, 4x2, 2x6 и т.д. ) Делается это для того, чтобы мы могли развернуть модуль и спокойно затайлить его текстуры по двум осям.
Если высота модуля будет не кратная 2 и если между этажами нет каких-нибудь бордюров или карнизов, нормально затайлить текстуры, не прибегая к трюкам отзеркаливания UV уже не получится. (См. скрины. Я использую тексель для первого лица 1024/м.)
Поскольку я старался максимально приблизиться к референсу, размеры модулей получились не совсем удобные по высоте: 3м, 3.5м и 4.5м. Да и разбиение на материалы довольно сложное, относительно разности высот соседних модулей (На рефе во многих местах видно, как один материал "перетекает" с одного модуля в другой, у которого отличается высота, а соответственно и положение UV)
Я буду использовать Triplanar mapping. Шейдер получится сложнее и дороже, но зато решит проблему разных по высоте модулей и позволит сохранить интересную композицию сцены🥺
Пара слов про нейминг. Тема на которую постоянно ведутся споры.
Для себя я выработал такую схему:
ТИП_НазваниеКонструктора_НазваниеОбъектаИВариантКонструктора_*ДополнительноеНазвание*_*РазмерМодуля*_ВариантОбъекта.
Я опустил "НазваниеКонструктора" так как у меня всего одна сцена. В реальном продакшене название относилось бы к текущей локации, например Venice, Port или OldTown.
Пример:
SM_OldTown_WallA_A
SM_Castle_WallA_Doorway_A
SM_Port_WallA_Window_A
SM_WallB_A
SM_WallB_Doorway_400x400_A
SM_WallB_Window_200x400_A
В текущей сцене я предпочел делить варианты конструктора по высоте стен.
Таким образом мы легко найдем нужный объект, который точно пристыкуется к нужной стене.🤩
#Env1
Следующей итерацией после общего блокинга сцены идет более детальное построение модульного конструктора с учетом всех размеров. На скрине я пересобрал сцену уже из конструктора.
В геймдеве обычно используются размеры модулей кратные двойке (2x2, 4x2, 2x6 и т.д. ) Делается это для того, чтобы мы могли развернуть модуль и спокойно затайлить его текстуры по двум осям.
Если высота модуля будет не кратная 2 и если между этажами нет каких-нибудь бордюров или карнизов, нормально затайлить текстуры, не прибегая к трюкам отзеркаливания UV уже не получится. (См. скрины. Я использую тексель для первого лица 1024/м.)
Поскольку я старался максимально приблизиться к референсу, размеры модулей получились не совсем удобные по высоте: 3м, 3.5м и 4.5м. Да и разбиение на материалы довольно сложное, относительно разности высот соседних модулей (На рефе во многих местах видно, как один материал "перетекает" с одного модуля в другой, у которого отличается высота, а соответственно и положение UV)
Я буду использовать Triplanar mapping. Шейдер получится сложнее и дороже, но зато решит проблему разных по высоте модулей и позволит сохранить интересную композицию сцены
Пара слов про нейминг. Тема на которую постоянно ведутся споры.
Для себя я выработал такую схему:
ТИП_НазваниеКонструктора_НазваниеОбъектаИВариантКонструктора_*ДополнительноеНазвание*_*РазмерМодуля*_ВариантОбъекта.
Я опустил "НазваниеКонструктора" так как у меня всего одна сцена. В реальном продакшене название относилось бы к текущей локации, например Venice, Port или OldTown.
Пример:
SM_OldTown_WallA_A
SM_Castle_WallA_Doorway_A
SM_Port_WallA_Window_A
SM_WallB_A
SM_WallB_Doorway_400x400_A
SM_WallB_Window_200x400_A
В текущей сцене я предпочел делить варианты конструктора по высоте стен.
Таким образом мы легко найдем нужный объект, который точно пристыкуется к нужной стене.
#Env1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥27👍9⚡4
Чистовые модули🤩
На данном этапе приступаю к чистовому моделированию модулей. Разбиваю их на части:
🔹Тайлы
🔹Тримы
🔹Атласы с уникальными частями
И тут сказалась инерция старого подхода...
Долгое время я работал по пайплайну (да и сейчас работаю на мобилках по нему же) с повсеместным использованием тримов, corner decal'ей и прочей мишуры для оптимизации геометрии. Но судя по последним AAA играм, в большинстве случаев это больше не актуально🤔 Особенно с нанитом и люменом. Мне до сих пор кажется, что я делаю что-то не то, когда вместо запечки можно просто бахнуть геометрии и все будет так же хорошо работать.
Я начал деталить модули по старому пайплайну, даже накидал трим (скрин 1), но после его теста понял, что проигрываю в качестве современным AAA.
Поэтому, я изменил подход: беру базовые части отмосток окон и дверей (скрин 2), скульпчу их и запекаю в атлас, сохраняя тексель 1024/м. Далее идет магия с тайловыми текстурами и масками, но об этом расскажу на соответствующем этапе🤫
#Env1
На данном этапе приступаю к чистовому моделированию модулей. Разбиваю их на части:
🔹Тайлы
🔹Тримы
🔹Атласы с уникальными частями
И тут сказалась инерция старого подхода...
Долгое время я работал по пайплайну (да и сейчас работаю на мобилках по нему же) с повсеместным использованием тримов, corner decal'ей и прочей мишуры для оптимизации геометрии. Но судя по последним AAA играм, в большинстве случаев это больше не актуально
Я начал деталить модули по старому пайплайну, даже накидал трим (скрин 1), но после его теста понял, что проигрываю в качестве современным AAA.
Поэтому, я изменил подход: беру базовые части отмосток окон и дверей (скрин 2), скульпчу их и запекаю в атлас, сохраняя тексель 1024/м. Далее идет магия с тайловыми текстурами и масками, но об этом расскажу на соответствующем этапе
#Env1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👍4👏1
Помните я Ниву моделил?
Так вот, за пару недель я написал скрипты взаимодействия с объектами, джоинты (двери, крышка багажника и т.п.), искал ассеты для подвески и разбирался со звуком.
Пока искал подвеску вспомнил, что очень давно делал свою примитивную систему (на гифках). Думал взять ее, но понял, что она кажется уж слишком аркадной, поэтому я купил ассет WheelController3D. Вот он уже идеально вписался. Настроил "новые колеса" написал контроллер авто и... В общем, зацените первое видео, вроде круто выглядит!🤩 Только звук включите.
Так же я впервые для себя открыл FMOD. Ранее я его боялся, что ли😀 но оказалось, что работа со звуком в движке может быть легкой и приятной. Если не пробовали FMOD, это оно, пробуйте! Жаль сейчас не та стадия проекта, чтоб заниматься звуком❤️
С базовым управлением авто я почти закончил, осталось докрутить ручник и можно двигать дальше. А дальше — инвентарь. Ранее мне не приходилось его писать, но думаю будет интересно!
Я давно не проводил #ScreenshotSaturday🤩
Показывайте свои проекты!
#DCWD
Так вот, за пару недель я написал скрипты взаимодействия с объектами, джоинты (двери, крышка багажника и т.п.), искал ассеты для подвески и разбирался со звуком.
Пока искал подвеску вспомнил, что очень давно делал свою примитивную систему (на гифках). Думал взять ее, но понял, что она кажется уж слишком аркадной, поэтому я купил ассет WheelController3D. Вот он уже идеально вписался. Настроил "новые колеса" написал контроллер авто и... В общем, зацените первое видео, вроде круто выглядит!
Так же я впервые для себя открыл FMOD. Ранее я его боялся, что ли
С базовым управлением авто я почти закончил, осталось докрутить ручник и можно двигать дальше. А дальше — инвентарь. Ранее мне не приходилось его писать, но думаю будет интересно!
Я давно не проводил #ScreenshotSaturday
Показывайте свои проекты!
#DCWD
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤22👍2🔥2
Визуального апдейта по сцене сегодня не будет.🥺
Выходные прошли в поисках и экспериментах: пытался разобраться, что печь и с какими объектами компоновать. Например, делать окна вместе со стеной или отдельно? Если отдельно, получается много разных объектов, лишние дроуколлы — не оптимизированно... Но есть же ISMы и HISMы.
Поэтому, расскажу вам немного технухи. Для инди разрабов будет полезно!🤗
ISM — Instanced Static Mesh.
Плюсы:
- Рендерит скомпонованные объекты в ISM в 1 дроуколл.
Минусы:
- Нельзя использовать vertex paint. (Но по инстанс id и world position можно разнообразить объекты)
- Один LOD на все объекты.
- Рендерятся все ISMы сразу, даже если уголок одного из них попал в кадр. То есть, не имеет фруструм куллинга на уровне инстанса.
Если и использовать ISMы, то только на объектах, которые явно рендеряться вместе: шкаф с книгами, посудой, мусорный контейнер, где вокруг много одинаковых мэшей мусора, и т.п.
HISM. Hierarchical Instanced Static Mesh. Почти тоже самое, но чуть более сложное и с плюсами:
- Имеет фруструм куллинг на уровне инстанса.
- LODы работают так же, как и на обычном статик мэше.
Например, Foliage Tool работает как HISM. Поэтому можно засаживать растительностью огромные куски локации. То, что не попадает в поле видимости камеры рендериться не будет.
Туда же можно определить фонарные столбы, деревья, лавочки и т.п.
Короче, в ISM и HISM стоит запихивать чисто визуальные объекты без интерактива.
Надеюсь вам будет полезна данная информация.❤️
В своей сцене я планирую использовать именно HISM для окон.
Выходные прошли в поисках и экспериментах: пытался разобраться, что печь и с какими объектами компоновать. Например, делать окна вместе со стеной или отдельно? Если отдельно, получается много разных объектов, лишние дроуколлы — не оптимизированно... Но есть же ISMы и HISMы.
Поэтому, расскажу вам немного технухи. Для инди разрабов будет полезно!
ISM — Instanced Static Mesh.
Плюсы:
- Рендерит скомпонованные объекты в ISM в 1 дроуколл.
Минусы:
- Нельзя использовать vertex paint. (Но по инстанс id и world position можно разнообразить объекты)
- Один LOD на все объекты.
- Рендерятся все ISMы сразу, даже если уголок одного из них попал в кадр. То есть, не имеет фруструм куллинга на уровне инстанса.
Если и использовать ISMы, то только на объектах, которые явно рендеряться вместе: шкаф с книгами, посудой, мусорный контейнер, где вокруг много одинаковых мэшей мусора, и т.п.
HISM. Hierarchical Instanced Static Mesh. Почти тоже самое, но чуть более сложное и с плюсами:
- Имеет фруструм куллинг на уровне инстанса.
- LODы работают так же, как и на обычном статик мэше.
Например, Foliage Tool работает как HISM. Поэтому можно засаживать растительностью огромные куски локации. То, что не попадает в поле видимости камеры рендериться не будет.
Туда же можно определить фонарные столбы, деревья, лавочки и т.п.
Короче, в ISM и HISM стоит запихивать чисто визуальные объекты без интерактива.
Надеюсь вам будет полезна данная информация.
В своей сцене я планирую использовать именно HISM для окон.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16❤🔥6👏2❤1
Я почти отказался от идеи сетевой части проекта...
Берете указательный палец и большой палец, желательно свои, и сужаете их до минимального просвета. Примерно на таком расстоянии я был от момента бросить идею сетевой игры и сосредоточиться на синглплеере. Пока пальцы не разжимаем, вероятность оставить только сингл крайне велика, однако кооп пока спасает одна идея. Вернёмся к ней через пару строк.
Поскольку я старался создать игру более иммерсивной, было решено добавить физические двери, капот, багажник. Чтоб как в жизни: открыл дверь, сел за руль, закрыл дверь. Забыл закрыть дверь, багажник — они болтаются, отрываются и т д. Ну, вы видели результат в предыдущем ролике.
И если в сингле сделать это не сложно, то вот в мультиплеере начинаются приключения:
Кто открыл дверь? Все игроки получили апдейт, что дверь открыта? А коллайдер для выхода из авто выключен у всех, кроме того, кто сел на сидение? А сидение занято или свободно? А кто вообще сел на сидение?..
И это только вершина...
А теперь о том, что на данный момент спасает кооп.
Я решил упростить все это дело до банального взаимодействия: навёл на дверь, нажал кнопку и ты в машине. Никаких физически открываемых дверей, багажников и капота — только анимации. Это решит массу проблем с синхронизацией физики и других неочевидных моментов
Разработка в соло это постоянный поиск компромиссов. Да, можно потратить кучу времени и сделать круто, красиво, супер иммерсивно. А можно просто сделать игру хорошо и релизнуть ее.
Берете указательный палец и большой палец, желательно свои, и сужаете их до минимального просвета. Примерно на таком расстоянии я был от момента бросить идею сетевой игры и сосредоточиться на синглплеере. Пока пальцы не разжимаем, вероятность оставить только сингл крайне велика, однако кооп пока спасает одна идея. Вернёмся к ней через пару строк.
Поскольку я старался создать игру более иммерсивной, было решено добавить физические двери, капот, багажник. Чтоб как в жизни: открыл дверь, сел за руль, закрыл дверь. Забыл закрыть дверь, багажник — они болтаются, отрываются и т д. Ну, вы видели результат в предыдущем ролике.
И если в сингле сделать это не сложно, то вот в мультиплеере начинаются приключения:
Кто открыл дверь? Все игроки получили апдейт, что дверь открыта? А коллайдер для выхода из авто выключен у всех, кроме того, кто сел на сидение? А сидение занято или свободно? А кто вообще сел на сидение?..
И это только вершина...
А теперь о том, что на данный момент спасает кооп.
Я решил упростить все это дело до банального взаимодействия: навёл на дверь, нажал кнопку и ты в машине. Никаких физически открываемых дверей, багажников и капота — только анимации. Это решит массу проблем с синхронизацией физики и других неочевидных моментов
Разработка в соло это постоянный поиск компромиссов. Да, можно потратить кучу времени и сделать круто, красиво, супер иммерсивно. А можно просто сделать игру хорошо и релизнуть ее.
❤16💔3🤓2💯1
Думали апдейта не будет?
Не успевал за выходные подготовить материал😐 , но теперь он здесь. Оказывается, сложновато тянуть сразу три проекта: работу, энвиру и игру.😀 Но возможно, хотя и с задержками по апдейту. Поехали!
🔸Делим энвиру на тримы и атласы🔸
Тут будет ключевой момент, не пропустите.
Нам необходимо разделить геометрию сцены на запечку и тайлы. Поскольку у нас много разных окон и бетонных частей я решил разделить запечку на 2 атласа:
🔹Деревянный атлас: оконные рамы, ставни.
🔹Бетонный атлас (их будет 2): части вокруг окон, колонны. И второй это тримы крыши и балкон. Хотел балкон запихнуть в первый атлас, но тогда не смогу попасть в тексель (1024\м) по нормалке.
В построении любой энвиры необходимо минимизировать дроуколлы и время на ее построение. Скульптить каждое уникальное окно и запекать его в уникальную текстуру не имеет смысла. Из готовых атласов я смогу собрать любое окно для сцены.
Как определить, что именно нужно скульптить?
На примере атласа бетона.
Поскольку ранее мы сделали блокинг модулей мы легко можем понять из каких общих частей состоят окна. Все что нам нужно, это выделить пару (чтоб сильно не бросалась повторяемость) уникальных частей. По сути, нам нужно заскульптить около 8 объектов. Маленькое окно можно собрать из тех же "палок".
Я старался делать скульпт максимально невыразительным, чтобы при копировании окна не палилась повторяемость. Все детали добавим уже в шейдере.
После скульпта перепекаем все на лоу-поли, текстурим и уже из лоупли собираем нужный объект.
На скрине тест нормалки без каких-либо других текстур
#Env1
Не успевал за выходные подготовить материал
🔸Делим энвиру на тримы и атласы🔸
Тут будет ключевой момент, не пропустите.
Нам необходимо разделить геометрию сцены на запечку и тайлы. Поскольку у нас много разных окон и бетонных частей я решил разделить запечку на 2 атласа:
🔹Деревянный атлас: оконные рамы, ставни.
🔹Бетонный атлас (их будет 2): части вокруг окон, колонны. И второй это тримы крыши и балкон. Хотел балкон запихнуть в первый атлас, но тогда не смогу попасть в тексель (1024\м) по нормалке.
В построении любой энвиры необходимо минимизировать дроуколлы и время на ее построение. Скульптить каждое уникальное окно и запекать его в уникальную текстуру не имеет смысла. Из готовых атласов я смогу собрать любое окно для сцены.
Как определить, что именно нужно скульптить?
На примере атласа бетона.
Поскольку ранее мы сделали блокинг модулей мы легко можем понять из каких общих частей состоят окна. Все что нам нужно, это выделить пару (чтоб сильно не бросалась повторяемость) уникальных частей. По сути, нам нужно заскульптить около 8 объектов. Маленькое окно можно собрать из тех же "палок".
Я старался делать скульпт максимально невыразительным, чтобы при копировании окна не палилась повторяемость. Все детали добавим уже в шейдере.
После скульпта перепекаем все на лоу-поли, текстурим и уже из лоупли собираем нужный объект.
На скрине тест нормалки без каких-либо других текстур
#Env1
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13✍3👍3❤1👏1
Иногда ловлю себя на мысли, что вот хочется что-то показать-рассказать, а потом думаю: "да нахера это нужно, ребята и так это знают" Но ведь это типичное когнитивное искажение. Со временем многие рабочие моменты кажутся мне очевидными, но на деле очевидны они только для меня. Стараюсь это осознавать и потихоньку исправляться ❤️
Сегодня расскажу вам про одну деталь грамотной запечки нормалей.🤩
Наверняка у вас был такой момент, что вы развернули модель, запекли и вроде все запеклось нормально, но в движке все равно что-то не то. Вы открываете нормалку, а там, где должна быть плоскость, какой-то градиент. Так вот, на плоскости градиентов быть не должно!
Градиенты получаются из-за того, что поверхность на которую вы запекаете хайполи не является 100% плоскостью. И это нормально, харды делаются до 45 градусов.
Чтоб избавиться от градиентов, используйте Weighted Normal на лоу-поли перед запечкой. (см. скриншот)
Таким образом нормалка выйдет идеальной, а вы — на шаг ближе к мидлу🥳
Сегодня расскажу вам про одну деталь грамотной запечки нормалей.
Наверняка у вас был такой момент, что вы развернули модель, запекли и вроде все запеклось нормально, но в движке все равно что-то не то. Вы открываете нормалку, а там, где должна быть плоскость, какой-то градиент. Так вот, на плоскости градиентов быть не должно!
Градиенты получаются из-за того, что поверхность на которую вы запекаете хайполи не является 100% плоскостью. И это нормально, харды делаются до 45 градусов.
Чтоб избавиться от градиентов, используйте Weighted Normal на лоу-поли перед запечкой. (см. скриншот)
Таким образом нормалка выйдет идеальной, а вы — на шаг ближе к мидлу
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥23❤7✍5
Продолжил собирать из атласа остальные деревянные части.
У меня оставалось немного места на UV и я впихнул на тот же атлас металлические замки на ставни.
Закончил почти все окна и продолжил дорабатывать мастер-материал.
Следующим шагом хочу сделать тримы на карнизы и балкон
#Env1
У меня оставалось немного места на UV и я впихнул на тот же атлас металлические замки на ставни.
Закончил почти все окна и продолжил дорабатывать мастер-материал.
Следующим шагом хочу сделать тримы на карнизы и балкон
#Env1
👍24⚡1🔥1
На выходных закончил балкон и один из карнизов.
Пока пытаюсь миксовать подходы с текстурированием прямо в анриле через маски и в пэинтере по слоям.
Дописал шейдер, чтоб можно было использовать и тот и другой подходы, так как крупные формы не уложишь в тексель 1024\м, а тримы прекрасно "текстурятся" и в пэинтере и выглядят интереснее
#Env1
Пока пытаюсь миксовать подходы с текстурированием прямо в анриле через маски и в пэинтере по слоям.
Дописал шейдер, чтоб можно было использовать и тот и другой подходы, так как крупные формы не уложишь в тексель 1024\м, а тримы прекрасно "текстурятся" и в пэинтере и выглядят интереснее
#Env1
10🔥16❤5👍5