Ambiente e pós-processamento

Godot 3 fornece um recurso de ambiente redesenhado, bem como um novo sistema de pós-processamento com muitos efeitos disponíveis imediatamente.

Ambiente

O recurso Ambiente armazena todas as informações necessárias para controlar o ambiente de renderização. Isso inclui céu, iluminação ambiente, mapeamento de tom, efeitos e ajustes. Por si só não faz nada, mas fica habilitado uma vez usado em um dos seguintes locais em ordem de prioridade:

Nó de câmera

Um ambiente pode ser definido para uma câmera. Ele terá prioridade sobre qualquer outra configuração.

../../_images/environment_camera.png

Isso é útil principalmente quando se deseja substituir um ambiente existente, mas, em geral, é uma ideia melhor usar a opção abaixo.

Nó WorldEnvironment

O nó WorldEnvironment pode ser adicionado a qualquer cena, mas apenas um pode existir por árvore de cena ativa. Adicionar mais de um resultará em um alerta.

../../_images/environment_world.png

Qualquer ambiente adicionado tem prioridade mais alta que o ambiente padrão (explicado abaixo). Isso significa que pode ser substituído por cena, o que o torna bastante útil.

Ambiente padrão

Um ambiente padrão pode ser definido, que atua como um padrão quando nenhum ambiente for definido na Camera ou no WorldEnvironment. Basta ir para Configurações do projeto -> Renderização -> Ambiente:

../../_images/environment_default.png

Novos projetos criados a partir do Gerenciador de Projetos vêm com um ambiente padrão (default_env.tres). Se for necessário criar um, salve-o no disco antes de referenciá-lo aqui.

Opções de ambiente

A seguir está uma descrição detalhada de todas as opções de ambiente e como elas devem ser usadas.

Plano de Fundo

A seção Plano de fundo contém configurações de como preencher o plano de fundo (partes da tela onde os objetos não foram desenhados). No Godot 3.0, o plano de fundo não serve apenas para exibir uma imagem ou cor, mas também pode alterar como os objetos são afetados pela luz ambiente e refletida.

../../_images/environment_background1.png

Há muitas maneiras de definir o fundo:

  • Clear Color usa a cor padrão definida pelo projeto. O fundo será uma cor constante.

  • Custom Color é como o Clear Color, mas com um valor de cor personalizado.

  • Céu permite definir um céu panorama (uma textura de esfera em 360 graus) ou um céu procedural (um céu simples com um gradiente e um sol opcional). Os objetos refletirão e absorverão a luz ambiente dele.

  • Color+Céu permite definir um céu (como acima), mas usa um valor de color constante para desenhar o plano de fundo. O céu será usado apenas para reflexão e luz ambiente.

Luz ambiente

Ambiente (conforme definido aqui) é um tipo de luz que afeta todas as partes da geometria com a mesma intensidade. É global e independente de luzes que possam ser adicionadas à cena.

Há dois tipos de luz ambiente: A Cor Ambiente (que é uma cor constante multiplicada pelo albedo do material) e a obtida através do Céu (como dito antes, porém um céu precisa ser definido como plano de fundo para que isso possa ser habilitado).

../../_images/environment_ambient.png

Quando um Sky é definido como plano de fundo, é possível mesclar entre a cor ambiente e o céu usando a configuração Sky Contribution (o valor é 1.0 por padrão por conveniência, logo apenas o céu afeta os objetos).

Aqui está uma comparação de como a luz ambiente diferente afeta uma cena:

../../_images/environment_ambient2.png

Finalmente, há uma configuração de Energia, sendo um multiplicador. É útil ao trabalhar com HDR.

No geral, luz ambiente só deve ser usada para cenas simples, exteriores grandes ou em razão de performance (luz ambiente é leve), já que ela não entrega a melhor qualidade de iluminação. É melhor gerar a luz ambiente de um ReflectionProbe ou GIProbe, que vão simular fielmente a forma com que a luz indireta se propaga. Abaixo há uma comparação, em termos de qualidade, entre usar uma cor ambiente única e um GIProbe:

