Neural Radiance Fields (NeRF)
Campos de radiância neural (NeRF) armazenam uma cena 3D em uma rede neural treinada com fotos de poses conhecidas e renderizam novas vistas usando renderização volumétrica ao longo dos raios da câmera.
Um campo de radiância neural (NeRF) representa uma cena 3D como uma rede neural que mapeia qualquer posição 3D e direção de visualização para uma densidade e uma cor, aprendidas a partir de um conjunto de fotos comuns com posições de câmera conhecidas. Para renderizar uma vista, um raio atravessa cada pixel, a rede é consultada em pontos ao longo do raio e os resultados são combinados por renderização volumétrica; assim, um NeRF treinado mostra a cena de pontos de vista que nenhuma câmera capturou. Ben Mildenhall, Pratul Srinivasan, Matthew Tancik e colegas da UC Berkeley, Google Research e UC San Diego apresentaram o método em NeRF: Representando cenas como campos de radiância neural para síntese de vistas, na ECCV 2020. NeRFs reproduzem reflexos, estruturas finas e materiais semitransparentes, que a fotogrametria baseada em malhas trata mal, e deram início à onda de pesquisas em renderização neural que levou ao splatting gaussiano.
Como funcionam os campos de radiância neural#
O NeRF original é um perceptron multicamadas sem convoluções. Ele processa uma posição 3D codificada com 8 camadas totalmente conectadas de 256 canais e produz uma densidade volumétrica e um vetor de características com 256 valores. O vetor de características, combinado com a direção de visualização codificada, passa por mais uma camada de 128 canais, que produz uma cor RGB. A densidade depende apenas da posição, o que mantém a geometria consistente entre as vistas, enquanto a cor também depende da direção, capturando os realces especulares e os reflexos que mudam conforme a câmera se move:
Para renderizar um pixel, o NeRF amostra 64 pontos ao longo do raio da câmera com uma rede grosseira e, em seguida, mais 128 pontos onde a passagem grosseira encontrou densidade; depois, avalia uma rede refinada em todos eles. Cada amostra contribui com sua cor proporcionalmente à opacidade e à transmitância — a fração de luz que atravessa as amostras à sua frente — e a soma ponderada resulta na cor do pixel. O treinamento minimiza a diferença quadrática entre as cores dos pixels renderizados e fotografados em lotes de 4.096 raios. As poses da câmera geralmente vêm de softwares de estrutura a partir do movimento, como COLMAP, e uma cena levou de 100.000 a 300.000 iterações, cerca de um a dois dias, em uma GPU NVIDIA V100.
Um MLP simples alimentado com coordenadas brutas aprende funções suaves e desfoca detalhes finos; por isso, o NeRF primeiro mapeia cada coordenada para senos e cossenos em frequências que dobram a cada etapa: 10 para a posição e 4 para a direção. Este código PyTorch ajusta a mesma rede a um sinal 1D listrado, com e sem essa codificação 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}")Ele imprime raw coordinate: mean squared error 0.0870 e positional encoding: mean squared error 0.0000. A potência média do sinal é 0,25, então a rede que usa coordenadas brutas não captura cerca de um terço dele — as listras finas —, enquanto a rede codificada o reproduz.
NeRFs mais rápidos e robustos#
- Antialiasing e cenas ilimitadas: Mip-NeRF renderiza cones em vez de raios infinitamente finos para eliminar o aliasing, e Mip-NeRF 360 estende esse método a capturas 360° ilimitadas.
- Velocidade: O Instant NGP da NVIDIA substitui a maior parte da rede por uma tabela hash multirresolução de características aprendidas, reduzindo o treinamento de dias para segundos ou minutos e a renderização para dezenas de milissegundos em 1920×1080.
- Fotos tiradas em ambientes reais: NeRF in the Wild adiciona embeddings de aparência por foto e um componente transitório separado, permitindo reconstruir com clareza coleções de fotos da internet com iluminação variável e turistas passando.
- Texto para 3D: DreamFusion otimiza um NeRF até que suas renderizações de todos os ângulos pareçam plausíveis para um modelo de difusão 2D de texto para imagem, criando objetos 3D a partir de prompts sem dados de treinamento 3D.
NeRF versus conceitos relacionados#
- Splatting gaussiano: Armazena explicitamente uma cena como milhões de gaussianas 3D e as rasteriza, permitindo renderização em tempo real sem avaliar a rede para cada pixel. Em 2023, igualou a qualidade do Mip-NeRF 360 e substituiu o NeRF em muitas ferramentas de captura, ao custo de maior uso de memória.
- Fotogrametria: Cria uma malha explícita combinando características entre fotos. As malhas são compactas e editáveis em softwares 3D convencionais, mas têm dificuldade com superfícies brilhantes, transparentes e muito finas.
- Estimativa de profundidade: Um NeRF gera um mapa de profundidade como subproduto: a distância esperada em que cada raio termina, mas somente após a otimização com muitas fotos da mesma cena com poses conhecidas. Modelos de profundidade monocular preveem a profundidade a partir de uma única imagem em uma passagem direta.
- Representações neurais implícitas: O NeRF é uma representação neural implícita especializada em radiância e densidade, assim como as redes que armazenam imagens, formas ou áudio como funções contínuas.
Requisitos de captura#
Um NeRF pressupõe uma cena estática sob iluminação constante, fotografada de muitos pontos de vista sobrepostos com poses de câmera precisas. O artigo original treinou cada objeto sintético com 100 vistas renderizadas e cada cena real voltada para a frente com 20 a 62 fotos. Tudo que se move durante a captura, como um pedestre ou um carro, aparece em algumas fotos, mas não em outras, e a otimização o explica como "artefatos flutuantes" semitransparentes. Os modelos de segmentação de instâncias do Ultralytics YOLO26 mascaram pessoas e veículos em cada foto, permitindo excluir do treinamento os raios que atravessam esses pixels.
Aplicações no mundo real#
- Cinema e produção virtual: Locais capturados são reconstruídos e renderizados a partir de novos trajetos de câmera como fundos fotorrealistas e referências para cenários.
- Robótica e simulação de direção: Ambientes registrados são reconstruídos para que equipes de veículos autônomos e robótica possam renderizar vistas de sensores a partir de posições que o trajeto original nunca percorreu.
- Visualização de produtos: Algumas dezenas de fotos de um item se transformam em uma vista interativa que os clientes podem girar livremente.
- Mapas: Para a Vista imersiva do Google Maps, o Google reconstruiu interiores de restaurantes e cafés com NeRF a partir de fotos DSLR capturadas em cerca de uma hora por local, usando como base Mip-NeRF 360, os embeddings de aparência do NeRF in the Wild e o condicionamento de exposição do Block-NeRF; o resultado foi disponibilizado como vídeos interativos em 360° ao longo de trajetos de voo selecionados.










