Нейронные текстуры и Нейронные материалы

Сейчас активно пошли слухи, что новые консоли не смогут увеличить число RAM и vRAM на PS6 и Хbox: Helix - и теперь активно смотрят на нейронные текстуры и материалы и как бы им их у себя активно использовать.
А значит... значит мне, в смысле вам всем нужно в этом разобраться!

Нейронные текстуры и Нейронные материалы

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

В этой статье я опирался в первую очередь на материалы NVIDIA, хотя АМД тоже двигается в этом направление, хоть и с отставанием в пару лет:

Нейронные текстуры и Нейронные материалы

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

Так и Интел представило свое решение для Нейронного сжатия, где предлагают решение нейронной компрессии в 9 раз с отклонением в 5% от исходной текстуры и компрессию в 20 раз с визуальным отклонением в 20%

Нейронные текстуры и Нейронные материалы

Принцип реализуемый в железе будет тот же самый. Да и Vulcan и Direct X с 2025го разработали совместно с NVIDIA единое кроссплатформенное Api по работе с нейронками на тензорных ядрах.

Итак начнем?

Почему Нейросети?

На самом деле объяснение тут до предела простое. Вы знали что та же NVIDIA буквально напихала в наши видеокарты тензорные ядра которые в 90% а то и 100% времени буквально просто простаивают и грустят?

Да да - DLSS используется лишь на небольшой % работы в конце сборки отложенного рендера что "улучшить" кадр.

Примерная схема грустного видеочипа которому нечем заняться. 
Примерная схема грустного видеочипа которому нечем заняться. 

Да да - так как из за того Видеокарты сегодня поставляют в первую очередь Дата Центрам и нам скидывают отбраковку... то на них много тензорных ядер которые занимают значительный процент поверхности видео чипа. Так что возникает логичный вопрос - почему бы им эти простаивающие мощности не задействовать в ренедринге?

Нейронные текстуры и Нейронные материалы

Хотя в классическом рендер пайплайне - эти тензорные модули почти нигде не используются... разве что в РТ считать отражения лучей.

Но что такое тензоры и чем они отличаются от CUDA ядер?

Скаляр, вектор, матрица, тензор - это все понятия из высшей математики которую вы скорее всего не знаете, если не учились в физ мате как я. Но разъяснить на пальцах что такое тензор нужно:

Щас будет капелька курса по высшей математики

Если кратко - это многомерный массив чисел:

Нейронные текстуры и Нейронные материалы

Можно считать что обычное число, оно же скаляр - это нульмерный тензор. Вектор, это же набор из последовательных чисел, это одомерный тензор. Матрицы - это 2х мерный тензор, Дальше тензоры считаются по N-размерности - сколько индексов есть у его внутренних значений:

Нейронные текстуры и Нейронные материалы
Нейронные текстуры и Нейронные материалы

И вот тут мы подходим к тому что такое Тензорные ядра и зачем они нужны. На самом деле все просто. Это кусок кристалла изначально созданный под выполнение математической операции с переумножением матриц за один такт (проход сигнала).

Нейронные текстуры и Нейронные материалы

В то время как обычному ядру придется долго и муторно перемножать каждый индекс в отдельном такте, записывать в память и лишь в финале после кучи тактов выдать результат. То тензорные ядра в GPU изначально хорошо справляются с переумножением тензоров состоящих из матриц:

Нейронные текстуры и Нейронные материалы

Более ранние CUDA ядра справлялись только с матрицами, скалярами и векторами.

И вот эти вот ядра - простаивают. (кроме тех у кого включен DLSS)

Какие то матрицы, тензоры. Возможно вы спросите - при чем тут нейросети?

Нейронные текстуры и Нейронные материалы

А при том что каждый "нейрон" в цифровой неросети (живые мозги это совсем иная тема) - это не более чем "набор" коэффициентов (у тензоров), которые определяют изменение входного сигнала и передачу его на выход.

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

Обучение нейросети это буквально числодробилка, пока не "подберет" результат который пройдет отбор. Живые мозги обучаются совсем по другому перестраивая свою структуру.

Классический инженерный подход заключается в осознание проблемы, подбора решения в виде кода которое мы можем понять!

Нейронные текстуры и Нейронные материалы