../../_images/environment_ambient_comparison.png

Usando um dos métodos descritos acima, os objetos obtêm iluminação ambiente constante substituída pela luz ambiente das sondas.

Névoa

A névoa, como na vida real, faz com que objetos distantes desapareçam em uma cor uniforme. O efeito físico é bastante complexo, mas Godot fornece uma boa aproximação. Existem dois tipos de névoa em Godot:

  • Depth Fog: Este é aplicado com base na distância da câmera.

  • Height Fog: Este é aplicado a qualquer objeto abaixo (ou acima) de uma certa altura, independentemente da distância da câmera.

../../_images/environment_fog_depth_height.png

Ambos os tipos de névoa podem ter sua curva ajustada, tornando sua transição mais ou menos nítida.

Duas propriedades podem ser ajustadas para tornar o efeito de névoa mais interessante:

A primeira é Sun Amount, que faz uso da propriedade de Cor do Sol na névoa. Quando olhando em direção a uma luz direcional (geralmente um sol), a cor da névoa mudará, simulando a luz do sol passando pela névoa.

O segundo é Transmit Enabled, que simula uma transmitância de luz mais realista. Na prática, faz com que a luz se destaque mais no nevoeiro.

../../_images/environment_fog_transmission.png

Mapa de Tons

Esta característica só está disponível quando se utiliza o backend GLES3.

Seleciona a curva de tonalidade que será aplicada a cena, de uma lista de curvas padrão de indústria usadas em filmes e jogos. Mapas de tonalidade fora do linear são usados para tornar as áreas claras e escura mais homogêneas, além de também evitar estourar a luz em áreas de destaque.

As opções de mapeamento de tom são:

  • Mode: O modo de mapeamento de tom a ser usado.

    • Linear: É o método padrão de mapeamento do tom. É o mais rápido e mais simples operador de mapeamento de tom, mas isto faz com que cores brilhantes fiquem estouradas, com recorte perceptível nas cores de saída.

    • Reinhardt: Executa uma variação nas cores dos pixels renderizados através desta fórmula: color = color / (1 + color). Isso evita cortes com realces brilhantes, mas a imagem resultante pode parecer um pouco sem brilho.

    • Filmic: Este evita estourar os destaques muito claros, resultando numa imagem que geralmente parece mais vívida do que o Reinhardt.

    • ACES Fitted: Mapa de tonalidade Academy Color Encoding System. ACES Fitted é levemente mais pesado que as outras opções, mas lida com a iluminação clara de uma forma mais realista ao dessaturar a medida que ela fica mais clara. ACES normalmente gera uma imagem mais contrastada se comparada ao Reinhardt e Filmic. ACES é a opção recomendada quando se esta buscando um visual fotorrealista.

    • ACES: Descontinuado (Será removido no Godot 4.0). Se comporta como ACES, mas não dessatura a luz a medida que ela fica mais clara (o que é menos realista). É recomendado usar o ACES Fitted ao invés do ACES.

  • Exposição: Exposição do mapa de tonalidade que simula a quantidade de luz recebida ao longo do tempo (padrão 1.0). Valores mais altos resultam em uma aparência mais clara num geral. Caso a cena aparente muito escura por conta do mapa de tonalidade ou da mudança do ponto branco, tente aumentar levemente este valor.

  • Branco: Ponto branco do mapa de tonalidade, que simula aonde o branco está na escala (padrão:1.0). Para uma iluminação fotorrealista, é recomendado usar valores entre 6.0 e 8.0. Valores mais altos resultam em luzes de destaque menos estouradas, mas faz com que a cena aparente ligeiramente mais escura como um todo.

Exposição automática (HDR)

Esta característica só está disponível quando se utiliza o backend GLES3.

