Modelagem, Animação e Rendering de Nuvens utilizando

Propaganda
Modelagem, Animação e Rendering de Nuvens
utilizando Visualização Volumétrica
João Luis Prauchner, Carlos A. Dietrich, Luciana P. Nedel, Carla M. D. S. Freitas
Instituto de Informática, Universidade Federal do Rio Grande do Sul (UFRGS)
Caixa Postal 15.064 – 91.501-970 – Porto Alegre – RS – Brasil
{jlprauchner,cadietrich,nedel,carla}@inf.ufrgs.br
Abstract. Graphical applications such as flight simulators and games often
use clouds modeling and rendering to improve the realism of scenes.
Traditional approaches employ a technique known as environment mapping to
simulate clouds on the sky. This work presents two approaches to simulate 3D
clouds in real time using programmable graphics hardware.
Resumo. Aplicações gráficas tais como simuladores de vôo e jogos utilizam
técnicas de modelagem e “rendering” de nuvens para tornar os ambientes
mais realistas. Abordagens tradicionais empregam a técnica conhecida como
“environment mapping” para criar a ilusão de um céu com nuvens. Este
trabalho apresenta duas abordagens para simular nuvens tridimensionais em
tempo real, utilizando hardware gráfico programável.
1. Introdução
Nuvens são parte integrante do céu e sua ausência em uma cena gerada sinteticamente
pode prejudicar o realismo da mesma [Harris 2001], pois mesmo um olho não treinado
consegue julgar corretamente o realismo de um modelo sintético de nuvens. Aplicações
gráficas com ambientes virtuais como jogos e simuladores de vôo freqüentemente
exibem cenas ao ar livre, as quais necessitam de um céu com nuvens. A modelagem
realista de nuvens também é utilizada na visualização meteorológica, visto que trata de
um fenômeno natural e amorfo.
Segundo Ebert (1994), as nuvens possuem um conjunto de características visuais
facilmente identificáveis e que, quando modeladas adequadamente, produzem melhores
resultados em imagens e animações. A primeira delas é sua estrutura volumétrica,
correspondendo a partículas num espaço tridimensional, e amorfa, possuindo detalhes
em várias escalas e posições. A segunda característica é relacionada ao processo de
formação da nuvem, cujas partículas de água passam por momentos de turbulência e
agitação, o que produz os padrões comuns às nuvens e sua evolução ao longo do tempo.
Finalmente, existem diversos modelos de iluminação e tonalização que devem ser
adequadamente utilizados para que as imagens produzidas sejam convincentes, já que
nuvens são compostas de partículas de gelo e água que absorvem, refletem e espalham
luz.
A técnica de síntese de imagens de nuvens mais tradicional é o mapeamento de
texturas 2D, representando o céu nublado em um ou mais planos de fundo ou em uma
grande redoma. Esses planos são dispostos suficientemente longe do observador de
modo a criar a ilusão de um céu verdadeiro. No entanto, apenas o uso dessa técnica
(conhecida como environment mapping, ou mapeamento de ambiente [Watt 2000]) não
permite que vários efeitos desejados sejam alcançados [Harris 2001]. Por exemplo, num
simulador de vôo, não haveria a possibilidade do observador atravessar nuvens
tridimensionais, podendo ver outros objetos encobertos (parcial ou totalmente) por elas.
A característica dinâmica das nuvens é outro fator a ser levado em conta, já que
as mesmas assumem formas diversas e se movimentam ao longo do tempo. Soma-se a
isso os processos físicos de iluminação sofridos pelas nuvens, os quais produzem
diversos efeitos visuais (Figura 1). Dessa forma, para se obter melhores resultados fazse necessário o uso de abordagens baseadas em nuvens volumétricas, ou seja, em
objetos tridimensionais com volume. Tais técnicas têm, entretanto, um custo elevado
em termos de memória e processamento. Assim, aliado ao uso de APIs gráficas
tradicionais como a OpenGL, o uso do hardware gráfico programável vem ganhando
destaque como auxílio no processamento de cenas com nuvens volumétricas em tempo
real [Harris 2002].
(a)
(b)
Figura 1. Imagens de nuvens reais [Illinois 2002]. Predominância de nuvens do
tipo cumulus (baixas e médias altitudes, em torno de 2000 a 6000 metros).
O objetivo deste trabalho é investigar as técnicas atuais para a modelagem,
animação e rendering de nuvens 3D, implementando o método mais adequado para
aplicações em tempo real de nuvens dinâmicas. O restante do trabalho é organizado
como segue. A Seção 2 revisa as técnicas atuais para simulação de nuvens, enquanto a
Seção 3 descreve o método implementado e a Seção 4 apresenta os resultados obtidos.
Na Seção 5 são apresentadas conclusões e discutida a continuidade do trabalho.
2. Técnicas de Simulação de Nuvens
Existem diversas técnicas para a modelagem e simulação de nuvens, sendo que podem
ser classificadas em técnicas baseadas em Física e métodos procedurais [Spochk 2003,
Dobashi 2000). As técnicas baseadas em Física tentam simular os processos
meteorológicos que criam nuvens e a interação entre a luz e as partículas que formam as
nuvens. Já os métodos procedurais são baseados na geração dos padrões visuais das
nuvens, sem simular os processos físicos envolvidos. Estas técnicas normalmente
utilizam algum tipo de padrão irregular como o ruído de Perlin (1985, 2002), ou alguma
combinação de funções que gere algum padrão que pareça irregular como o método de
Gardner (1985).
2.1. Simulação baseada em Física
A forma assumida pelas nuvens ao longo do tempo depende principalmente das
condições ambientais onde as mesmas são formadas, tais como o movimento do ar, a
temperatura e a umidade [Miyazaki 2001]. Pesquisadores vêm desenvolvendo técnicas
capazes de simular a dinâmica de fluidos envolvida na formação e no movimento das
nuvens, assim como de outros gases. Tais simulações levam em conta parâmetros como
interação da temperatura, do vento e da umidade em cada partícula para modelar
diversas classes de nuvens.
Um exemplo importante dessa classe de técnica foi desenvolvido por Dobashi
(2000) que utilizou autômatos celulares representados como células em uma grade
retilínea 3D. A evolução das nuvens é simulada pela aplicação de regras de transição no
estado dos autômatos a cada instante de tempo ti. As regras de transição representam a
formação, extinção e movimentação pelo vento, utilizando o estado da vizinhança de
cada célula.
A principal vantagem das abordagens baseadas em Física é o realismo da
animação. O método de Dobashi foi pioneiro na exibição de volumes de luz (shafts of
light) entre as nuvens, com bons resultados em cenas ensolaradas. No entanto, a taxa de
exibição de 30 segundos por quadro obtida por essa técnica não a torna apropriada para
o rendering interativo [Schpok 2003]. Entretanto, o uso de simplificações matemáticas
pode ser aliado aos recursos do hardware gráfico programável para melhorar o
desempenho das simulações [Stam 1999].
2.2. Geração procedural
As abordagens procedurais para geração de nuvens tentam reproduzir a forma da nuvem
através de primitivas matemáticas ou heurísticas, sem se preocupar com os processos
físicos envolvidos. Dentre essas abordagens, podemos citar funções volumétricas
implícitas [Ebert 1994], fractais, síntese de Fourier e ruído [Perlin 1985] para criar a
estrutura básica das nuvens.
Essas técnicas têm como vantagem a simplicidade na implementação quando
comparadas às técnicas baseadas em Física, além de apresentarem desempenho
superior, já que não exigem muitos cálculos complexos. A desvantagem é o processo de
ajuste dos parâmetros para as heurísticas matemáticas que formarão as nuvens. Esse
processo geralmente não é muito intuitivo, consistindo de etapas de tentativa e erro para
se produzir imagens e animações realistas.
Um dos métodos clássicos de geração de texturas procedurais é o ruído de Perlin
(Perlin noise) (1985, 2002). Texturas procedurais 2D ou 3D são texturas geradas por
um procedimento matemático que tenta imitar o comportamento natural de certos
fenômenos naturais. A idéia básica do ruído de Perlin é a combinação de números
pseudo-aleatórios (ruídos) de diferentes frequências e amplitudes, como mostra a Figura
2 através de um exemplo 1D.
Figura 2. Sinais ou funções de diferentes freqüências e amplitudes. A
combinação resultante mantém características das funções de entrada.
Muitas abordagens utilizam elipsóides volumétricos para modelar inicialmente a
nuvem, adicionando, depois, os detalhes proceduralmente [Elinas 2001, Ebert 1994].
Entre estas encontra-se o sistema desenvolvido por Schpok (2003) para modelagem,
animação e rendering de nuvens proceduralmente. O sistema possui uma interface
gráfica, a qual permite que artistas simulem diversos tipos de nuvens ajustando
parâmetros de alto nível, como o tipo da nuvem.
2.3. Rendering de nuvens
A simulação baseada em Física ou a geração procedural fornece como resultado um
volume de dados, partículas ou densidades, representando as nuvens [Táxen 1999]. De
posse desse volume de dados, o processo de rendering consiste em transformar os
valores de cada elemento de dado em valores de cor (RGB, por exemplo), passando-os
ao frame-buffer. Para isso, faz-se necessária a tonalização (shading) e a combinação
(blending) para gerar a cor final dos pixels correspondentes às nuvens, juntamente com
o restante da cena.
Segundo Liao (2002), o maior desafio do rendering de nuvens é obter imagens
com qualidade fotorrealística. Para isso, o modelo de iluminação deve aproximar os
processos físicos envolvidos na interação da luz com as partículas das nuvens,
aproximando portanto, os processos de espalhamento (scattering ou dispersão) e
absorção de luz, considerando também sombras. A dispersão da luz pode ser simples ou
múltipla. A dispersão simples simula a reflexão da luz através do meio (i.e., as
partículas das nuvens) em uma única direção, geralmente a direção de observação. Já a
dispersão múltipla se dá em todas as direções (ou em uma amostragem destas), é mais
complexa e custosa de calcular, mas é mais correta no que diz respeito aos cálculos
físicos.
Uma técnica interessante nessa linha é adotada por Harris (2001) e se concentra
em produzir nuvens estáticas para utilização em simuladores de vôo e jogos. Esta
técnica assume que as partículas das nuvens são estáticas, ou seja, não é abordado o
problema da animação. Em uma etapa de pré-processamento, o método de Harris
calcula a quantidade de luz incidente em cada partícula P, utilizando uma aproximação
do processo de espalhamento da luz, visto que o cálculo leva em conta um subconjunto
pequeno de direções possíveis de raios, em volta da direção da luz. Os valores de
iluminação calculados são então armazenados e utilizados no rendering e shading da
cena, executada em tempo real. Para o rendering das partículas na cena são usados
impostores ou billboards, gerados dinamicamente. Billboards são polígonos semitransparentes, renderizados geralmente de acordo com a posição da câmera. Impostores
são freqüentemente utilizados em jogos a fim de simplificar o rendering de objetos
complexos (como plantas, por exemplo), aumentando assim o desempenho na geração
das cenas. Posteriormente, o método de Harris foi estendido por Wang (2003), onde
artistas modelam em torno de 12 diferentes tipos de nuvens através de uma interface
especialmente desenvolvida. Assim como no método de Harris, o rendering é feito
através de billboards, nesse caso estáticos e dispostos em volta do observador.
3. Técnica Desenvolvida
Este trabalho propõe a implementação de técnicas para as 3 classes de diferentes
problemas mencionados anteriormente quando do rendering de nuvens. Esta seção
aborda com detalhes os problemas enfrentados e as soluções utilizadas.
3.1. Modelagem
Na modelagem, as técnicas que tentam aproximar a forma e o comportamento das
nuvens através de modelos físicos podem produzir resultados mais realistas. No entanto,
o custo computacional muitas vezes é proibitivo para aplicações em tempo real. Neste
trabalho são utilizadas abordagens procedurais, que normalmente apresentam melhor
performance e são mais simples de implementar, porém demandam ajustes finos em
parâmetros para produzir bons resultados. Além disso, com a geração procedural, o
usuário não fica restrito às leis da Física. É importante notar a independência entre a
modelagem, a animação e o rendering de nuvens. Isso porque é possível modelá-las
utilizando uma técnica procedural, por exemplo, e gerar as imagens utilizando
simulação de processos óticos.
A técnica desenvolvida envolve a utilização do ruído de Perlin para a
modelagem das nuvens. Utilizando a API gráfica OpenGL, a nuvem volumétrica é
representada como uma textura 3D que pode ser entendida como um conjunto de
imagens (fatias) 2D. A textura 3D contém um total de n elementos (voxels), sendo n o
produto do número de fatias, número de linhas e número de colunas (n = nfatias *
nlinhas * ncolunas). Cada fatia é gerada proceduralmente através de ruído, como
ilustrado na Figura 3. O ruído de Perlin possui a característica de, dado um mesmo
parâmetro que o controla, gerar sempre um mesmo número. Na geração das fatias, são
utilizadas as coordenadas 3D de cada voxel como parâmetro de entrada para a função de
ruído. Parâmetros adicionais são utilizados para controlar o processo, como o número
de oitavas de ruído diferentes, além de um fator de escala da amplitude do sinal.
Figura 3. Processo de modelagem da nuvem 3D. O valor de cada voxel é
resultado da função Perlin3D.
A escolha arbitrária para esses parâmetros é uma desvantagem desse método. No
entanto ele é capaz de gerar resultados convincentes sem a complexidade de
implementação intrínseca de abordagens baseadas em Física. A solução proposta neste
trabalho inicialmente gera de forma procedural duas (ou mais) texturas 3D que serão
utilizadas nos próximos estágios, discutidos nas seções a seguir.
3.2. Rendering
Para o rendering, inicialmente foi utilizada a técnica tradicional de visualização direta
de volumes utilizando uma geometria de amostragem baseada em planos ortogonais à
direção de observação [Gelder 1996]. Esses planos são polígonos que amostram as
coordenadas das texturas 3D, interpoladas na rasterização (Figura 4).
Com a crescente capacidade das placas gráficas atuais, é possível desenvolver
aplicações interativas utilizando rendering direto de volumes, e dessa forma, gerar
imagens mais realistas. No entanto, o desempenho nessa abordagem é afetado
principalmente pela resolução da textura 3D e pela quantidade de planos de amostragem
utilizados. O algoritmo utilizado para a geração dos planos de amostragem é
denominado WSG (Weighted Sweep Graph), e foi desenvolvido por Dietrich et al.
(2004). Após a rasterização, os planos resultam em fragmentos (candidatos a pixels).
Para cada fragmento, um programa de fragmento é executado no processador gráfico da
placa (GPU), buscando o valor correspondente na textura 3D. A combinação deste
valores de trás para frente (blending) é responsável pela composição dos fragmentos e
geração da imagem resultante.
Figura 4. Processo de rendering da nuvem 3D. O pipeline é similar ao utlizado
na visualização volumétrica direta.
Apesar dessa técnica gerar imagens de boa qualidade (Figura 5), uma vez que
considera todos (ou a maioria) os voxels da textura 3D que representa a nuvem, o
excessivo número de fragmentos gerados impacta no desempenho da simulação. Uma
alternativa para a solução desse problema é a redução das fatias de amostragem da
textura. No entanto, com poucas fatias, os intervalos entre elas se tornam maiores e é
possível enxergá-los, o que reduz o realismo da simulação.
Figura 5. Imagens geradas utilizando a abordagem de slicing da textura 3D
A fim de diminuir a taxa de exibição de quadros na animação, buscando taxas
mais interativas, foi implementada uma técnica adicional de rendering, que apresentou
uma melhora considerável no desempenho, além de permitir a exibição de uma
quantidade maior de nuvens na cena.
Essa técnica utiliza impostores ou billboards como geometria de amostragem
para a textura 3D. Os impostores são renderizados no espaço de tela, de acordo com a
direção de visualização, e são paralelos entre si, como ilustra a Figura 6. Ao contrário da
abordagem de Harris (2001), os impostores não são gerados dinamicamente; no entanto,
poucos deles (em torno de 3) são suficientes para gerar imagens de qualidade, e ainda
assim possibilitar a imersão nas mesmas. Da mesma forma que na abordagem baseada
em fatias, os billboards passam o estágio de rasterização e os fragmentos gerados
buscam sua cor na textura 3D e são combinados também de trás para frente.
Figura 6. Processo de rendering da nuvem através de impostores renderizados
no espaço de tela. A mudança na direção de visualização resulta na atualização
(redesenho) dos mesmos.
3.3. Animação
Para a animação das nuvens ao longo do tempo, foi escolhida a técnica conhecida como
morphing ou transformação [Lerios 1995] ao invés da simulação Física. Essa técnica foi
utilizada anteriormente para combinar dois objetos representados por dados
volumétricos. No entanto, não havia sido aplicada para a animação de nuvens. Neste
trabalho a técnica de morphing entre duas texturas 3D é implementada utilizando os
recursos do hardware gráfico programável, responsável pelo cálculo da animação.
Como o foco do trabalho são as aplicações em tempo real e as abordagens de utilizam o
hardware normalmente possuem uma performance superior às implementadas em
software, decidiu-se implementar a animação das nuvens como um programa de
fragmentos executado na GPU. Foi utilizada a linguagem CG (C for Graphics) para a
implementação do programa de fragmentos.
Dessa forma, são utilizadas as extensões ao OpenGL correspondentes aos
programas de vértice e de fragmento (vertex e fragment program). O morphing entre
duas ou mais nuvens (uma representando a nuvem inicial e a outra, a final) é executado
através de um fragment program, como mostra a Figura 7, para cada fragmento gerado.
O morphing, então, funciona da seguinte forma. É escolhida a nuvem inicial e a
final. A nuvem em um instante de tempo t é o resultado da interpolação linear entre as
nuvens inicial e final, cuja forma é:
corResultante(t) = (1-t) * corNuvemInicial + corNuvemFinal * t
Ou seja, o fragmento utiliza suas coordenadas e textura para buscar o valor de cor em
ambas as texturas, e com base em t calcula o valor final a ser escrito no frame-buffer.
Quando t = 0, a nuvem resultante é igual à inicial; quando t = 1, a resultante é a nuvem
final. É especificado também um incremento para t, que controla a velocidade do
morphing entre as nuvens.
4. Resultados
Os testes foram realizados em um PC com processador Pentium III com 1GHz de clock,
512 MB de memória e placa gráfica GeForce FX 5200. Foi implementado um ambiente
em OpenGL representando uma cena ao ar livre. As nuvens 3D foram então adicionadas
à cena (Figura 8). A animação foi executada a uma taxa média de 19 quadros por
segundo, utilizando de 3 a 6 impostores para o rendering. As Figuras 9 e 10 também
ilustram a utilização dos billboards na cena.
Figura 7. Processo de rendering e morphing da nuvem 3D. A função lerp
calcula a cor final do fragmento com base nas texturas A e B.
Figura 8. As imagens da esquerda (superior e inferior) representam cenas sem
nuvens. Nas da direita foram acrescentadas nuvens renderizadas através de
billboards.
Em relação à técnica de visualização volumétrica através de fatias, foi obtida
uma taxa entre 3 e 30 quadros por segundo, dependendo do número de fatias geradas.
Com um número grande de fatias (em torno de 1000), o resultado visual foi semelhante
ao obtido com os impostores, no entanto o desempenho foi consideravelmente melhor.
Isso porque os impostores geram muito menos fragmentos e a combinação (blending)
dos mesmos é uma operação custosa. Em ambos os casos o morphing foi utilizado para
a animação, sem apresentar quedas no desempenho global. Para as texturas 3D, foram
utilizados volumes cujas dimensões variaram de 323 até 2563. Tais dimensões resultam
em nuvens com maior ou menor resolução, porém são limitadas pelo tamanho da
memória da placa gráfica onde são armazenadas. Através do ajuste na função de ruído,
foram modelados diferentes tipos de nuvens, desde as mais suaves às mais irregulares.
Os resultados dos testes de desempenho realizados são ilustrados na Figura 11.
(a)
(b)
Figura 9. (a) Estágio inicial da animação (morphing), onde o parâmetro t é
próximo de zero. (b) Estágio intermediário/final da animação, onde t é próximo
de 0.8.
Figura 10. Diferentes tipos de nuvens obtidas através da alteração dos
parâmetros da função de ruído. Basicamente, a escala do ruído controla a
suavidade (ou irregularidade) dos padrões das nuvens.
(a)
(b)
Figura 11. Resultados dos testes realizados com uma textura 3D de resolução
2563. (a) Abordagem utilizando a WSG para o rendering e (b) abordagem
utilizando impostores.
5. Conclusões e Trabalhos Futuros
Neste trabalho foi abordado o problema da modelagem, animação e rendering de
nuvens volumétricas dinâmicas, e apresentadas técnicas implementadas utilizando o
hardware gráfico programável, visando aplicações em tempo real. Dentre essas técnicas
foi implementada a de morphing entre texturas 3D para a animação das nuvens, além da
modelagem procedural e o rendering baseado em fatias. É importante ressaltar que, para
aplicações em tempo real, o rendering de nuvens deve utilizar apenas uma pequena
porcentagem do tempo de geração de um quadro, visto que normalmente cenas ao ar
livre apresentam muitos outros objetos a serem renderizados. Ao contrário das
abordagens baseadas em environment mapping, as técnicas apresentadas nesse artigo
possibilitam a imersão do observador em nuvens volumétricas (3D) em tempo real.
Como trabalhos futuros, espera-se incrementar a técnica de modelagem de
nuvens. Ferramentas de mais alto nível poderiam ajustar mais intuitivamente os
parâmetros da função de ruído, e dessa forma gerar uma variedade maior de nuvens.
Inclusive, poderiam ser gerados outros efeitos volumétricos proceduralmente (como
neblina, fumaça, nebulosas espaciais, etc.) para aplicações em tempo real. Outra
extensão possível às técnicas descritas nesse artigo envolve a adição de um modelo de
iluminação mais realista, que levasse em conta o espalhamento da luz nas partículas da
nuvem, por exemplo. Cabe lembrar que o uso de um modelo muito complexo de
iluminação poderia impactar negativamente no desempenho global da cena.
Agradecimentos
À CAPES, CNPq e nVidia por suportarem parcialmente este trabalho.
Referências
Dietrich, C.A. et al. (2004) “Real-time interactive visualization and manipulation of
volumetric data using GPU-based methods”. SPIE Medical Imaging, San Diego,
USA. (in press).
Dobashi, Y. et al. (2000) “A Simple, Efficient Method for Realistic Animation of
Clouds”, In: Proceedings of ACM SIGGRAPH, p. 19-28.
Ebert, D. et. al. (1994) “Texturing and Modeling: A procedural Approach”. In: AP
Professional. p. 332.
Elinas, P. and Stuerzlinger, W. (2001) “Real-Time Rendering of 3D Clouds”. In:
Journal of Graphics Tools, p. 33-45.
Gardner, G. (1985) "Visual Simulation of Clouds." In: Proceedings of ACM
SIGGRAPH, Addison Wesley, p. 297-303.
Gelder, A. V. and Kim, K. (1996) “Direct Volume Rendering with Shading via 3D
Textures”, In: Symposium on Volume Visualization, p. 23-30, San Francisco, CA.
Harris, M. and Lastra, A. (2001) “Real-Time Cloud Rendering”. EUROGRAPHICS
2001, Volume 20, Number 3.
Harris, M., Coombe, G., Scheuermann, T. and Lastra, A. (2002) "Physically-Based
Visual Simulation on Graphics Hardware". In: ACM SIGGRAPH/Eurographics
Workshop on Graphics Hardware, p. 109-118.
Illinois (2002) Department of Atmospheric Sciences. University of Illinois. Disponível
em http://ww2010.atmos.uiuc.edu/(Gh)/guides/mtr/cld/home.rxml acessado em 2003.
Miyazaki, R., Yoshida, S., Dobashi, Y. and Nishita, T. (2001) “A Method for Modeling
Clouds based on Atmospheric Fluid Dynamics”. In: Proceedings of Pacific Graphics,
p. 363-372.
Lerios, A., Garfinkle, C. D., Levoy, M., (1995) “Feature-Based Volume
Metamorphosis”. In: Proceedings of SIGGRAPH, p. 449-456.
Liao, H. S., Chuang, J. H. and Lin, C. C. (2002) “Efficient Rendering of Dynamic
Clouds”. CVGIP, Agosto de 2002.
Perlin, K. (1985) “An Image Synthesizer”. In: ACM SIGGRAPH Computer Graphics,
v. 19, n. 3, p. 287-296.
Perlin, K. (2002) “Improving Noise”. In: Proceedings of ACM SIGGRAPH, p. 681-682.
Schpok, J., Simons J., Ebert, D. and Hansen, C. (2003) “A Real-Time Cloud Modeling,
Rendering and Animation System”. In: Proceedings of ACM SIGGRAPH, p. 160166.
Stam, J. (1999) “Stable Fluids”. In: Proceedings of ACM SIGGRAPH, p. 121-128.
Taxen, G. (1999) “Cloud Modeling for Computer Graphics”, Master's Thesis, Royal
Institute of Technology, Stockholm, Sweden, 1999.
Wang, N. (2003) “Realistic and Fast Cloud Rendering in Computer Games”. ACM
SIGGRAPH Sketch, 2003. Disponível em http://www.ofb.net/~eggplant/clouds/.
Acessado em novembro/2003.
Watt, A. (2000), 3D Computer Graphics, Addison Wesley, 2000.
Download