Ray marching é uma técnica de renderização que avança um raio por uma cena em passos discretos repetidos, amostrando a cena em cada posição para encontrar superfícies, acumular efeitos volumétricos ou testar contra um campo de distância assinada (signed distance field). Diferente do ray tracing, que calcula interseções analíticas entre raio e superfície com geometria explícita como triângulos ou esferas, o ray marching funciona de forma iterativa: para cada raio, o algoritmo avança ao longo de sua direção, verifica em cada posição se o raio atingiu algo e para quando encontra uma superfície ou atinge um limite de passos.
O Ciclo Principal
Todo algoritmo de ray marching repete a mesma sequência básica:
- Defina a distância percorrida
t = 0. - Amostre a cena no ponto atual ao longo do raio.
- Se a amostra estiver perto o suficiente de uma superfície, reporte uma colisão.
- Caso contrário, escolha uma distância de passo, avance
tpor esse valor e repita. - Pare após uma distância máxima ou um número máximo de passos.
Esse ciclo é surpreendentemente geral. A mesma estrutura alimenta renderização de superfícies baseada em SDF, acúmulo de névoa volumétrica e arte procedural com shaders. O que muda entre essas aplicações é apenas como a distância do passo é escolhida e o que a amostra diz ao algoritmo para fazer em seguida. O tutorial interativo completo de ray marching explora cada variante com visualizações detalhadas.
Estratégias de Marching
Existem duas maneiras comuns de escolher a distância do passo:
Fixed-step marching (marching com passo fixo) avança sempre pela mesma pequena distância a cada iteração. É simples de implementar e funciona para qualquer representação de cena: basta amostrar cada posição e verificar se há uma superfície. A desvantagem é a eficiência: passos pequenos são seguros perto de detalhes finos, mas desperdiçam trabalho em espaço vazio, enquanto passos grandes correm o risco de pular superfícies. O fixed-step marching é usado principalmente para renderização volumétrica (névoa, fumaça, fogo), onde é necessário acumular densidade ao longo de todo o raio em vez de encontrar uma única superfície.
Sphere tracing utiliza um campo de distância assinada (signed distance field, ou SDF) para decidir a distância do passo de forma adaptativa. Em cada ponto de amostragem, o SDF retorna a menor distância até a superfície mais próxima. Como não existe superfície dentro desse raio, o raio pode saltar exatamente por essa distância sem ultrapassar nada. Isso torna o sphere tracing muito mais eficiente que o fixed-step marching em cenas típicas de renderização de superfícies: o raio dá saltos grandes pelo espaço vazio e naturalmente reduz seus passos ao se aproximar da geometria.
O visual abaixo mostra o sphere tracing em ação. O anel roxo em cada ponto de amostragem é a distância do SDF naquela posição: o raio salta até a borda desse anel e então reavalia o campo.
Distance-Guided Stepping
Drag the circle or the ray arrow to see how the marcher advances by safe distances.
A regra de atualização do sphere tracing é notavelmente compacta:
onde é a posição atual, é a distância do SDF naquele ponto e é a direção do raio. A próxima posição é simplesmente a posição atual deslocada para frente pela distância até a superfície mais próxima, na direção em que o raio viaja.
Usos Comuns
O ray marching aparece com mais frequência nestas áreas:
- Cenas procedurais e arte com shaders: geometria definida por fórmulas em vez de malhas armazenadas, popularizada por sites como Shadertoy.
- Renderização de fractais: fractais como o Mandelbrot tridimensional (Mandelbulb) não possuem fórmulas analíticas de interseção, mas têm estimadores de distância práticos, sendo candidatos naturais para sphere tracing.
- Renderização volumétrica: névoa, fumaça, nuvens e fogo são renderizados acumulando densidade ao longo do raio com fixed-step marching, calculando transparência e iluminação em cada amostra.
- Modelagem baseada em SDF: cenas construídas combinando campos de distância assinada primitivos (união, interseção, subtração) com misturas suaves e deformações.
Para uma explicação completa de como campos de distância assinada funcionam, como o sphere tracing garante passos seguros e como sombrear superfícies SDF, consulte o tutorial interativo completo de ray marching.