Vinheta e granulação
Escurecer os cantos do quadro e salpicá-lo de ruído em movimento, as duas marcas que uma câmera de verdade deixa na imagem.
Cards
Um exemplo ao vivo para ajustar, aprender e copiar.
Como funciona
Lentes de verdade deixam passar menos luz nos cantos do quadro do que no meio, então fotos e filmes escurecem perto das bordas. Essa queda é a vinheta. O filme acrescenta uma textura própria por cima: a imagem é feita de cristais minúsculos sensíveis à luz, espalhados ao acaso e diferentes em cada quadro, o que aparece como um grão fino em movimento. Sensores digitais têm um primo disso, o ruído, mais forte nas sombras.
Os dois são baratos de imitar numa passada de pós-processamentoPassadas 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. 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.
- Vinheta. Medir a distância de cada pixel até o centro, com a proporção da tela corrigida para a forma continuar
redonda, e passá-la por 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)Fontespara ter um anel suave que reduz a cor. Ela enquadra o assunto e esconde o visual chapado e digital de cantos com luz uniforme.- smoothstep (abre em uma nova aba)Referência
- Smoothstep (abre em uma nova aba)Referência
- Granulação. Um hashUma função que embaralha a entrada num valor que parece aleatório, mas é sempre o mesmo para a mesma entrada. Shaders a usam para ter aleatoriedade por pixel e por célula.Fundamento
Hash
Uma função que embaralha a entrada num valor que parece aleatório, mas é sempre o mesmo para a mesma entrada. Shaders a usam para ter aleatoriedade por pixel e por célula.
h = fract(sin(dot(p, k)) × big)da posição do pixel e do número do quadro dá um valor aleatório diferente por pixel e por quadro. Em pequena escala, somado ou multiplicado na cor, ele parece filme. Ele também quebra o bandingBanding são as faixas em que um degradê suave se parte quando guardado com poucos níveis. O dithering soma um ruído minúsculo por pixel antes do arredondamento, e as faixas viram uma granulação fina.RenderizaçãoBanding e dithering
Banding são as faixas em que um degradê suave se parte quando guardado com poucos níveis. O dithering soma um ruído minúsculo por pixel antes do arredondamento, e as faixas viram uma granulação fina.
Fontesem degradês suaves, do mesmo jeito que o dither.- Colour banding (abre em uma nova aba)Referência
- Ordered dithering (abre em uma nova aba)Referência
O Unity e o Unreal trazem os dois prontos; o Godot não traz nenhum. Escrevê-los você mesmo faz sentido nele, na web, para um visual que o nativo não oferece (a cintilação de um projetor, um filme tingido) ou para controlar em que ponto da cadeia eles rodam: depois do tone mapping, para o grão não ser comprimido junto com os brilhos.
Leitura complementar
- Random (abre em uma nova aba)Livro
- Hash Functions for GPU Rendering (abre em uma nova aba)Paper
- step (abre em uma nova aba)Referência
- smoothstep (abre em uma nova aba)Referência
- Shaping functions (abre em uma nova aba)Livro
- gl_FragCoord (abre em uma nova aba)Referência
- Uniforms (abre em uma nova aba)Livro
- UV mapping (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
- Vignetting (abre em uma nova aba)Referência
- Film grain (abre em uma nova aba)Referência
- MurmurHash3 (abre em uma nova aba)Referência
- Relative luminance (abre em uma nova aba)Referência
- length (abre em uma nova aba)Referência