Как формируются .generated.h и .gen.cpp.
Как подставляются макросы, кои являются основой для работы Рефлексии.
Как UHT генерирует эти файлы, откуда берутся модули, пакеты, файлы в них.
Какие зависимости, классы и структуры позволяют рефлексии работать.
Немного затронем виртуальную машину.
резерв #2
A Deep Dive into Nanite Virtualized Geometry

Не ожидал тут свои ролики увидеть. Как говорится - пустячок, а приятно.
Kemanorel
На русском мало годных гайдов, в основном у кого то копипастят и ничего не объясняют ну типа как перевод. А у вас вроде бы нужный разговорный формат, это редкость.
Официальный новый видос по нанитам

Другой

18 байт на один импортированный треугольник https://youtu.be/TMorJX3Nj6U?si=MAjh0_Vuf3cvJw00&t=8286
2:18
Процедурных мешей под наниты(или процедурных нанитов под процедурные меши) вероятно не будет никогда, потому что он не знает как это сделать.
Посмотрел первый видос. Когда-то я тоже хотел все оптимизировать, а потом оказалось что зря время потратил и пришлось всё равно брать оригиналы.
Оптимизировать нужно уже после того как уровень собран и ничего не изменится. Оптимизировать отдельные ассеты (текстуры, модели) бессмысленно. Поэтому эпики не дали возможность в реалтайме регулировать размер текстур - нужно использовать стриминг и VT.
Blueprint
Вот поэтому львиная доля современных игр и работают в 30 фпс, и то не всегда. Т.к. про оптимизацию вспоминают под конец и понимая что для оптимизации нужно переделать пол игры, забивают на неё болт.
Kemanorel
Решать проблемы нужно когда они появляются. Оптимизировать нужно комплексно, а не отдельные камушки. Ну будет такое камушек лежать одинокий, его оптимизация отняла 40 минут, а ничего толком не дала. Время потрачено зря.
Вон есть наниты с виртуальными текстурами - это стриминг данных. Нужно хотя-бы изучить движок и почитать документацию чтобы не страдать подобной фигнёй.
Blueprint
> Вон есть наниты с виртуальными текстурами
Я это фашистское зло отключил. Долго мучился с багами из-за которых проект вылетает через 2-5 минут игры. Все перепробовал, помогло только отключение виртуальных текстур в проекте, как итог теперь все стабильно и видеопамять работает нормально и текстурный пул отлично функционирует и люмен отличный. Или плагин воды с ними неправильно работает или погоды, так и не понял. Пробовал в разных версиях и разных компах. Либо вылеты либо забивают видеопамять либо ошибки в сторонних материалах.
Наниты и виртуальные текстуры новые технологии которые требуют DX12, и они криво работают с уже готовыми ассетами которых в маркете дофига. То есть при всем желании их нереально внедрить в проект в данный момент. Захожу в модель, включаю галочку наниты (бац и вылет) или ошибка в материале.
Blueprint
> Оптимизировать нужно уже после того как уровень собран и ничего не изменится. Оптимизировать отдельные ассеты (текстуры, модели) бессмысленно.
Именно. В проекте много чего может поменяться, в том числе нужно будет опять импортировать свежую версию ассета например которая перезапишет изменения.
Blueprint
> Поэтому эпики не дали возможность в реалтайме регулировать размер текстур - нужно использовать стриминг и VT.
Я все таки надеюсь что какой то механизм динамически менять текстуры есть вроде текстурных групп и их max load bias. Иначе непонятно как в настройках переключаться между 4K текстурами для RTX 4090 и 1K для gtx 1080.
Blueprint
Ролик 14 минут, выкиньте из него время на объяснение останется от силы минуты 3, где вы тут 40 нашли, не представляю.
manking
гонял нанит и тесселяцию в 5.4 в хвост и гриву ни каких вылетов, мб повезло.
В проекте что угодно может меняться, но что мешает сразу делать модели, текстуры оптимизированными, а не оставлять не потом?
Что касается разрешения текстур. Есть варианты делать текстуры разного разрешение и в логике материала их указывать разные, для разных настроек качества.
Альтернатива сделать свою функцию расчёта миплевела и ограничивать максимальный миплевел.
Я делал работает, но тесты пока странные всё равно вылезает сообщение и переполнение пула текстур, что странно.
Kemanorel
> гонял нанит и тесселяцию в 5.4 в хвост и гриву ни каких вылетов, мб повезло.
Тут проблемы с плагинами и ассетами. Много классных ассетов созданы с 2016 по 2021 годы и вот у них там с материалами, лодами и еще много c чем проблемы, предупреждения, ошибки выводятся.
Kemanorel
> В проекте что угодно может меняться, но что мешает сразу делать модели, текстуры оптимизированными, а не оставлять не потом?
Ну лично мне проще выделить неделю две три на оптимизацию и ей конкретно заняться чтобы комплексно отоптимизировать все на уровне. То есть получить статистику самых крупных текстур и мешей и их уже ужать, а остальные не трогать.
Kemanorel
> Что касается разрешения текстур. Есть варианты делать текстуры разного разрешение и в логике материала их указывать разные, для разных настроек качества.
Не вариант для инди. Допустим в 1 ассете может быть 5 материалов, таких ассетов 100 штук. 500 сложных программируемых материалов с 1000-2000 текстур.
Kemanorel
> Альтернатива сделать свою функцию расчёта миплевела и ограничивать максимальный миплевел.
> Я делал работает, но тесты пока странные всё равно вылезает сообщение и переполнение пула текстур, что странно.
А это в какую сторону копать? Нету видео или материалов? Одна из немногих проблем которые пока не могу решить.
Пришлось 8K,4K текстуры ужимать до 2K или даже 1K, чтобы на моей RTX 3080 с 10GB уровень влез.
Но в душе тяжело... Ведь есть RTX 4090, будет RTX 5090-6090, там проблем с видеопамятью не будет, там нет проблем 4K текстуры рендерить, а я в текстурах уже ограничил max size. Хотелось бы иметь переключатель качества текстур в меню.
manking
Никаких видео про расчёт миплевела в свое время не находил, в итоге написал свою функцию она не сложная. А потом выяснилось что функция есть в материалах от разработчиков ComupeMipLevel правда с ошибкой. Можете поэкспериментировать. Само собой в текстурных семплерах включать MipLevel (absolute,0 is full resolution).
Собственно у меня и цель то была что бы при разных настройках графики ограничить загрузку 0 самого толстого миплевела. И хотя функция работала у меня действительно не использовался 0 мип но всё равно выдавало сообщение о переполнении пула текстур, что странно.
Получается ComputeMipLevel рассчитает какой mip level выставить конкретной текстуре(имея текстуру и размеры ее на экране)?
А где можно менять этот mip level?
Только делая параметр в инстансе материала для каждой текстуры и затем меняя его в material instance dynamic?
Вот есть актор, у актора есть static mesh, skeletal mesh и у них много разных материалов с текстурами. Я могу как то получить все текстуры актора и для них выставить mip level принудительно пройдясь по каждой текстуре (то есть избежав изменения исходных блюпринтов и материалов в этом акторе из ассета)?
Тема в архиве.