Но!
Иногда мы не знаем решения(слишком много работы или выше нашей квалификации). Не знаем сколько решений всего может быть. Иногда решения оказываются слишком дорогие что бы использовать. Зато тут все честно.

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

Нейронные текстуры и Нейронные материалы

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

Нейронные текстуры и Нейронные материалы

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

Нейронные текстуры и Нейронные материалы

Но!
Не заставляйте черный ящик учится на том что вы можете быстро и дешево реализовать в коде ручками. Тщательно отбирайте данные.

Итак - вернемся к тензорам и тензорным ядрам. Итак у них простой.. Итак на что их можно пустить?

Нейронные текстуры и Нейронные материалы

Что же список довольно большой:

  • Это компрессия текстур.
  • Это компрессия BRDF формулы из шейдерных инструкций.
  • Это достройка недостающей геометрии на основе облака точек(фотограмметрии)
  • Это кэширование освещения
  • И вопрос отскока лучей в рейтрейсинге.
  • А еще физика, анимация и многое прочие...
Нейронные текстуры и Нейронные материалы

Сегодня я намереваюсь разобрать только первые 2 пункта. Вопрос "нейро" Текстур и "нейро" Материала.

Что такое NTC или нейронное сжатие текстур?

*NTC -> Нейронная Компрессия Текстур

Это в своей сути общее название методов упаковки текстур с помощью машинного обучения в небольщие нейросети на малом числе параметров и последующей в GPU распаковки текстуры с минимальной потерей данных.

Нейронные текстуры и Нейронные материалы

В данном случае - это банальное быстрое "архивирование данных" с целью СЖАТИЯ данных и быстрой распаковкой

(собственно как и любую БЯМ или диффуззионную модель ИИ можно назвать архиватором интернета с большим % потери даннх )

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

Да у нас есть уже используемые алгоритмы сжатия данных текстур как BC7, Jpeg XL и многие другие... которые выполняют эти функции.

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

Слева результат распаковки в 256х256 пикселей. А справа "сжатая латентная текстура " 32х32 пикселя.

Нейронные текстуры и Нейронные материалы

*хотя на самом деле хоть латентная текстура использует всего 32 пикселя - число параметров у нее гораздо больше 4х привычных каналов. Так что технически ее вполне можно представить в виде списка массива из обычных RGBA массивов.

Нейронные текстуры и Нейронные материалы

Итак - что бы NTC работал и не был как плохие "дегенерационные" решения - он должен обладать следующими свойствами:

  • Детеменизм. Распаковка нейротектуры должна давать один и тот же результат всегда и везде. Температуры(рандомизации результата) у нейросети в данном вопросе не должно быть. Его задача не "генерировать" новый контент - а разархимировать уже запомненный.
  • Для восстановления нужно использовать довольно простую нейросеть, что не будет тратить много милисекунд на работу. Нейроны и нейросеть должны быть простыми. Всего пара(десятков) параметров а не миллиарды как у БЯМ. По сути идет размен "большой готовой текстуры" на VRAM на "вычисления в тензорных ядрах" (которые все равно простаивали) для распаковки.

Так Neural Texture Compression (NTC) у НВИДИА - должно хорошо справляться с 2х слойными BRDF материалами на основе Disney PBR.

До 16 каналов разных текстур могут быть сжаты в один набор текстур NTC. Впрочем обычно PBR-материалы имеют 9–10 каналов: 3x альбедо, 3x нормали, металличность, шероховатость, окклюзия окружающей среды, непрозрачность.

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

Для распаковки же NTC использует следующие вещи:

1.Latent map

2. Набор коэффициентов(веса) MLP.

3. UV "частотные градиенты":

Нейронные текстуры и Нейронные материалы

Или в виде визуала:

Нейронные текстуры и Нейронные материалы

И восстановление данных идет примерно так:

Нейронные текстуры и Нейронные материалы

В определенном смысле можно рассматривать "нейронные текстурирование" на GPU как сначала процесс перебора в поисках идеального или оптимального способа "архивирования" данных лучше чем универсальный способ алгоритма BC7 для конкретной текстуры с конкретными узорами, что в итоге должно дать примерно 8х качество распаковки.

Нейронные текстуры и Нейронные материалы

Для распаковки текселей текстуры с помощью NTC необходимо считать скрытые данные, соответствующие заданной текстурной координате, а затем выполнить операцию вывода, пропустив их через небольшую сеть многослойных перцептронов (MLP), чьи веса которой определяются во время сжатия и сохраняются как часть сжатого пакета.

