Bloom
Deixar a luz mais forte do que a tela consegue mostrar vazar para os arredores, com uma cópia desfocada só dos pixels mais claros.
Cards
Um exemplo ao vivo para ajustar, aprender e copiar.
Como funciona
Uma lente de câmera e o olho espalham um pouco de toda luz pela área em volta. Ninguém repara nisso numa parede cinza, mas em volta de uma lâmpada, de um letreiro de neon ou do sol a luz espalhada é forte o bastante para aparecer: um halo suave que faz a fonte parecer mais clara que o branco da tela. O bloom imita esse halo, e é o principal motivo para um renderizador guardar cores acima de 1.
A receita tem três partes:
- Passada de brilho. Manter só os pixels cujo brilho passa de um limiar, em geral perto de 1, e apagar o resto.
Sem valores acima de 1 não há como distinguir uma lâmpada de uma camisa branca, e é por isso que o bloom precisa de
uma cena em HDRA renderização mantém valores de luz acima de 1 em buffers float (HDR), e depois uma curva de tone mapping os comprime nos 0–1 que uma tela consegue mostrar.Renderização
HDR e tone mapping
A renderização mantém valores de luz acima de 1 em buffers float (HDR), e depois uma curva de tone mapping os comprime nos 0–1 que uma tela consegue mostrar.
Reinhard = c / (1 + c)Fontes. - Desfoque. Espalhar o que sobrou com um desfoque largo, quase sempre em meia resolução ou menos, porque o halo é suave e um raio grande em resolução cheia sai caro. As engines encadeiam vários tamanhos e somam todos, para o halo ter um núcleo forte e uma cauda longa e fraca.
- Composição. Somar o desfoque de volta ao quadro original e depois aplicar o tone mapping, já que a soma fica ainda mais clara.
Cada parte é uma passada própria, com um render targetUma textura em que um desenho escreve no lugar da tela, para uma passada seguinte ler o resultado. Blur, bloom e todo efeito com várias passadas usam isso. Render target Uma textura em que um desenho escreve no lugar da tela, para uma passada seguinte ler o resultado. Blur, bloom e todo efeito com várias passadas usam isso. Cadeia de pós-processamento Passadas de tela cheia rodadas em ordem sobre o quadro pronto, cada uma lendo a imagem que a anterior escreveu. Bloom, tone mapping e correção de cor ficam aqui.
Leitura complementar
- Mipmap (abre em uma nova aba)Referência
- Anisotropic filtering (abre em uma nova aba)Referência
- textureLod (abre em uma nova aba)Referência
- Kernel (image processing) (abre em uma nova aba)Referência
- Gaussian blur (abre em uma nova aba)Referência
- Sobel operator (abre em uma nova aba)Referência
- step (abre em uma nova aba)Referência
- smoothstep (abre em uma nova aba)Referência
- Shaping functions (abre em uma nova aba)Livro
- HDR (abre em uma nova aba)Artigo
- Environment and post-processing (abre em uma nova aba)Documentação
- Khronos PBR Neutral Tone Mapper (abre em uma nova aba)Referência
- Framebuffers (abre em uma nova aba)Artigo
- Bloom (abre em uma nova aba)Artigo
- Custom post-processing (abre em uma nova aba)Documentação
- glFramebufferTexture2D (abre em uma nova aba)Referência
- EXT_color_buffer_float extension (abre em uma nova aba)Documentação
- Bloom (shader effect) (abre em uma nova aba)Referência
- Next Generation Post Processing in Call of Duty: Advanced Warfare (abre em uma nova aba)Paper
- Relative luminance (abre em uma nova aba)Referência