Neural Rendering
Нейронный рендеринг заменяет части графического конвейера нейросетями, создавая изображения и 3D-сцены, обученные на фотографиях. Методы и код.
Нейронный рендеринг — это создание изображений и видео с помощью нейронных сетей, которые заменяют или дополняют этапы традиционного конвейера компьютерной графики, сохраняя возможность управлять свойствами сцены, такими как положение камеры, освещение, геометрия и внешний вид. При обычном рендеринге изображение вычисляется на основе созданных вручную 3D-моделей, материалов и источников света с учётом физики распространения света. Нейронный рендеринг вместо этого обучается на фотографиях и видео или учится напрямую создавать итоговые пиксели. Как область, нейронный рендеринг объединяет генеративное машинное обучение с физическими знаниями из компьютерной графики, часто включая дифференцируемый рендеринг в обучение сети. Нейронный рендеринг лежит в основе фотореалистичного 3D-захвата реальных мест, масштабирования с помощью ИИ и генерации кадров в видеоиграх, а также симуляций для робототехники и беспилотных автомобилей.
Как работает нейронный рендеринг#
Наиболее влиятельное направление учится восстанавливать 3D-сцену по обычным фотографиям. Представление сцены — например, нейронную сеть, сетку обучаемых признаков или набор 3D-примитивов — рендерят в изображение с позиции камеры на обучающей фотографии с помощью дифференцируемого рендерера. Поскольку можно дифференцировать каждый этап рендеринга, разность между отрендеренным изображением и реальной фотографией можно проследить через обратное распространение ошибки до каждого параметра сцены. Повторение этой процедуры для множества ракурсов позволяет достаточно хорошо восстановить сцену и отрендерить ракурсы, которые не снимала ни одна камера:
Положения камер для фотографий обычно получают с помощью программ для восстановления структуры по движению, таких как COLMAP, которая сопоставляет признаки на перекрывающихся фотографиях, чтобы определить, откуда сделан каждый снимок.
Представления нейронных сцен#
Поля нейронной радиации (NeRF), представленные в 2020 году, хранят сцену в весах многослойного перцептрона, который преобразует 3D-позицию и направление взгляда в плотность и цвет. Чтобы отрендерить пиксель, NeRF выбирает точки вдоль луча камеры, проходящего через него, и смешивает их цвета методом объёмного рендеринга: вклад каждого образца зависит от его непрозрачности и от количества света, прошедшего через предыдущие образцы. Этот код на PyTorch обучает небольшое поле воспроизводить один наблюдаемый пиксель вдоль одного луча:
import torch
from torch import nn
# A tiny neural field that maps a 3D point to a density and an RGB color
torch.manual_seed(0)
field = nn.Sequential(nn.Linear(3, 64), nn.ReLU(), nn.Linear(64, 4))
optimizer = torch.optim.Adam(field.parameters(), lr=0.01)
# 64 points along one camera ray, and the color a training photo shows for that pixel
depths = torch.linspace(2.0, 6.0, 64)
points = torch.stack([torch.zeros(64), torch.zeros(64), depths], dim=1)
observed = torch.tensor([0.9, 0.4, 0.1])
for step in range(200):
density, color = field(points).split([1, 3], dim=1)
# Volume rendering: each sample's opacity times the light that reaches it through the samples in front
alpha = 1 - torch.exp(-nn.functional.softplus(density.squeeze(1)) * (depths[1] - depths[0]))
transmittance = torch.cumprod(torch.cat([torch.ones(1), 1 - alpha[:-1]]), dim=0)
pixel = (transmittance * alpha) @ torch.sigmoid(color)
loss = ((pixel - observed) ** 2).sum()
optimizer.zero_grad()
loss.backward()
optimizer.step()
if step in (0, 199):
print(f"step {step}: rendered {pixel.detach().numpy().round(2)}, loss {loss.item():.4f}")Он выводит step 0: rendered [0.71 0.37 0.56], loss 0.2496 и step 199: rendered [0.9 0.4 0.1], loss 0.0000. Необученная сеть рендерит случайный цвет, а градиенты, распространяющиеся назад через уравнение рендеринга, корректируют её веса, пока отрендеренный пиксель не совпадёт с фотографией. Настоящий NeRF делает то же самое для миллионов лучей из десятков или сотен фотографий.
Для обучения исходного NeRF требовалось от одного до двух дней на сцену с использованием GPU NVIDIA V100, а для рендеринга каждого изображения выполнялось от 150 до 200 миллионов запросов к сети — около 30 секунд на кадр. В Instant NGP NVIDIA заменила большую часть сети многомасштабной хеш-таблицей обучаемых признаков, сократив обучение до секунд или минут, а рендеринг — до десятков миллисекунд при разрешении 1920×1080. В 2023 году гауссов сплаттинг пошёл ещё дальше: сцены представляются миллионами явных 3D-гауссианов, которые растеризуются в реальном времени без вычисления сети во время рендеринга; этот метод обычно относят к нейронному рендерингу, потому что его оптимизируют так же.
Нейронный рендеринг в пространстве изображения#
Второе направление сохраняет традиционный рендерер, а сети используют для обработки или расширения его результата. DLSS от NVIDIA рендерит игры в уменьшенном разрешении, масштабирует изображение с помощью моделей Transformer, а на GPU GeForce RTX 50 Series генерирует до пяти кадров на каждый кадр, отрендеренный игрой. Для трассировки путей используют обученные шумоподавители, которые создают чистые изображения по нескольким образцам света на пиксель. Другие модели синтезируют изображения по планировке сцены: GauGAN от NVIDIA преобразовывал семантическую карту неба, воды и деревьев в фотореалистичный пейзаж, а системы нейронных аватаров рендерят лицо человека с новых ракурсов или при новом освещении.
Нейронный рендеринг и смежные понятия#
- Дифференцируемый рендеринг: рендерер, результат работы которого можно дифференцировать по его входным данным. Он позволяет нейронному рендерингу учиться на изображениях и используется также без нейронных сетей, например для подгонки сетки под фотографии.
- Обратный рендеринг: восстановление геометрии, материалов и освещения по изображениям, часто с помощью дифференцируемого рендеринга, чтобы результат можно было редактировать и рендерить заново.
- Синтез новых ракурсов: создание изображений с невиданных ранее ракурсов. Эту задачу решают NeRF и гауссов сплаттинг; нейронный рендеринг охватывает более широкий набор методов.
- Генеративный ИИ: модели генерации изображений по тексту и видео создают контент по запросам, обычно без явной сцены, которую можно было бы рассмотреть с выбранной позиции камеры.
Примеры применения в реальных условиях#
- Кино и виртуальное производство: снятые локации восстанавливают в виде полей радиации или сплатов и рендерят с новых траекторий камеры для визуальных эффектов и предварительной визуализации.
- Цифровые двойники и электронная коммерция: снимки комнат, зданий и товаров, сделанные телефоном, преобразуются в 3D-представления, которые покупатели и проектировщики могут изучать в браузере или AR-гарнитуре.
- Робототехника и автономные автомобили: записи поездок восстанавливают и повторно рендерят со смещённых ракурсов, получая синтетические данные для проверки систем восприятия. Движущиеся во время съёмки люди и машины оставляют полупрозрачные артефакты, поэтому конвейеры маскируют их на обучающих фотографиях, а модели сегментации экземпляров YOLO26 автоматически создают такие маски для каждого кадра. С помощью Block-NeRF Waymo восстановила целый район Сан-Франциско по 2,8 миллиона изображений, объединив сетку отдельно обученных NeRF.










