Fogo e chamas
Ruído subindo dentro de uma máscara com forma, com o resultado levado a uma paleta quente que vai do vermelho escuro ao branco.
Cards
Um exemplo ao vivo para ajustar, aprender e copiar.
Como funciona
Uma chama é gás quente subindo. Ela é estreita onde começa, tremula mais quanto mais alto vai, e a cor diz quão quente está cada parte: vermelho escuro nas bordas que esfriam, laranja, depois amarelo e quase branco na região mais quente, a mesma ordem pela qual passa um pedaço de metal aquecido. Um shader de fogo reconstrói cada uma dessas observações com um pedacinho de matemática, e todo efeito de fogo, de uma vela a uma tocha ou uma bola de fogo, é o mesmo trio de peças arranjado de outro jeito.
- Uma máscara com forma. Um smoothstepUm limiar suave. Vale 0 abaixo da primeira borda, 1 acima da segunda e segue uma curva em S com as pontas planas entre elas.Fundamento
Smoothstep
Um limiar suave. Vale 0 abaixo da primeira borda, 1 acima da segunda e segue uma curva em S com as pontas planas entre elas.
t = clamp((x − e0) / (e1 − e0), 0, 1); s = t² (3 − 2t)Fontesem volta de uma distância dá o contorno da chama: uma gota para uma vela, um cone largo para uma fogueira, um círculo para uma bola de fogo. Curvas de modelagem (uma raiz quadrada, uma potência, um menos a altura) deixam o perfil redondo embaixo e pontudo em cima.- smoothstep (abre em uma nova aba)Referência
- Smoothstep (abre em uma nova aba)Referência
- Ruído subindo. Um fBmUma soma de várias cópias de um ruído, cada uma com frequência maior e força menor que a anterior, para que o resultado tenha detalhes em vários tamanhos ao mesmo tempo, como nuvens, fumaça ou terreno.Fundamento · Ruído
Movimento browniano fractal (fBm)
Uma soma de várias cópias de um ruído, cada uma com frequência maior e força menor que a anterior, para que o resultado tenha detalhes em vários tamanhos ao mesmo tempo, como nuvens, fumaça ou terreno.
fbm(p) = Σ gainᵏ · noise(lacunarityᵏ · p)cuja coordenada rola para cima com o tempo empurra a máscara para os lados e a quebra em línguas. Empurrar mais perto do topo do que da base mantém a base ancorada e deixa a ponta chicotear, e é isso que faz a forma parecer fogo e não algo só balançando. - Uma paleta quente. A máscara e o ruído juntos dão um valor de calor entre 0 e 1. Uma paleta o converte em cor, do preto ao vermelho, laranja, amarelo e branco, então o mesmo número controla a forma e a cor, e as cores ficam sempre na ordem certa.
Sobre uma cena
Fogo é luz. Desenhado opaco, ele precisa de um fundo preto, e é assim que os cards o mostram primeiro. Num jogo, ele vai
num quad virado para a câmera ou numa partícula com misturaCombinar a cor que o shader de fragmento devolve com a cor que já está no framebuffer, em vez de substituí-la. Transparência, brilho aditivo e multiplicação vêm daí. Blending Combinar a cor que o shader de fragmento devolve com a cor que já está no framebuffer, em vez de substituí-la. Transparência, brilho aditivo e multiplicação vêm daí.result = src × srcFactor + dst × dstFactor
Leitura complementar
- Fractal Brownian Motion (abre em uma nova aba)Livro
- fBM (abre em uma nova aba)Artigo
- Fractional Brownian motion (abre em uma nova aba)Referência
- Palettes (abre em uma nova aba)Artigo
- Colors (abre em uma nova aba)Livro
- Shaping functions (abre em uma nova aba)Livro
- Useful little functions (abre em uma nova aba)Artigo
- pow (abre em uma nova aba)Referência
- Uniforms (abre em uma nova aba)Livro
- Window: requestAnimationFrame() method (abre em uma nova aba)Documentação
- The OpenGL ES Shading Language, version 3.00 (abre em uma nova aba)Documentação
- Blending (abre em uma nova aba)Artigo
- WebGLRenderingContext: blendFunc() method (abre em uma nova aba)Documentação
- Spatial shaders (abre em uma nova aba)Documentação
- Flame (abre em uma nova aba)Referência
- Black-body radiation (abre em uma nova aba)Referência
- smoothstep (abre em uma nova aba)Referência
- mix (abre em uma nova aba)Referência
- CanvasItem shaders (abre em uma nova aba)Documentação
- Shading language (abre em uma nova aba)Documentação