Como os efeitos volumétricos são tratados no raytracing?

10

Como os efeitos volumétricos, como fumaça, neblina ou nuvens, são renderizados por um traçador de raios? Ao contrário de objetos sólidos, eles não têm uma superfície bem definida para calcular uma interseção.

Marca
fonte

Respostas:

11

Visão geral

O aparecimento de volumes (também chamados de meios participantes) na natureza é causado por partículas minúsculas, como poeira, gotículas de água ou plâncton, suspensas no fluido ao redor, como ar ou água. Essas partículas são objetos sólidos e a luz refrata ou reflete esses objetos como faria em uma superfície normal. Em teoria, a mídia participante poderia, portanto, ser manipulada por um traçador de raios tradicional, com apenas interseções de superfície.

Modelo Estatístico

Obviamente, o grande número dessas partículas torna inviável o rastreamento de raios individualmente. Em vez disso, eles são aproximados com um modelo estatístico: como as partículas são muito pequenas e a distância entre as partículas é muito maior que o tamanho das partículas, as interações individuais da luz com as partículas podem ser modeladas como estatisticamente independentes. Portanto, é uma aproximação razoável substituir as partículas individuais por quantidades contínuas que descrevem a interação "média" de partículas de luz naquela determinada região do espaço.

Para o transporte leve volumétrico de base física, substituímos as inconcebivelmente muitas partículas por um meio participante contínuo que possui duas propriedades: o coeficiente de absorção e o coeficiente de espalhamento. Esses coeficientes são muito convenientes para o traçado de raios, pois permitem calcular a probabilidade de um raio interagir com o meio - isto é, a probabilidade de atingir uma das partículas - em função da distância.

σatetσaσsetσs; isto é, quanto mais viajamos através de um meio, maior a probabilidade de atingirmos uma partícula e estarmos espalhados em uma direção diferente.

σt=σa+σstetσtt1etσt

Renderização com mídia participante

1etσtttσaσtσsσt

Como o raio é espalhado é descrito pela função de fase e depende da natureza das partículas; a função de fase Rayleigh descreve a dispersão de partículas esféricas menores que o comprimento de onda da luz (por exemplo, nossa atmosfera); a função de fase Mie descreve a dispersão de partículas esféricas de tamanho semelhante ao comprimento de onda (por exemplo, gotículas de água); nos gráficos, geralmente é usada a função de fase de Henyey-Greenstein , originalmente aplicada à dispersão da poeira interestelar.

tMaxtt<tMaxttMax, o raio passou ileso e interage com a superfície como de costume.

Outlook

Este post foi apenas uma pequena introdução à renderização com a mídia participante; entre outras coisas, ignorei completamente os coeficientes de variação espacial (que você precisa para nuvens, fumaça etc.). As anotações de Steve Marschner são um bom recurso, se você estiver interessado. Em geral, as mídias participantes são muito difíceis de renderizar com eficiência, e você pode ser muito mais sofisticado do que o que descrevi aqui; há mapeamento volumétrico de fótons , feixes de fótons , aproximações de difusão , amostragem de importância conjunta e muito mais. Há também um trabalho interessante em mídia granular que descreve o que fazer quando o modelo estatístico quebra, ou seja, as interações entre partículas não são mais estatisticamente independentes.

Benedikt Bitterli
fonte
4

Uma maneira de fazer isso - que não é exatamente a solução "ir para", mas pode funcionar bem, é descobrir a distância que o raio percorreu o volume e usar a integração de alguma função de densidade para calcular quanto "material" havia acertar.

Aqui está um link com um exemplo de implementação: http://blog.demofox.org/2014/06/22/analytic-fog-density/

Alan Wolfe
fonte
3

Depende do efeito do volume.

Efeitos uniformes de volume que não pertencem à dispersão podem ser simulados apenas calculando as distâncias de entrada e saída de raio.

Caso contrário, você precisará fazer a integração do caminho do raio, também conhecido como marcha do raio. Para evitar a necessidade de disparar raios secundários, o raymarching geralmente é acoplado a algum tipo de cache, como mapas de profundidade, mapas profundos, mapas de tijolos ou nuvens voxel para sombras, etc. Dessa forma, você não precisa necessariamente marchar a cena inteira. O armazenamento em cache semelhante geralmente é feito na textura procedural do volume.

Também é possível converter a textura em primitivas de superfície, como caixas, esferas ou planos que tenham alguma textura com arestas suaves adequada. Você pode usar técnicas normais de renderização para resolver o efeito volumétrico. O problema é que você geralmente precisa de muitas primitivas. Além disso, a forma do primitivo pode aparecer como uma amostra muito uniforme.

joojaa
fonte
Só quero observar que você também pode fazer a integração real de um caminho de raio analiticamente; não é necessário usar o Ray marching se for indesejável.
Alan Wolfe
@ AlanWolfe é o que você faz no caso uniforme, no entanto, se o meio participa de geometria, é preciso fazer algo mais bacana. Enfim, eu não reivindiquei isso é todos os métodos.
joojaa
Com certeza, basta adicionar à sua resposta. Quando você diz caso uniforme, não sabe exatamente o que quer dizer exatamente, mas no caso do nevoeiro, não precisa ser uma densidade uniforme, apenas uma função de densidade que você possa integrar. É isso que você quis dizer com caso uniforme?
Alan Wolfe