Для обучения NTC - нам нужен рефенс с очень высоким качеством материала и текстур. То есть условные 8к текстуры в ходе обучения будут сжаты во много раз. И эти 8к нужно будет НАРИСОВАТЬ. РУЧКАМИ.(Ну или сгенерировать процедурно) В хорошем качестве

Стандартный набор PBR текстур сделанных по модели Disney PBR 2012го
Стандартный набор PBR текстур сделанных по модели Disney PBR 2012го

То есть это не та технология что рисует за вас. рекомендую ознакомится вот с этим роликом: 2:36 по 2:54

где показано как именно упаковывается текстура:Наоборот вам самим сначала подготовить текстуры 8-16к прежде чем их упакуют.

Нейронные текстуры и Нейронные материалы
Нейронные текстуры и Нейронные материалы

Но за сколько упакует? Из статьи NVIDIA следует пример:

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

Для сжатия MLP учится работать сразу со всеми типами PBR текстур включая MIP карты и учится выявлять характерные взаимодействия:

*Хотя для Дифузионных (де)генеративных сетей воспрос "воспроизведения" исходного изображения - это как раз то до чего доводить не стараются, ибо им нужно поддерживать миф что нейросети "учатся как люди" и "внутри них копий не хранится". Хотя очевидно что они просто заархивировали интернет и хранят и смешивают нелинейно данные из него в ином формате: в виде весов коэффициентов и сигналов. Да еще и с большой ошибкой:

Плагиат- на лицо :D 
Плагиат- на лицо :D 

то в случае MLP и NTC задача именно ЭТА! Максимально точная упаковка данных с минимум потерь!

Реализация компрессии NVIDIA в МLP и latent map для материала с разрешением до 8192 × 8192 (8k) на NVIDIA RTX 4090 может занять время. Что бы переработать стандартный Disney PBR в 9-канальную в ходе компрессии латентную карту на 4k разрешения на графическом процессоре потребуется примерно от 3 до 15 минут, в зависимости от желаемого уровня качества и изначальной сложности текстуры.

Обучение будет тем лучше и быстрее - чем больше данные на разных текстурах PBR синхронизированны между собой.

А вот как выглядит разница между BC7 компрессии и нейронной? На более удобном примере? От NVIDIA:

*BC7 - это сокращение "Блоковая Компрессия" название алгоритма упрощения текстуры. Циферка означает номер алгоритма. В зависимости от цифры применяются разные типы упрощений

Почитать про блоковую компрессию можно тут:

Так вот - типичное сжатие Bc7: 970 мгб текстурного пространства

Нейронные текстуры и Нейронные материалы

А вот тоже самое на NTC с тем же размером текстур:

Нейронные текстуры и Нейронные материалы

Итак что мы увидим если сравнить?

Нейронные текстуры и Нейронные материалы

Честно - вижу что слегка меняется тон стола - и у него появляется более заметная текстура древесины. (Впрочем тут думаю вина исходного видео NVIDIA-которое было выложено в 1080p.)

Но можно ли чего то похожего добиться схожего и без MLP?
Можно! Для этого еще во времена Unreal первого было придумано решение: "детальная текстура" которая добавляет детализации при приближении игрока к ней, вот решение для Ue4/5:

Нейронные текстуры и Нейронные материалы

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

Вот стандартная текстура BC: Обратим внимание на красный участок....

Нейронные текстуры и Нейронные материалы

Что бы он был детальным - нужно в разы Большая текстура, раз этак в 15.

Нейронные текстуры и Нейронные материалы

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

Нейронные текстуры и Нейронные материалы

В целом можно резюмировать что в своей сути в Текстурной компрессии нет ничего плохого. Это не дегенерационные генераторы мусора которые создают нечто полупереваренное из поглощенного. Текстурная компрессия NTC Должна воспроизводить ровно одну текстуру на которой она и была обучена. Максимально точно. В отличие скажем от DLSS - которую обучали достраивать кадр на основе инстаграмных фоточек и видео...

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

Вот тут например на сине-розовой текстуре показаны: отклонения упаковки от иcходного качественого изображения:

Розовое - это отклонение, фиолетовое - это минимум разницы.
Розовое - это отклонение, фиолетовое - это минимум разницы.