Mesmo que, na maioria dos casos, iluminação e texturização são fortemente controladas pelos artistas, a Godot suporta uma implementação simples do HDR com um mecanismo de auto exposição. Isso geralmente é usado em favor do realismo quando combinamos áreas internas com baixa iluminação e exteriores. Auto exposição simula uma câmera (ou olho) na tentativa de se adaptar entre locais claros e escuros e suas diferentes intensidades de luz.

../../_images/environment_hdr_autoexp.gif

A forma mais fácil de usar a auto exposição é tendo certeza de que as luzes do exterior (ou outra luz forte) tenha uma energia maior que 1.0. Isso é feito ao ajustar seu multiplicador de Energia (na própria Luz). Para tornar isso consistente, o Céu geralmente precisa usar o multiplicador de energia também, para se alinhar a luz direcional. Normalmente, valores entre 3.0 e 6.0 são o suficiente para simular as condições de interior-exterior.

Ao combinar a Auto Exposição com o efeito de Glow (mais sobre isso a seguir), pixels que vão além do branco do tonemap irão transbordar para o buffer de glow, criando um efeito tipico de irradiação na fotografia.

../../_images/environment_hdr_bloom.png

Os valores controláveis pelo usuário na seção Exposição Automática por padrão vêm valores sensatos, mas você ainda pode ajustá-los:

../../_images/environment_hdr.png
  • Escala: Valor para dimensionar a iluminação. Valores mais brilhantes produzem imagens mais brilhantes, menores produzem imagens mais escuras.

  • Min Luma: Luminância mínima que a exposição automática terá como objetivo ajustar. Luminância é a média da luz em todos os pixels da tela.

  • Max Luma: Luminância máxima que a exposição automática terá como objetivo ajustar.

  • Velocidade: Velocidade na qual a luminância se corrige. Quanto maior o valor, mais rápida acontece a correção.

Efeitos de médio e pós processamento

Uma grande quandidade de efeitos de médio e pós-processamento bastante utilizados são suportados no ambiente.

Reflexos em Espaço de Tela (SSR)

Esta característica só está disponível quando se utiliza o backend GLES3.

Apesar da Godot suportar três fontes de dados de reflexos (Céu, ReflectionProbe e GIProbe), eles podem não oferecer dados suficientes para todas as situações. Cenários onde os Reflexos em Espaço de Tela fazem mais sentido são quando objetos estão em contato entre si (Objetos sobre o chão, sobre uma mesa, flutuando na água, etc...).

../../_images/environment_ssr.png

A outra vantagem (mesmo que ativada no mínimo) é que funciona em tempo real (enquanto os outros tipos de reflexos são pré-computados). Isso pode ser usado para criar personagens, carros, etc... Reflete em superfícies adjacentes ao se mover.

Alguns parâmetros controlados pelo usuário estão disponíveis para melhor ajustar a técnica:

  • Max Steps determinam a distância do reflexo. Quanto maior este número, mais custoso é para se computar.

  • Fade In permite ajustar a curva de aparecimento suave, que é útil para tornar a área de contato mais suave.

  • Fade Out permite ajustar a curva de desaparecimento gradual, para que o limite de passos desapareça suavemente.

  • Tolerância de profundidade pode ser usado para tolerância de batidas de raios-espaço de tela a lacunas. Quanto maior o valor, mais lacunas serão ignoradas.

  • Rugosidade aplicará um desfoque em espaço de tela para aproximar a rugosidade em objetos das características deste material.

Tenha em mente que reflexos em espaço de tela funciona apenas para reflexos de geometrias opacas. Materiais transparentes não serão refletidos, já que eles não escrevem sobre o buffer de profundidade. Isso também se aplica a shaders que usam SCREEN_TEXTURE ou DEPTH_TEXTURE.

Oclusão Ambiente em Espaço de Tela (SSAO)

Esta característica só está disponível quando se utiliza o backend GLES3.

