Neural Rendering
El renderizado neuronal sustituye partes del proceso gráfico por redes neuronales para crear imágenes y escenas 3D aprendidas a partir de fotografías. Descubre los métodos y el código.
La representación neuronal genera imágenes y vídeo con redes neuronales que sustituyen o amplían partes del proceso tradicional de gráficos por ordenador, manteniendo el control sobre las propiedades de la escena, como el punto de vista de la cámara, la iluminación, la geometría y el aspecto. La representación convencional calcula una imagen a partir de modelos 3D, materiales y fuentes de luz creados manualmente, aplicando la física del transporte de la luz. En cambio, la representación neuronal aprende algunos de estos elementos a partir de fotos y vídeos, o aprende a producir directamente los píxeles finales. Como disciplina, la representación neuronal combina aprendizaje automático generativo con conocimientos físicos de los gráficos por ordenador, a menudo integrando la representación diferenciable en el entrenamiento de la red. La representación neuronal permite crear capturas 3D fotorrealistas de lugares reales, mejorar la resolución con IA y generar fotogramas en videojuegos, así como simulaciones para robótica y coches autónomos.
Cómo funciona la representación neuronal#
La rama de mayor influencia aprende una escena 3D a partir de fotos corrientes. Una representación de la escena, como una red neuronal, una cuadrícula de características aprendidas o un conjunto de primitivas 3D, se convierte en una imagen desde la posición de cámara de una foto de entrenamiento mediante un renderizador diferenciable. Como se puede calcular la derivada de cada paso del renderizador, la diferencia entre la imagen renderizada y la foto real se puede propagar hacia atrás mediante retropropagación hasta cada parámetro de la escena. Al repetir este proceso desde muchas perspectivas, se reconstruye la escena con suficiente precisión para renderizar puntos de vista que ninguna cámara capturó:
Las poses de cámara de las fotos suelen obtenerse con software de reconstrucción a partir del movimiento, como COLMAP, que empareja características entre fotos superpuestas para averiguar dónde se tomó cada una.
Representaciones neuronales de escenas#
Los campos de radiancia neuronales (NeRF), presentados en 2020, almacenan una escena en los pesos de un perceptrón multicapa que asigna una posición 3D y una dirección de visión a una densidad y un color. Para renderizar un píxel, NeRF muestrea puntos a lo largo del rayo de cámara que lo atraviesa y combina sus colores mediante representación volumétrica: cada muestra contribuye según su opacidad y la cantidad de luz que sobrevive a las muestras situadas delante. Este código de PyTorch entrena un campo diminuto para reproducir un píxel observado a lo largo de un rayo:
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}")Imprime step 0: rendered [0.71 0.37 0.56], loss 0.2496 y step 199: rendered [0.9 0.4 0.1], loss 0.0000. La red sin entrenar renderiza un color arbitrario, y los gradientes que se propagan hacia atrás a través de la ecuación de representación ajustan sus pesos hasta que el píxel renderizado coincide con la foto. Un NeRF real hace lo mismo con millones de rayos procedentes de decenas o cientos de fotos.
El NeRF original necesitaba entre uno y dos días de entrenamiento por escena en una GPU NVIDIA V100, y cada imagen renderizada requería entre 150 y 200 millones de consultas a la red, aproximadamente 30 segundos por fotograma. Instant NGP de NVIDIA sustituyó la mayor parte de la red por una tabla hash multirresolución de características aprendidas, lo que redujo el entrenamiento a segundos o minutos y la representación a decenas de milisegundos a 1920×1080. En 2023, el splatting gaussiano fue aún más lejos y representó escenas con millones de gaussianas 3D explícitas que se rasterizan en tiempo real sin evaluar ninguna red durante la representación; suele incluirse en la representación neuronal porque se optimiza del mismo modo.
Representación neuronal en el espacio de imagen#
Una segunda rama mantiene un renderizador convencional y usa redes para completar o ampliar su salida. DLSS de NVIDIA representa los juegos a una resolución reducida, la aumenta con modelos Transformer y, en las GPU GeForce RTX 50 Series, genera hasta cinco fotogramas por cada fotograma que representa el juego. Los renderizados con trazado de trayectorias utilizan sistemas de eliminación de ruido aprendidos para obtener imágenes nítidas a partir de unas pocas muestras de luz por píxel. Otros modelos sintetizan imágenes a partir de diseños de escenas: GauGAN de NVIDIA convirtió un mapa semántico de cielo, agua y árboles en un paisaje fotorrealista, y los sistemas de avatares neuronales representan la cara de una persona desde nuevos ángulos o con otra iluminación.
Representación neuronal frente a conceptos relacionados#
- Representación diferenciable: un renderizador cuya salida permite calcular derivadas con respecto a las entradas. Es el mecanismo que permite a la representación neuronal aprender a partir de imágenes, pero también se utiliza sin redes neuronales, por ejemplo, para ajustar una malla a unas fotos.
- Representación inversa: recuperación de la geometría, los materiales y la iluminación a partir de imágenes, a menudo mediante representación diferenciable, para poder editar y volver a representar los resultados.
- Síntesis de vistas novedosas: tarea de generar imágenes desde puntos de vista no observados, que abordan NeRF y el splatting gaussiano; la representación neuronal engloba un conjunto más amplio de técnicas.
- IA generativa: los modelos de generación de vídeo e imágenes a partir de texto crean contenido a partir de indicaciones, normalmente sin una escena explícita que se pueda ver desde una posición de cámara elegida.
Aplicaciones en el mundo real#
- Cine y producción virtual: se reconstruyen lugares capturados como campos de radiancia o splats y se representan desde nuevas trayectorias de cámara para crear efectos visuales y previsualizaciones.
- Gemelos digitales y comercio electrónico: las capturas de habitaciones, edificios y productos hechas con teléfonos se convierten en vistas 3D que los clientes y planificadores pueden explorar en un navegador o con un visor de RA.
- Robótica y vehículos autónomos: se reconstruyen trayectos grabados y se vuelven a representar desde puntos de vista desplazados, lo que genera datos sintéticos para probar sistemas de percepción. Las personas y los coches que se mueven durante una captura dejan artefactos semitransparentes, por lo que los procesos ocultan esas zonas en las fotos de entrenamiento; los modelos de segmentación de instancias de YOLO26 generan automáticamente esas máscaras para cada fotograma. Block-NeRF de Waymo reconstruyó todo un barrio de San Francisco a partir de 2,8 millones de imágenes, uniendo una cuadrícula de NeRF entrenados por separado.










