[{"data":1,"prerenderedAt":534},["ShallowReactive",2],{"article-id-ru-neural-materials-1":3},{"id":4,"title":5,"body":6,"description":431,"extension":516,"meta":517,"navigation":527,"path":528,"seo":529,"stem":532,"__hash__":533},"content/ru/blog/neural-materials-1.mdx","Neural Materials 1",{"type":7,"value":8,"toc":505},"minimark",[9,420],[10,11,12,17,21,24,32,35,39,46,49,52,55,89,96,103,121,124,129,132,135,141,216,226,233,243,246,250,253,258,273,288,291,296,299,314,319,322,327,330,337,345,350,361,366,370,373,376,396,399,407,411,414,417],"section-md",{},[13,14,16],"h2",{"id":15},"когда-физика-встречается-с-искусственным-интеллектом-как-мы-научили-нейросети-воспроизводить-физически-достоверные-текстуры","Когда физика встречается с искусственным интеллектом: как мы научили нейросети воспроизводить физически достоверные текстуры",[18,19,20],"p",{},"История компьютерной графики — это история компромиссов. С одной\nстороны, стремление к фотореализму, которое привело индустрию к созданию\nсложнейших математических моделей освещения. С другой — жесткие\nограничения по времени, в течение которого должен быть просчитан каждый\nкадр. Этот конфликт особенно остро ощущается при создании материалов —\nтого, как поверхность объекта взаимодействует со светом.",[18,22,23],{},"В киноиндустрии эта проблема решается просто: время не главное. Один\nкадр в таких фильмах может рендериться часами. Художники строят\nгигантские графы материалов, соединяя десятки текстур и математических\nузлов, чтобы добиться нужного вида потертостей на старом диване или\nбликов на лакированной поверхности автомобиля. Эти графы описывают\nсложнейшую физику: как свет проникает сквозь слои краски, как\nрассеивается в пыли, как отражается от микроскопических царапин.\nРезультат стоит ожидания — мы видим на экране изображения, которые\nневозможно отличить от реальности.",[18,25,26,27,31],{},"В играх и интерактивных приложениях такой подход невозможен. Здесь\nкаждый кадр должен быть готов за 16 миллисекунд (для 60 FPS) или даже\nбыстрее. Поэтому художники и разработчики вынуждены упрощать\nфотореализм, искать обходные пути, использовать предварительно\nрассчитанное освещение ",[28,29,30],"strong",{},"(lightmaps)"," и менее требовательные модели\nматериалов. До недавнего времени считалось, что пропасть между этими\nдвумя мирами - рендерингом в реальном времени и фотореализмом -\nнепреодолима.",[18,33,34],{},"Наша команда ставила перед собой амбициозную цель: сделать шаг к\nпреодолению этой пропасти. Мы задались вопросом: а что, если мы сможем\nвзять сложнейший материал, созданный для кино, и «сжать» его в\nкомпактную нейронную сеть, которая будет работать так быстро, что её\nможно будет использовать в реальном времени? В итоге мы получили\nвпечатляющие результаты, которые превзошли наши ожидания.",[13,36,38],{"id":37},"от-многослойного-пирога-к-нейронному-ядру-концепция-запекания-материалов","От многослойного пирога к нейронному ядру: концепция запекания материалов",[18,40,41],{},[42,43],"img",{"alt":44,"src":45},"Концепция запекания материалов","/img/blog/neural-materials-1/content-1.png",[18,47,48],{},"Чтобы понять суть подхода, нужно сначала разобраться, как устроены\nсовременные материалы высокого качества.",[18,50,51],{},"В индустрии визуальных эффектов и в современных игровых движках (хотя в\nиграх их используют ограниченно) стандартом де-факто являются layered\nmaterials - многослойные материалы.",[18,53,54],{},"Представьте себе поверхность старинного медного подноса. Художник не\nстанет просто рисовать текстуру меди. Он создаст материал, который\nимитирует реальную физическую структуру:",[56,57,58,65,71,77,83],"ul",{},[59,60,61,64],"li",{},[28,62,63],{},"Базовый слой:"," сама медь, с определенным цветом и блеском.",[59,66,67,70],{},[28,68,69],{},"Слой патины:"," зеленоватый налет, который появляется со временем. Он\nбудет неравномерным, толще в углублениях и тоньше на выступающих\nчастях.",[59,72,73,76],{},[28,74,75],{},"Слой лака:"," прозрачное покрытие, которое дает сильные, но немного\nразмытые блики.",[59,78,79,82],{},[28,80,81],{},"Слой пыли:"," мельчайшие частицы, лежащие сверху.",[59,84,85,88],{},[28,86,87],{},"Слой царапин:"," нарушающий целостность всех предыдущих слоев.",[18,90,91,92,95],{},"Каждый из этих слоев описывается своей математической моделью ",[28,93,94],{},"(BSDF —\nBidirectional Scattering Distribution Function)",", а для управления их\nсмешиванием используются маски, карты высот и процедурные шумы.\nВизуально это выглядит как сложный граф, где десятки узлов соединены\nсотнями связей. Просчет такого графа в реальном времени — задача\nнепосильная даже для самых мощных GPU.",[18,97,98,99,102],{},"Мы предложили не просчитывать этот граф каждый раз заново, а один раз\nобучить нейронную сеть имитировать его поведение. Наша ключевая идея\nзаключалась в ",[28,100,101],{},"запекании (baking)"," материала. Процесс выглядит следующим\nобразом:",[104,105,106,109,112,115,118],"ol",{},[59,107,108],{},"Художник создает эталонный материал в привычном для него инструменте\n(например, в Autodesk Maya с использованием MaterialX или в\nHoudini).",[59,110,111],{},"Мы запускаем процесс генерации обучающих данных. Для этого мы\nмногократно сэмплируем материал: берем случайную точку на\nповерхности (с координатами UV), случайное направление на источник\nсвета и случайное направление на камеру.",[59,113,114],{},"Для каждой такой комбинации мы просчитываем сложный граф материала,\nполучая эталонное значение цвета и, что важно, правильное\nраспределение отраженного света.",[59,116,117],{},"Полученный датасет (миллионы таких семплов) используется для\nобучения нашей нейронной модели.",[59,119,120],{},"После обучения сложный, «тяжелый» граф материала больше не нужен. В\nигру или приложение идет только компактная нейросеть и\nнепосредственно нейронные текстуры — neural representation.",[18,122,123],{},"Результат — не просто сжатие, а трансформация способа\nпредставления материала. Вместо описания физических процессов («как свет\nпроходит сквозь слои») мы получаем поведенческую модель («как\nповерхность выглядит при таком освещении»), которая занимает в сотни раз\nменьше места и просчитывается на порядок быстрее.",[125,126,128],"h3",{"id":127},"анатомия-нейронного-материала-от-входа-к-выходу","Анатомия нейронного материала: от входа к выходу",[18,130,131],{},"Чтобы понять магию, нужно заглянуть внутрь «обученной сети». Важно\nподчеркнуть, что данный подход — это не одна огромная сеть,\nобрабатывающая всю сцену целиком. Это набор компактных нейронных\nмоделей, каждая из которых отвечает за свой конкретный материал.",[18,133,134],{},"Архитектурно процесс рендеринга одного пикселя с нейронным материалом\nможно разбить на несколько этапов.",[18,136,137,140],{},[28,138,139],{},"Этап 1: Входные данные","\nВ момент, когда при рендеринге луч попадает в объект с нейронным\nматериалом, шейдер собирает все необходимые данные о точке попадания и\nпередает их сети. Входной вектор включает в себя:",[56,142,143,149,210],{},[59,144,145,148],{},[28,146,147],{},"Координаты текстуры (UV):"," Позиция точки на поверхности объекта. По\nэтим координатам мы делаем выборку из запеченной карты признаков.",[59,150,151,154,155,187,188,209],{},[28,152,153],{},"Направления:"," Вектор направления на источник света (откуда светит\nисточник, ",[28,156,157],{},[158,159,162],"span",{"className":160},[161],"katex",[163,164,166],"math",{"xmlns":165},"http://www.w3.org/1998/Math/MathML",[167,168,169,182],"semantics",{},[170,171,172],"mrow",{},[173,174,175,179],"msub",{},[176,177,178],"mi",{},"ω",[176,180,181],{},"i",[183,184,186],"annotation",{"encoding":185},"application/x-tex","\\omega_{i}",") и вектор направления взгляда (куда смотрит камера,\n",[28,189,190],{},[158,191,193],{"className":192},[161],[163,194,195],{"xmlns":165},[167,196,197,206],{},[170,198,199],{},[173,200,201,203],{},[176,202,178],{},[176,204,205],{},"o",[183,207,208],{"encoding":185},"\\omega_{o}",").",[59,211,212,215],{},[28,213,214],{},"Дополнительные атрибуты:"," Сюда могут добавляться карты нормалей для\nкоррекции геометрии, хотя сеть и сама может научиться их эффектам.",[18,217,218,221,222,225],{},[28,219,220],{},"Этап 2: Карта латентных признаков — память материала","\nМы отказались от идеи подавать «сырые» UV-координаты напрямую в большую\nсеть. Такой подход потребовал бы от сети колоссальной емкости, чтобы\nзапомнить все вариации материала в разных частях объекта. Вместо этого\nмы используем текстуру специального формата, которую называем ",[28,223,224],{},"картой\nпризнаков (feature map)",".",[18,227,228,229,232],{},"В отличие от классических текстур, хранящих цвета RGB или параметры\nматериалов (шероховатость, металличность), наша карта признаков хранит\n",[28,230,231],{},"латентные векторы (latent features)"," — компактные многомерные\nвекторы (скажем, 8 чисел), которые кодируют все сложные свойства\nматериала в данной конкретной точке. Это результат работы энкодера,\nкоторый был обучен вместе с декодером. Энкодер научился сжимать всю\nсложность исходного материала в компактное представление.",[18,234,235,238,239,242],{},[28,236,237],{},"Этап 3: Нейронный декодер — интерпретация признаков","\nИз карты признаков мы извлекаем латентный вектор для данной точки. Но\nсам по себе он бесполезен — это просто набор чисел. Чтобы превратить\nего в цвет и физические свойства, нужен интерпретатор. Эту роль\nвыполняет ",[28,240,241],{},"нейронный декодер (Neural Decoder)"," — небольшая, но\nмощная полносвязная нейронная сеть (многослойный перцептрон).",[18,244,245],{},"Ее задача — взять латентный вектор, объединить его с направлениями\nсвета и камеры и выдать итоговые физические величины, необходимые для\nрендеринга. Именно архитектура этого декодера является ключом к работе\nвсей системы.",[13,247,249],{"id":248},"техническая-революция-cooperative-vectors-и-доступ-к-тензорным-ядрам","Техническая революция: Cooperative Vectors и доступ к тензорным ядрам",[18,251,252],{},"Создать архитектуру сети — это только половина дела. Самый сложный\nвызов проекта заключался в том, чтобы заставить эту сеть работать внутри\nшейдера на видеокарте, выполняясь сотни тысяч раз в кадр и укладываясь в\nбюджет работы необходимого для реального времени. Именно здесь на помощь\nприходит технология Cooperative Vectors (кооперативные векторы), ставшая\nфундаментом для всей нашей реализации.",[18,254,255],{},[28,256,257],{},"Проблема: два разных мира",[18,259,260,261,264,265,268,269,272],{},"Обычно нейросети выполняются на тензорных ядрах GPU с использованием\nспециализированных библиотек (типа ",[28,262,263],{},"cuDNN",") и фреймворков (",[28,266,267],{},"TensorFlow",",\n",[28,270,271],{},"PyTorch","). Они работают с большими пакетами данных (батчами) и\nоптимизированы для максимальной пропускной способности. Шейдеры же —\nэто маленькие программы, которые выполняются для каждого пикселя или\nлуча индивидуально. Они работают в совершенно другом режиме, и доступ к\nтензорным ядрам из шейдерного кода исторически был невозможен.",[18,274,275,276,279,280,283,284,287],{},"Кроме того, традиционная модель программирования ",[28,277,278],{},"SIMT"," требует полного\nварпа активных потоков для эффективной работы с тензорными ядрами. Варп\n(",[28,281,282],{},"warp",") — это базовый блок выполнения на ",[28,285,286],{},"GPU",", как правило группа из 32\nпотоков, которые выполняют одну и ту же инструкцию одновременно. Однако\nмодель трассировки лучей обрабатывает потоки независимо, и собрать их в\nполные группы по 32 практически невозможно.",[18,289,290],{},"Тензорные ядра также оптимизированы для матрично-матричного умножения,\nв то время как каждому потоку луча нужно только векторно-матричное умножение.\nЭти факторы приводят к неполной загрузке вычислительных ресурсов.",[18,292,293],{},[28,294,295],{},"Решение: Cooperative Vectors API",[18,297,298],{},"Мы преодолели этот барьер благодаря новой технологии — Cooperative\nVectors, разрабатываемой AMD в тесном сотрудничестве с Microsoft и\nактивно внедряемой в DirectX.",[18,300,301,304,305,309,310,313],{},[28,302,303],{},"Cooperative vectors"," — это специализированный API для вычисления\nматрично-векторных произведений в графических задачах. Он разработан для\nслучаев, когда каждому потоку параллельной программы нужно умножить\nвектор на относительно небольшую матрицу (например, ",[306,307,308],"code",{},"128×128",", ",[306,311,312],{},"64×64"," или\nменьше). Работая совместно, потоки могут выполнять эти умножения гораздо\nэффективнее — отсюда и название «кооперативные» .",[18,315,316],{},[28,317,318],{},"Оптимизация памяти и выполнения",[18,320,321],{},"Важным аспектом реализации является оптимальная упаковка весов и\nсмещений нейросети. Все веса обученных сетей и данные карт признаков\nупаковываются в специальные буферы в памяти GPU с использованием\nоптимизированного расположения (packing) для максимальной эффективности\nдоступа .",[18,323,324],{},[28,325,326],{},"Борьба с дивергенцией",[18,328,329],{},"При рендеринге методом трассировки лучей (raytracing) лучи могут расходиться очень хаотично\n— один луч попадает на металлическую поверхность, а соседний — на\nткань. Это называется дивергентным выполнением и является \"врагом\"\nпроизводительности GPU. Cooperative Vectors могут обрабатывать\nдивергенцию данных и выполнения в варпе, хотя и с некоторым снижением\nпроизводительности .",[18,331,332,333,336],{},"Для достижения максимальной производительности мы используем технику\n",[28,334,335],{},"Shader Execution Reordering (SER)",", которая перегруппировывает лучи по\nтипу обрабатываемого материала. Это обеспечивает два ключевых условия\nдля оптимальной работы Cooperative Vectors:",[104,338,339,342],{},[59,340,341],{},"Веса нейронной сети одинаковы для всех потоков в варпе",[59,343,344],{},"В варпе присутствует полный комплект активных потоков",[18,346,347],{},[28,348,349],{},"Результат оптимизации",[18,351,352,353,356,357,360],{},"Благодаря использованию ",[28,354,355],{},"Cooperative Vectors"," нам удалось достичь\nпоразительных показателей производительности. Наши нейронные шейдеры\nмогут быть более чем в ",[28,358,359],{},"10 раз быстрее"," традиционных, не-нейронных\nмногослойных материалов, реализованных в коде. Это открывает дорогу к\nиспользованию кинематографических материалов в играх и интерактивных\nприложениях, где раньше это было немыслимо.",[18,362,363],{},[42,364],{"alt":349,"src":365},"/img/blog/neural-materials-1/content-2.png",[13,367,369],{"id":368},"масштабирование-и-применение-в-реальных-проектах","Масштабирование и применение в реальных проектах",[18,371,372],{},"Отдельной задачей стояло масштабирование системы. В реальной сцене могут\nприсутствовать десятки или сотни уникальных материалов. Если для каждого\nдержать в памяти отдельную нейросеть, требования к памяти могут стать\nнеприемлемыми.",[18,374,375],{},"Мы проанализировали эту проблему и предложили несколько стратегий:",[104,377,378,384,390],{},[59,379,380,383],{},[28,381,382],{},"Общая архитектура, разные веса:"," Все нейросети для материалов\nмогут иметь одинаковую архитектуру, но разные обученные веса. Это\nпозволяет эффективно хранить их в памяти и быстро переключаться\nмежду ними.",[59,385,386,389],{},[28,387,388],{},"Совместное использование признаков:"," Часть сети, отвечающая за\nинтерпретацию направлений, может быть общей для многих материалов.\nУникальными остаются только карты признаков.",[59,391,392,395],{},[28,393,394],{},"Компиляция под конкретный набор:"," В рантайме мы можем отобрать\nтолько те нейронные материалы, которые реально используются в\nтекущей сцене или уровне, и скомпилировать для них\nспециализированный шейдерный код.",[18,397,398],{},"Это делает систему не просто лабораторным экспериментом, а практически\nприменимым инструментом для разработчиков игр, создателей виртуальной\nреальности и архитектурной визуализации. Представьте себе игру, где\nкаждый предмет — от ржавого гвоздя до бархатной шторы — обладает\nсложнейшей, физически корректной поверхностью, которая ведет себя\nправильно при любом освещении, и при этом игра работает с высокой\nчастотой кадров.",[400,401],"service-banner",{":image":402,"cta":403,"description":404,"title":405,"to":406},"{\"src\":\"/img/services/2.3d-graphics/preview.png\",\"alt\":\"Изображение видеокарты\"}","Подробнее об услуге","Нужны нейронные материалы в реальном времени или продвинутый 3D-рендеринг? У нас команда профессионалов, которая качественно выполнит ваши задачи.","Разработка в области 3D-графики","../services/3d-graphics",[13,408,410],{"id":409},"заключение-новая-эра-интерактивной-графики","Заключение: новая эра интерактивной графики",[18,412,413],{},"Мы верим, что эта работа открывает новую главу в интерактивной графике.",[18,415,416],{},"Нейронные материалы - это мост между мирами фотореалистичного оффлайн\nрендеринга и рендеринга в реальном времени. Художники теперь могут\nтворить, не оглядываясь на технические ограничения, зная, что их\nсложнейшие наработки могут быть \"упакованы\" в нейронную модель и будут\nработать в реальном времени. Инженеры получают инструмент, который\nпозволяет радикально повысить визуальное качество без потери\nпроизводительности.",[18,418,419],{},"Конечно, это только первый шаг. Впереди — работа над еще более\nкомпактными моделями, поддержка динамически меняющихся материалов\n(например, выцветание на солнце или намокание под дождем). Но фундамент\nзаложен. Мы показали, что будущее графики — за интеллектуальными,\nобучаемыми представлениями, которые стирают грань между виртуальным и\nреальным.",[421,422,424,440,453,466,479,492],"faq",{"title":423},"Частые вопросы и ответы",[425,426,428,435],"faq-item",{"value":427},"item-1",[429,430,432],"template",{"v-slot:question":431},"",[18,433,434],{},"Чем нейронный материал отличается от обычной текстуры?",[429,436,437],{"v-slot:answer":431},[18,438,439],{},"Обычная текстура хранит фиксированные параметры поверхности — цвет, шероховатость, металличность. Нейронный материал хранит компактное обученное представление, которое учитывает сложную многослойную структуру и корректно отвечает на изменение направления света и камеры. Это не статичная картинка, а функция, вычисляющая правильный отклик поверхности для любого ракурса и освещения.",[425,441,443,448],{"value":442},"item-2",[429,444,445],{"v-slot:question":431},[18,446,447],{},"Насколько увеличивается размер файла по сравнению с обычным материалом?",[429,449,450],{"v-slot:answer":431},[18,451,452],{},"Нейронное представление обычно занимает от нескольких десятков килобайт до нескольких мегабайт на материал — это веса нейросети и карта признаков. Для сравнения: набор 4K-текстур для сложного многослойного материала может весить десятки мегабайт. В большинстве случаев нейронная версия компактнее исходного набора текстур.",[425,454,456,461],{"value":455},"item-3",[429,457,458],{"v-slot:question":431},[18,459,460],{},"На каком оборудовании это работает?",[429,462,463],{"v-slot:answer":431},[18,464,465],{},"Для рендеринга требуются GPU с поддержкой Cooperative Vectors. На данный момент технология активно внедряется в DirectX при участии AMD и Microsoft. Производительность на порядок выше, чем у традиционных многослойных материалов в шейдерном коде, но для работы нужны актуальные драйверы и совместимое железо.",[425,467,469,474],{"value":468},"item-4",[429,470,471],{"v-slot:question":431},[18,472,473],{},"Может ли художник использовать привычные инструменты?",[429,475,476],{"v-slot:answer":431},[18,477,478],{},"Да. Художник работает в своём обычном инструменте — Autodesk Maya с MaterialX, Houdini или аналогичном. Процесс «запекания» запускается отдельно: система сама генерирует обучающие данные, обучает нейросеть и выдаёт компактное представление. Рабочий процесс художника не меняется.",[425,480,482,487],{"value":481},"item-5",[429,483,484],{"v-slot:question":431},[18,485,486],{},"Поддерживаются ли анимированные материалы — например, намокание или выцветание?",[429,488,489],{"v-slot:answer":431},[18,490,491],{},"Пока нет. Текущая реализация работает со статичными материалами. Поддержка динамически меняющихся свойств (намокание под дождём, выцветание на солнце, истирание) — одно из направлений дальнейшей работы.",[425,493,495,500],{"value":494},"item-6",[429,496,497],{"v-slot:question":431},[18,498,499],{},"Насколько результат визуально точен по сравнению с оригиналом?",[429,501,502],{"v-slot:answer":431},[18,503,504],{},"Нейросеть обучается на миллионах сэмплов, сгенерированных из эталонного графа материала. При достаточном объёме обучающих данных визуальная разница между рендером через оригинальный граф и через нейронное представление минимальна и в большинстве сценариев неразличима на глаз.",{"title":431,"searchDepth":506,"depth":506,"links":507},2,[508,509,513,514,515],{"id":15,"depth":506,"text":16},{"id":37,"depth":506,"text":38,"children":510},[511],{"id":127,"depth":512,"text":128},3,{"id":248,"depth":506,"text":249},{"id":368,"depth":506,"text":369},{"id":409,"depth":506,"text":410},"mdx",{"readTime":518,"image":519,"date":520,"tags":521,"authors":525},"18 минут","/img/blog/neural-materials-1/preview.png","2026-04-07",[522,523,524],"3D графика","Искусственный интеллект","Машинное обучение",[526],"atimoshenko",true,"/ru/blog/neural-materials-1",{"title":530,"description":531},"Как мы научили нейросети воспроизводить физически достоверные текстуры","Описываем подход, позволяющий преобразовывать сложные многослойные материалы в компактные нейросетевые представления и выполнять их рендеринг в реальном времени с использованием трассировки лучей и аппаратного ускорения на тензорных ядрах GPU.","ru/blog/neural-materials-1","JbHsX3ZIW09gTNeTq6xcsCEpWeBverQNN8jI3lPwBZ4",1777111204266]