Como mencionado na seção de Ambiente, áreas onde a luz de nós de luz não alcançam (seja porquê estão fora do raio de alcance ou sombreadas), são iluminadas pela luz ambiente. A Godot pode simular isso usando um ProbeGI, ReflectionProbe, o Céu ou uma cor constante de ambiente. O problem, no entanto, é que todos os métodos citados anteriormente agem melhor em larga escala (regiões grandes) do que em uma escala menor de geometria.

Cor constante de ambiente e céu são as mesmas em todo lugar, porém GI e Reflection Probes são detalhes mais localizados, mas não o suficiente para simular situações onde a luz não é capaz de preencher espaços côncavos ou ocos.

Isso pode ser simulado com Oclusão Ambiente em Espaço de Tela. Como podemos ver na imagem abaixo, seu propósito é deixar as áreas concavas mais escuras, simulando um caminho mais estreito para a luz entrar:

../../_images/environment_ssao.png

É um erro comum habilitar este efeito, ligar uma luz e não ser capaz apreciá-lo. Isso é porquê SSAO age apenas sobre luz ambiente,não luz direta.

É por isso que, na imagem acima, o efeito é menos notável sob a luz direta (na esquerda). Se você quer forçar o SSAO a funcionar na luz direta também, use o parâmetro de Light Affect (mesmo que não seja o certo, alguns artistas gostam de como fica).

SSAO fica melhor quando combinado com uma fonte real de luz indireta, como um GIProbe:

../../_images/environment_ssao2.png

Ajustar SSAO é possível com alguns parâmetros:

../../_images/environment_ssao_parameters.png
  • Raio/Intensidade: Para controlar o raio ou a intensidade da oclusão, esses dois parâmetros estão disponíveis. Raio é em unidades do mundo real (Métrico).

  • Raio/Intensidade2: Um raio/intensidade secundário pode ser usado. Combinando um raio pequeno e um grande a OA geralmente funciona bem.

  • Bias: Isso pode ser ajustado para resolver auto oclusão, apesar do padrão num geral funcionar suficientemente bem.

  • Light Affect: SSAO afeta apenas a luz ambiente, mas aumentar esse valor pode fazer com que ele também afete a luz direta. Alguns artistas preferem este efeito.

  • AO Channel Affect: Se o valor zero for usado, apenas a textura de AO do material será usada para a oclusão ambiente; SSAO não será aplicado. Valores maiores que 0 irão multiplicar a textura de AO pelo efeito de SSAO em vários níveis. Isso não afeta materiais sem uma textura de AO.

  • Qualidade: Dependendo da qualidade , o SSAO necessitará de mais amostras sobre uma esfera para cada pixel. A qualidade alta só funciona em GPUs modernas.

  • Desfoque: Tipo de matriz de desfoque utilizada. A matriz 1x1 é um desfoque simples que preserva melhor os detalhes locais, mas não é eficiente (geralmente funciona melhor com a configuração de qualidade alta acima), enquanto 3x3 irá suavizar melhor a imagem (com um pouco de efeito similar a matização), mas não preserva os detalhes locais tão bem.

  • Edge Sharpness: Isto é usado para preservar a nitidez das bordas (evita áreas sem AO em vincos).

Profundidade de Campo / Desfoque distante

Este efeito simula a distância focal em câmeras de alta qualidade. Ele desfoca objetos atrás de um determinado intervalo. Possui uma Distância inicial com uma região de Transição (em unidades mundiais):

../../_images/environment_dof_far.png

O parâmetro Amount controla a quantidade de desfoque. Para desfoques maiores, pode ser necessário ajustar a qualidade para evitar artefatos.

Profundidade de campo / Próximo de desfoque

Este efeito simula a distância focal em câmeras de alta qualidade. Ele desfoca objetos próximos à câmera (atua na direção oposta como desfoque distante). Possui uma Distância inicial com uma região de Transição (em unidades mundiais):

../../_images/environment_dof_near.png

O parâmetro Amount controla a quantidade de desfoque. Para desfoques maiores, pode ser necessário ajustar a qualidade para evitar artefatos.