В связи с тем что NTC упаковывает изображение индивидуально - то отклонения будут меньше чем если просто использовать Блоковое сжатие!

Нейронные текстуры и Нейронные материалы
Нейронные текстуры и Нейронные материалы

С другой стороны люди часто ленивы, и считают себя слишком умными и что другие не догадаются об их хитрости и решат "а собственно зачем мне зачем делать текстуру высокого разрешения ручками, если можно засунуть в нанобанан, апскейлнуть через ии на х16 каждую текстурку, а результат потом запустить в NTC? Босс тупой не заметит.
Что же предупрежу что такой подход будет определенно давать БОЛЬШЕ визуальный ошибок, да и коллапс нейросети при обучении более чем возможен. Но увы - многие решат что раз артлид/тех арт не заметит - то и игроки не заметят.

А они таки все заметят, все таки ИИ генерации - обладают своим уникальным частотным "узором" - который перевешивает зачастую исходные данные и которым нейросети обучаются гораздо проще, что приводит к коллапсу обучения. (Вот поэтому ИИ компаниям так кровь из носу нужны чистые человеческие данные, не являющиеся синтетикой)

Можно ли встроить NTC в консоль по умолчанию для любой игры? Правильный ответ: НЕТ. Даже в консоли будут тензорные нейронные ядра - Латентные текстуры должны готовится или на этапе сборке билда игры или даже ранее во время работы над игрой.

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

Чтож в таком виде NVIDIA предложит игру потратить пол часа и распакавать все латентные карты в обычные текстуры с разрешением в 1-2мгб. Игра будет весить больше. А проблемы с подгрузкой текстур вернуться...

Вот Гитхаб НВИДИА с материалами по обучению RTXNTC:

А теперь поговорим про "нейронный матреиал"

Нейронные текстуры и Нейронные материалы

Это следующий шаг который инженерам NVIDIA приходим следом сразу за нейронным сжатием текстур. Что если и поведение света, то есть уравнения BRDF определять "нейронкой", вместо того что бы считать честно?

К счастью для нас - пока этот тип "технологий" пока что еще является экспериментальным и не скоро поселится в игровых движках и станет "стандартом" индустрии. Ведь им так хочется что бы на карточке было БОЛЬШЕ нейронных Тензорных чипов:

Я не хотел вас сразу пугать - но в начале статьи у 40й серии тензорные ядра занимают +_30%, а у 50хх серии уже 60%. Мы могли бы увидеть почти 3х кратный рост производительности в классическом пайплайне - если бы эти мощности целиком были отданы CUDA ядрам!

А что будет на следующей 60xx серии? 
А что будет на следующей 60xx серии? 

Но Дата центры им важнее. Поэтому никакого серьезного роста вычислительной мощности видеокарт начиная с 10й серии мы и не видим...

*Для напоминания что такое BRDF в контексте PBR можно заглянуть сюда:

В общем случае BDRF - Двухлучевая функция отражательной способности, это "формула" реализованная в "шейдере" или материале поверхности - это набор формул и коэффициентов которые описывают как то как поверхность реагирует на прямой и расеяный свет и как она его отражает нам свет в глаз:

Нейронные текстуры и Нейронные материалы

Сегодня в отложенном рендере - финальная картинка собирается из нескольких карт текстур в пространстве экрана:

  • Базовый цвет
  • Металличность
  • Карты Нормалей
  • Амбиент оклюжн
  • Шершавость
  • и прочие.

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

NVIDIA считает что такой проход рендера должен быть более дешевым чем при традиционном расчете результата в CUDA ядрах ...

Впрочем часто проблема многих сложных материалов -

Нейронные текстуры и Нейронные материалы

...что они могут быть СЛИШКОМ сложны для "честного" рендера в реальном времени, состоять из множества слоев, со своими законами:

Шейдеры NVIDIA предлагает писать нам на slang их новом языке шейдеров. 
Шейдеры NVIDIA предлагает писать нам на slang их новом языке шейдеров. 

*Slang - специально созданный язык шейдеров совместимый с разработкой нейронных сетей. Что позволяет учить через MLP и обрабатывать обратное распространение ошибки в нейронных сетях на GPU, без всяких костылей.

