Neural Rendering
Le rendu neuronal remplace certaines parties du pipeline graphique par des réseaux neuronaux pour créer des images et des scènes 3D apprises à partir de photos. Méthodes et code.
Le rendu neuronal consiste à générer des images et des vidéos à l’aide de réseaux de neurones qui remplacent ou complètent des parties du pipeline traditionnel de graphisme informatique, tout en conservant le contrôle des propriétés de la scène, comme le point de vue de la caméra, l’éclairage, la géométrie et l’apparence. Le rendu classique calcule une image à partir de modèles 3D, de matériaux et de sources lumineuses créés manuellement, en s’appuyant sur la physique du transport de la lumière. Le rendu neuronal apprend plutôt certains de ces éléments à partir de photos et de vidéos, ou apprend à produire directement les pixels finaux. En tant que domaine, le rendu neuronal associe l’apprentissage automatique génératif aux connaissances physiques du graphisme informatique, souvent en intégrant le rendu différentiable à l’entraînement du réseau. Il permet de créer des captures 3D photoréalistes de lieux réels, d’effectuer la mise à l’échelle par IA et la génération d’images intermédiaires dans les jeux vidéo, ainsi que de simuler des environnements pour la robotique et les voitures autonomes.
Fonctionnement du rendu neuronal#
La branche la plus influente apprend une scène 3D à partir de photos ordinaires. Une représentation de la scène, comme un réseau de neurones, une grille de caractéristiques apprises ou un ensemble de primitives 3D, est rendue en image depuis la position de la caméra d’une photo d’entraînement par un rendu différentiable. Chaque étape du rendu étant différentiable, l’écart entre l’image rendue et la photo réelle peut être rétropropagé par rétropropagation jusqu’à chaque paramètre de la scène. La répétition de cette opération sur de nombreux points de vue permet de reconstruire la scène avec suffisamment de précision pour rendre des points de vue qu’aucune caméra n’a capturés :
Les poses de caméra des photos proviennent généralement de logiciels de structure à partir du mouvement, comme COLMAP, qui apparient les caractéristiques entre des photos qui se chevauchent afin de retrouver l’endroit où chacune a été prise.
Représentations neuronales de scènes#
Les champs de radiance neuronaux (NeRF), introduits en 2020, encodent une scène dans les poids d’un perceptron multicouche qui associe une position 3D et une direction d’observation à une densité et une couleur. Pour rendre un pixel, NeRF échantillonne des points le long du rayon de caméra qui le traverse et mélange leurs couleurs par rendu volumique : chaque échantillon contribue selon son opacité et la quantité de lumière qui subsiste après les échantillons situés devant lui. Ce code PyTorch entraîne un minuscule champ à reproduire un pixel observé le long d’un rayon :
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}")Le programme affiche step 0: rendered [0.71 0.37 0.56], loss 0.2496 et step 199: rendered [0.9 0.4 0.1], loss 0.0000. Le réseau non entraîné produit une couleur arbitraire, puis les gradients rétropropagés à travers l’équation de rendu ajustent ses poids jusqu’à ce que le pixel rendu corresponde à la photo. Un NeRF réel fait la même chose pour des millions de rayons provenant de dizaines à des centaines de photos.
Le NeRF original nécessitait un à deux jours d’entraînement par scène sur un GPU NVIDIA V100, et chaque image rendue exigeait 150 à 200 millions de requêtes réseau, soit environ 30 secondes par image. L’Instant NGP de NVIDIA a remplacé la majeure partie du réseau par une table de hachage multirésolution de caractéristiques apprises, réduisant l’entraînement à quelques secondes ou minutes et le rendu à quelques dizaines de millisecondes en 1 920 × 1 080. Le splatting gaussien est allé plus loin en 2023 : il représente les scènes par des millions de gaussiennes 3D explicites, rastérisées en temps réel sans évaluation de réseau au moment du rendu. Il est généralement classé dans le rendu neuronal, car son optimisation suit la même méthode.
Rendu neuronal dans l’espace image#
Une deuxième branche conserve un moteur de rendu classique et utilise des réseaux pour compléter ou prolonger sa sortie. Le DLSS de NVIDIA rend les jeux en résolution réduite, les met à l’échelle avec des modèles Transformer et, sur les GPU GeForce RTX série 50, génère jusqu’à cinq images pour chaque image rendue par le jeu. Les rendus par lancer de rayons utilisent des débruiteurs appris pour produire des images nettes à partir de quelques échantillons lumineux par pixel. D’autres modèles synthétisent des images à partir de configurations de scènes : le GauGAN de NVIDIA transformait une carte sémantique du ciel, de l’eau et des arbres en paysage photoréaliste, tandis que les systèmes d’avatars neuronaux rendent le visage d’une personne sous de nouveaux angles ou éclairages.
Rendu neuronal et notions connexes#
- Rendu différentiable : moteur de rendu dont la sortie peut être différentiée par rapport à ses entrées. C’est le mécanisme qui permet au rendu neuronal d’apprendre à partir d’images ; il est aussi utilisé sans réseau de neurones, par exemple pour ajuster un maillage à des photos.
- Rendu inverse : récupération de la géométrie, des matériaux et de l’éclairage à partir d’images, souvent à l’aide du rendu différentiable, afin de pouvoir modifier et recalculer les résultats.
- Synthèse de nouveaux points de vue : tâche consistant à produire des images depuis des points de vue jamais observés, à laquelle répondent NeRF et le splatting gaussien ; le rendu neuronal regroupe un ensemble de techniques plus vaste.
- IA générative : les modèles de texte en image et de génération vidéo créent du contenu à partir d’instructions, généralement sans scène explicite pouvant être observée depuis une position de caméra choisie.
Applications concrètes#
- Cinéma et production virtuelle : les lieux capturés sont reconstruits sous forme de champs de radiance ou de splats, puis rendus depuis de nouvelles trajectoires de caméra pour les effets visuels et la prévisualisation.
- Jumeaux numériques et commerce électronique : les captures de pièces, de bâtiments et de produits réalisées avec un téléphone deviennent des vues 3D que les clients et les planificateurs peuvent explorer dans un navigateur ou un casque de RA.
- Robotique et véhicules autonomes : les trajets enregistrés sont reconstruits et rendus depuis des points de vue décalés, ce qui produit des données synthétiques pour tester les systèmes de perception. Les personnes et les voitures qui bougent pendant la capture laissent des artefacts semi-transparents ; les pipelines les masquent donc dans les photos d’entraînement, et les modèles de segmentation d’instances YOLO26 génèrent automatiquement ces masques pour chaque image. Block-NeRF de Waymo a reconstruit un quartier entier de San Francisco à partir de 2,8 millions d’images en assemblant une grille de NeRF entraînés séparément.