É comum usar os dois desfoques juntos para focar a atenção do espectador em um determinado objeto:

../../_images/environment_mixed_blur.png

Brilho

Na fotografia e no filme, quando a quantidade de luz excede o máximo suportado pela mídia (seja ela analógica ou digital), ela geralmente vaza para as regiões mais escuras da imagem. Isso é simulado em Godot com o efeito Glow.

../../_images/environment_glow1.png

Por padrão, mesmo que o efeito esteja ativado, ele será fraco ou invisível. Uma das duas condições precisa ocorrer para que ele seja de fato exibido:

    1. A luz em um pixel ultrapassa o Limite do HDR (Aonde 0 é toda luz que o ultrapassa, e 1.0 são luzes além do valor Branco tonemapper). Normalmente, se espera que esse valor seja 1.0, mas ele pode ser reduzido para permitir que mais luz vaze. Há também um parâmetro extra, Escala do HDR, que permite escalonar (tornando mais clara ou escura) a luz que ultrapassar o limite.

../../_images/environment_glow_threshold.png
    1. O efeito de Bloom aceita valor acima de 0. Conforme ele aumenta, ele envia toda a tela para o processador de brilho em maiores quantidades.

../../_images/environment_glow_bloom.png

Ambos farão a luz começar vazar para fora das áreas mais claras.

Assim que o Glow estar visível, ele pode ser controlado com alguns parâmetros extras:

  • Intensidade é uma escala geral para o efeito, ele pode ser mais forte ou mais fraco (0.0 anula o efeito).

  • Força é como o núcleo do filtro gaussiano é processado. Valores maiores fazem o filtro saturar mais e expandir para fora. Num geral, mudar isso não é necessário, já que esse valor pode ser melhor ajustado com os Níveis.

O Modo de Mistura do efeito também pode ser alterado:

  • O Aditivo é o mais forte, pois apenas adiciona o efeito de brilho sobre a imagem sem mistura envolvida. Em geral, é muito forte para ser usado, mas pode ficar bem com Bloom de baixa intensidade (produz um efeito de sonho).

  • Tela garante que o brilho nunca ilumine mais do que ele mesmo e funciona muito bem como um todo.

  • Luz suave é o padrão e o mais fraco, produzindo apenas uma leve mudança de cor em torno dos objetos. Esse modo funciona melhor em cenas escuras.

  • Substituir pode ser usado para desfocar toda a cena ou depurar o efeito. Isso mostra apenas o efeito de brilho sem a imagem por baixo.

Para mudar o tamanho e forma do efeito de brilho, a Godot possibilita usar Níveis. Níveis menores tem um brilho mais forte entorno do objeto, e níveis mais altos são brilhos mais nebulosos na tela inteira:

../../_images/environment_glow_layers.png

A real força desse sistema, no entanto, é combinar níveis para criar padrões mais interessantes de brilho:

../../_images/environment_glow_layers2.png

Finalmente, como as camadas superiores são criadas ao ampliar imagens pequenas borradas, é possível que algum nível de pixelização seja visível. Habilitar o Upscaling Bicúbico resolve esse problema, com um custo mínimo de desempenho. Note que essa melhoria só será efetiva quando o módulo GLES3 estiver em uso.

../../_images/environment_glow_bicubic.png

Ajustes

Ao fim do processamento, A Godot oferece a possibilidade de fazer alguns ajustes padrão de imagem.

../../_images/environment_adjustments.png

O primeiro ajuste serve para alterar os valores padrão para Brilho, Contraste e Saturação da imagem:

../../_images/environment_adjustments_bcs.png

O segundo ajuste funciona usando um gradiente de correção de cor. Um gradiente preto para branco comum como o da imagem a seguir não irá mudar nada:

../../_images/environment_adjusments_default_gradient.png

Mas criar gradientes específicos permite mudar cada canal de cor para uma cor diferente:

../../_images/environment_adjusments_custom_gradient.png