Так что NVIDIA прямо предлагает ни в чем себя не ограничивать создавать сложные шейдеры игнорируя число инструкций, а потом использовать нейросеть что бы создавать компрессию шейдерных инструкций в нейроны MLP:

Нейронные текстуры и Нейронные материалы

Нейросеть будет обучается по всем сторонам меша и реакции поверхности на свет под разными углами. (такое должно занять гораздо больше времени чем создание обычной текстурной компрессии)

Вместе с Латентной текстурой на выходе должен получаться и "латентный" код для декодера MLP:

Нейронные текстуры и Нейронные материалы

Подаем BRDF инструкции латентный код, шум UV энкодера, считаем функцию потери - обновляем градиенты нейронов:

И такой подход к "упаковки" шейдера материала даже работает :

Нейронные текстуры и Нейронные материалы

Работает пока размер текстуры финального материала не очень высок:

То что результат НЕ ТОТ -что называется на лицо!
То что результат НЕ ТОТ -что называется на лицо!

На больших значениях разрешения нейронка начинает путаться и коллапсирует, так как правильно упаковать данные из за малого числа параметров. Больший размер текстуры приводит к большему шум на текселях - что мешает выбрать MLP правильные градиенты! Текстура “нейроматериала” становится слишком шумной и мало контраcтной:

Нейронные текстуры и Нейронные материалы

Обучение буквально сломалось!

В результате NVIDIA от единой модели обработки Латентной “нейротекстуры + инструкции” для отказались. Они их разделили. Отдельно нейросеть для упаковки инструкций. Отдельно для компресси. В каждой будет свой набор параметров. Каждая будет обрабатывать сигнал индивидуально. И создали более конкретную нейросеть - которая обучалась на разных BRDF параметрах для работы чисто как материал.

И в которую подают базовые параметры многослойного BRDF слоев OpenPBR:

Нейронные текстуры и Нейронные материалы

Результат определенно вышел лучше.

(Фиолетовый - это хорошо, розовый это плохо!)
(Фиолетовый - это хорошо, розовый это плохо!)

Сколько это может занять времени? на 4090 обучение инструкциям Disney PBR занимает от 10 до 30 секунд:

Вот так выглядит стартовая сцена обучения:

Нейронные текстуры и Нейронные материалы

В центре - случайно инициализированные веса нейросети до старта обучения. Щарик справа - это функция учета градиента ошибки. (там где черное - там провал, где белое - значит соответствует исходнику)

Нейронные текстуры и Нейронные материалы

За 20 секунд нейронка отлично создает нейромодель металлического золотого шарика:

Нейронные текстуры и Нейронные материалы

И при этом 4к текстуры все еще можно отдельно сжать в NTC: Хотя для обучения "MLP" шейдера нужны - исходные детали материала:

Нейронные текстуры и Нейронные материалы
Нейронные текстуры и Нейронные материалы

Так что материал референс и нейронный можно сравнить наглядно:

Быстрым взглядом даже не уловить разницу. Если конечно в материала не используются сильные скосы нормалей, но тут не стали изобретать велосипед - а просто отделили обработку нормалей в обычные инструкции для CUDA ядер.

Нейронные текстуры и Нейронные материалы

(И это интересный аспект который показывает нам что "нейросеть" не более чем математика - и которую мы технически можем понять и выразить в виде более чистых и удобных формул, как работу карт нормалей в нормальном и тангенциальном пространстве)

Ресурс тензорных ядер на нормали решили не тратить сделав ставку на то что в шейдере не нормали будут обрабатываться нормально как мы все и привыкли :D Это избавляет Нейронку необходимости обучаться нелинейным операциям.

Так зачем все это нужно? Зачем мучится с запеканием кода в MLP декодер?

Как уже сказал выше - NVIDIA(да и все остальные) хочет продавать чипы дата центрам. Дата центрам нужны только Тензорыне чипы. Отбраковку с дата центров будут скидывать нам. В классическом рендере тензорные ядра почти не нужны. Но их можно заставить обрабатывать компрессию и ...свет BRDF функции поверхности.

Ну и NVIDIA хочет в "риализм".Так что на тензорных ядрах обратывать не стилизованные материалы - а более сложные и физические точные. При этом обучив нейронку - на выходе получаем "шейдер" с фиксированной длиной обработки в милисекундах работы:

Нейронные текстуры и Нейронные материалы

