Respostas:
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.
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.
; 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.
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.
, o raio passou ileso e interage com a superfície como de costume.
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.
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/
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.