Neural Radiance Fields (NeRF)
Los campos de radiancia neuronales (NeRF) representan una escena 3D en una red neuronal entrenada con fotografías con poses conocidas y generan nuevas vistas mediante renderizado volumétrico a lo largo de los rayos de la cámara.
Un campo de radiancia neuronal (NeRF) representa una escena 3D como una red neuronal que asigna a cualquier posición 3D y dirección de visión una densidad y un color, aprendidos a partir de un conjunto de fotografías normales con posiciones de cámara conocidas. Para renderizar una vista, se lanza un rayo a través de cada píxel, se consulta la red en puntos a lo largo del rayo y se combinan los resultados mediante renderizado volumétrico; así, un NeRF entrenado muestra la escena desde puntos de vista que ninguna cámara capturó. Ben Mildenhall, Pratul Srinivasan, Matthew Tancik y sus colegas de UC Berkeley, Google Research y UC San Diego presentaron el método en NeRF: representación de escenas como campos de radiancia neuronal para la síntesis de vistas, en ECCV 2020. Los NeRF reproducen reflejos, estructuras finas y materiales semitransparentes que la fotogrametría basada en mallas gestiona mal, y dieron origen a la ola de investigación sobre renderizado neuronal que llevó al splatting gaussiano.
Cómo funcionan los campos de radiancia neuronal#
El NeRF original es un perceptrón multicapa sin convoluciones. Procesa una posición 3D codificada mediante 8 capas totalmente conectadas de 256 canales y genera una densidad volumétrica y un vector de características de 256 valores. El vector de características, combinado con la dirección de visión codificada, pasa por otra capa de 128 canales que genera un color RGB. La densidad depende únicamente de la posición, lo que mantiene la geometría coherente entre vistas, mientras que el color también depende de la dirección y capta los brillos especulares y los reflejos que cambian al moverse la cámara:
Para renderizar un píxel, NeRF toma 64 muestras a lo largo del rayo de la cámara con una red gruesa, después otras 128 en los puntos donde la pasada gruesa encontró densidad y evalúa una red fina en todos ellos. Cada muestra aporta su color en proporción a su opacidad y a la transmitancia —la fracción de luz que sobrevive a las muestras que tiene delante—, y la suma ponderada es el color del píxel. El entrenamiento minimiza la diferencia cuadrática entre los colores de los píxeles renderizados y fotografiados en lotes de 4.096 rayos. Las poses de cámara suelen proceder de programas de estructura a partir del movimiento, como COLMAP, y una escena requería entre 100.000 y 300.000 iteraciones —aproximadamente uno o dos días— en una GPU NVIDIA V100.
Un MLP básico alimentado con coordenadas sin procesar aprende funciones suaves y difumina los detalles finos, así que NeRF transforma primero cada coordenada en senos y cosenos de frecuencias que se duplican: 10 para la posición y 4 para la dirección. Este código de PyTorch ajusta la misma red a una señal unidimensional a rayas, con y sin esa codificación posicional:
import torch
from torch import nn
torch.manual_seed(0)
# Color along one line through a scene, with fine detail such as a striped texture
x = torch.linspace(-1, 1, 512).unsqueeze(1)
target = torch.sin(12 * torch.pi * x) * torch.cos(3 * torch.pi * x)
# NeRF's positional encoding: sines and cosines of the coordinate at 10 doubling frequencies
freqs = 2.0 ** torch.arange(10) * torch.pi
encoded = torch.cat([torch.sin(x * freqs), torch.cos(x * freqs)], dim=1)
for name, inputs in (("raw coordinate", x), ("positional encoding", encoded)):
mlp = nn.Sequential(nn.Linear(inputs.shape[1], 256), nn.ReLU(), nn.Linear(256, 256), nn.ReLU(), nn.Linear(256, 1))
optimizer = torch.optim.Adam(mlp.parameters(), lr=1e-3)
for step in range(1000):
loss = ((mlp(inputs) - target) ** 2).mean()
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f"{name}: mean squared error {loss.item():.4f}")Imprime raw coordinate: mean squared error 0.0870 y positional encoding: mean squared error 0.0000. La potencia media de la señal es 0,25, así que la red que usa coordenadas sin procesar no capta aproximadamente un tercio de ella —las franjas finas—, mientras que la red codificada sí la reproduce.
NeRF más rápidos y robustos#
- Antialiasing y escenas ilimitadas: Mip-NeRF renderiza conos en lugar de rayos infinitamente finos para eliminar el aliasing, y Mip-NeRF 360 amplía el método a capturas de 360° sin límites.
- Velocidad: Instant NGP de NVIDIA sustituye la mayor parte de la red por una tabla hash multirresolución de características aprendidas, lo que reduce el entrenamiento de días a segundos o minutos y permite renderizar en decenas de milisegundos a 1920×1080.
- Fotografías tomadas en entornos reales: NeRF in the Wild añade incrustaciones de apariencia por fotografía y un componente transitorio independiente, por lo que las colecciones de fotos de Internet con iluminación cambiante y turistas que pasan se reconstruyen correctamente.
- De texto a 3D: DreamFusion optimiza un NeRF hasta que sus renderizados desde cualquier ángulo parecen plausibles para un modelo de difusión 2D de texto a imagen, y crea objetos 3D a partir de indicaciones sin datos de entrenamiento 3D.
NeRF y conceptos relacionados#
- Splatting gaussiano: Almacena una escena de forma explícita como millones de gaussianas 3D y las rasteriza, lo que permite renderizar en tiempo real sin evaluar la red por píxel. En 2023 igualó la calidad de Mip-NeRF 360 y ha sustituido a NeRF en muchas herramientas de captura, a costa de consumir más memoria.
- Fotogrametría: Construye una malla explícita emparejando características entre fotografías. Las mallas son compactas y se pueden editar en programas 3D estándar, pero tienen dificultades con superficies brillantes, transparentes y muy finas.
- Estimación de profundidad: NeRF produce un mapa de profundidad como subproducto: la distancia esperada a la que se detiene cada rayo, pero solo después de optimizarlo con muchas fotografías posadas de una escena. Los modelos de profundidad monocular predicen la profundidad a partir de una sola imagen en una pasada hacia delante.
- Representaciones neuronales implícitas: NeRF es una representación neuronal implícita especializada en radiancia y densidad, junto con redes que almacenan imágenes, formas o audio como funciones continuas.
Requisitos de captura#
NeRF presupone una escena estática con iluminación constante, fotografiada desde muchos puntos de vista superpuestos y con poses de cámara precisas. El artículo original entrenó cada objeto sintético con 100 vistas renderizadas y cada escena real frontal con entre 20 y 62 fotografías. Todo lo que se mueva durante la captura, como un peatón o un coche, aparece en algunas fotografías y no en otras, y la optimización lo explica con «elementos flotantes» semitransparentes. Los modelos de segmentación de instancias de Ultralytics YOLO26 enmascaran a personas y vehículos en cada fotografía, de modo que se pueden excluir del entrenamiento los rayos que atraviesan esos píxeles.
Aplicaciones en el mundo real#
- Cine y producción virtual: Se reconstruyen las ubicaciones capturadas y se renderizan desde nuevas trayectorias de cámara como fondos fotorrealistas y referencias para los decorados.
- Robótica y simulación de conducción: Se reconstruyen entornos grabados para que los equipos de vehículos autónomos y robótica puedan renderizar vistas de sensores desde posiciones que el recorrido original nunca alcanzó.
- Visualización de productos: Unas pocas decenas de fotografías de un artículo se convierten en una vista interactiva que los compradores pueden girar libremente.
- Mapas: Para Immersive View de Google Maps, Google reconstruyó interiores de restaurantes y cafeterías con NeRF a partir de fotografías DSLR capturadas en aproximadamente una hora por local. El sistema se basó en Mip-NeRF 360, con las incrustaciones de apariencia de NeRF in the Wild y el condicionamiento de exposición de Block-NeRF, y los presentó como vídeos interactivos de 360° a lo largo de rutas aéreas seleccionadas.