Так NVIDIA предлагает нам жонглировать размером декодера для обработки материала - чем проще MLP нейронная сеть - тем быстрее будет обработан пиксель материала. Чем сложнее - тем дольше - тем точнее к исходному сложному шейдеру результат.

например для Рейтрейсинга - для отраженных материалов сразу готовить упрощенную версию материала в отражениях.

Нейронные текстуры и Нейронные материалы

Итак реализм: не удивлюсь если скоро NVIDIA сделает библиотеку с нейронными шейдерами в готовом виде для скачивания, что лишит многих техартистов и VFXеров(А вы думали вы в безопасности?) работы с материалом. Уникальный визуал для вашей игры? Забудьте!

Вот примеры нейронных материалов от NVIDIA:

Нейронные текстуры и Нейронные материалы
Нейронные текстуры и Нейронные материалы

Вот так NVIDIA видят разницу между "одно слойный disney PBR" материалом и Нейроным шейдером созданным что бы рендерить сложное поведение пере отражение света в шейдере ткани:

Нейронные текстуры и Нейронные материалы

Из заметный багов в нейронном шейдере - это "шум" особенно если базовый материал имеет много бликов, и шершавости.

Все эти блички будут меняться каждую секунду кадра!
Все эти блички будут меняться каждую секунду кадра!

Что бы избавится от шумовых вспышек размером с пиксель - в пост процесс рендера потребуется добавить МНОГО МЫЛА!
В смысле размытия и суперсэмплинга кадров (как у ДЛСС) что бы сгладить визуальный шум ...

Специалисты NVIDIA проверяют свою нейроетхнологиюю материала 5090... что станет доступно для всех отнюдь не скоро:

Нейронные текстуры и Нейронные материалы

Технически технологий должна сворачивать материал в простую функцию вычисляемую на тензорном ядре - что должно быть довольно довольно быстро. Это может быть полезно ... при реализме аля кино. Где нет динамики. Вопрос возникает только в том как эти нейро технологии войдут в конфликт с технологией ДЛСС - которой тоже нужны Тензорные вычисления.

Опять же тех арт и программисты могут покопаться тут:

Но для игр - нам могут понадобится всякие динамические штуки в текстурах для игр!

И вот тут у пропагандистов брутфорса перебора для подгона коэффициентов возникает проблемма. Это те задачи где не одна нейросеть не справится сходу:

Нейронные текстуры и Нейронные материалы

Сможет ли нейронка сделать пузыри при взбалтывани и поворот жидкости в бутылке как Half Life alух?

(нет это не пропаганда алкоголя РКН!)
(нет это не пропаганда алкоголя РКН!)

Сможет ли правильно работать с динамическими повреждениями на теле персонажа?

Сможет ли нарисовать пену на волне? всплески кругов на воде от капель дождя? Сами потеки дождя?

Нейронные текстуры и Нейронные материалы

Правильный ответ НЕТ, нет и еще раз нет.

Особенно когда мы говорим о небольшой нейронной модели с парой десятков параметров.

Это потребует гораздо больше нейронных параметров для любой динамической текстуры/материала. Сложность данных которые нужно ЗАУЧИТЬ и обработать вырастают колоссально. Кончено Нейронная модель с миллиардами параметров кое как справится с дегенерацией нужного поведения, но не быстро. Не в реальном времени.

Но какие плюсы у такого подхода?

Во первых... исчезает проблема с долгой компиляцией шейдеров - ведь они в своей сути УЖЕ скомпилированы в MLP модуль шейдера.

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

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

Ответ в "сложности", уже сейчас имея стандарты OpenPBR и тот же Substrate в анриле дающие возможности создания сложных комплексных и модульных материалов - но мало кто вообще утруждает себя этим. Вероятно большинство предпочтет вообще не возится с мастер шейдерами в Slang'e - и из сети сразу брать готовые решения. Ведь зачем думать и придумывать что то этакое - если игроки/зрители схабают?

Это может привести к риску ситуации - когда все продукты использующие эту технологию будут выглядеть ОДИНАКОВО.

Теперь когда мы разобрали как все это работает. Еще раз замечу что представленные технологии не являются (де) генерационными. В отличие от чатов-гпт, миджорни и стейблы диффужн - они не создают контент из тысяч сожранных данных путем усреднения, а лишь упаковывают существующий конкретный файл.

Поэтому "это" - "инструменты"! В отличие от протезов мозга.

Инструмент - это продолжение нашего разума, это та штука что делает ровно то что мы и задумали, и которую мы понимаем как она работает.

В случае NTC - нейронной компрессии текстур - мы разменяем точность рендера на значительное уменьшение размера текстуры, и это ничем в своей сути не отличается от алгоритмов сжатия вроде того же BC7. Правда 3-15минут на текстуры суммой 1гб... для крупной игры вроде Кп77 или Ассасинов - это может потребовать от 10 до 30 часов упаковки финальной игры.

Но сжатие в 8 раз с 5% потерями - это экономия гигабайтов видеопамяти, для любой крупной игры.

Впрочем сжатие в 16 раз с 20% потерями может быть уже визуально заметно. В виде артифактов или нарушении тайлинга у непрерывных текстур.

В конечном счете нам все равно придется сделать эту 8-16к текстуру - прежде чем ее упаковать. Вы же не собираетесь читерить с нанобананом?

В случае с нейронными шейдерами - то пока оно "экспериментальное" и в играх в отличие от NTC появятся не скоро. У них так же есть место для жизни - если вы будете упаковывать свои многослойные BRDF материалы... Но пока у них очень много ограничений, как не возможность динамики и анимации в шейдере, процедурности (шейдер собирается из пресетов материалов по определенным законам) зависимой от координат и модульности для смены внешних эффектов(например влажность).

Нейронные текстуры и Нейронные материалы

Не ясно, как оно будет работать с тем же параллаксом при реализации кристаллов:

Кристал Опала - это фотонный кристалл с переменным IOR
Кристал Опала - это фотонный кристалл с переменным IOR

Не уверен что такая штука вообще окажется нормально применимой, кроме некоторых специфичных условий.

Хотя сами инженеры NVIDIA считает это пригодится вот в таких случаях:

Ворсистого мягкого материала, многослойной полупрозрачной автомобильной краски и эмали, древесины(?),  Вельветовой ткани(?) - все это легко создается на UE5 в системе Substrate
Ворсистого мягкого материала, многослойной полупрозрачной автомобильной краски и эмали, древесины(?), Вельветовой ткани(?) - все это легко создается на UE5 в системе Substrate

И кажется NVIDIA кажется уже готовится к взрыву пузыря ИИ и активно думает... на целый шаг вперед:

Нейронные текстуры и Нейронные материалы

Сделать ее чипы ВНОВЬ популярными в геймдеве. После того как они нас бросили. Что бы мы чувствовали, что не могли бы обойтись без ни обойтись не могли. В конечном счете когда пузырь лопнет - у них на руках останется куча нейронных чипов которые не пригодятся в Дата центрах и которые были заказаны у TSMC лет на 5 вперед и которые куда то нужно будет деть. Куда? Правильный ответ : Нам. Знакомьтесь с будущим: Нейронным рендерингом.

<b>А где наши обещанные лучики? а? Вы еще их не сделали нормально!!! ууу!</b>
А где наши обещанные лучики? а? Вы еще их не сделали нормально!!! ууу!

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

Сегодня я коснулся еще только 2х тем. Впереди NVIDIA еще будут думать какие еще способы тензорных ядер можно придумать:

Нейронные текстуры и Нейронные материалы

И это называют : Fully Immersive Gaming

Нейронные текстуры и Нейронные материалы

Игры "с полным погружением" Xех.

И вот что по их мнению нам в играх нужно:

ai-ai-ai-ai-ai-ai всмысле РТХ и ДЛСС
ai-ai-ai-ai-ai-ai всмысле РТХ и ДЛСС

Но нужно ли? И нужно ли всем остальным? Забавно как об это однажды оговорился один из Боссов НВИДИА:

Мне не понимаем почему никто, кроме нас, в этот набор инструментов не инвестирует как будто он никому не интересен!

John Spitzer, presented by NVIDIA VP of Developer and Performance Technology

Восторги эти технологии вызывают у тех кто ждет кнопки "сделать заебись"

Нейронные текстуры и Нейронные материалы

И кто именно заебется чистить и осваивать эти решения? Правильно вы - обычные работяги из геймдева.

А вы как думаете? Какие технологии ждете? Есть чем похвастаться?

222
37
20
7
4
4
3
1
1
1
1
1