Texto por: JJ Kim
Imagine caminhar até um lago em um dia de verão – sentado sob uma árvore frondosa e observando a água brilhar sob o sol.
Nesta cena, as diferenças entre luz e sombra são exemplos de iluminação direta e indireta.
O sol brilha no lago e nas árvores, fazendo com que a água pareça estar brilhando e as folhas pareçam verdes brilhantes. Isso é iluminação direta. Embora as árvores lancem sombras, a luz do sol ainda reflete no chão e em outras árvores, lançando luz na área sombreada ao seu redor. Isso é iluminação indireta.
Para que a computação gráfica emerja os espectadores em ambientes fotorrealistas, é importante simular com precisão o comportamento da luz para obter o equilíbrio adequado de iluminação direta e indireta.
O que é iluminação direta e indireta?
A luz que incide sobre um objeto é chamada de iluminação direta.
Ele determina a cor e a quantidade de luz que atingem uma superfície de uma fonte de luz, mas ignora toda a luz que pode chegar à superfície de qualquer outra fonte, como a reflexão ou refração. A iluminação direta também determina a quantidade de luz que é absorvida e refletida pela própria superfície.
A luz refletida em uma superfície, iluminando outros objetos é chamada de iluminação indireta. Ele chega às superfícies de tudo, exceto de fontes de luz. Em outras palavras, a iluminação indireta determina a cor e a quantidade de todas as outras luzes que chegam a uma superfície. Mais comumente, a luz indireta é refletida de uma superfície para outras superfícies.
A iluminação indireta geralmente tende a ser mais difícil e cara de calcular do que a iluminação direta. Isso ocorre porque há um número substancialmente maior de caminhos que a luz pode seguir entre o emissor de luz e o observador.
O que é iluminação global?
A iluminação global é o processo de calcular a cor e a quantidade de toda a luz – direta e indireta – que está em superfícies visíveis em uma cena.
Simular com precisão todos os tipos de luz indireta é extremamente difícil, especialmente se a cena incluir materiais complexos como vidro, água e metais brilhantes – ou se a cena tiver dispersão em nuvens, fumaça, neblina ou outros elementos conhecidos como mídia volumétrica.
Como resultado, as soluções gráficas em tempo real para iluminação global são normalmente limitadas ao cálculo de um subconjunto da luz indireta – geralmente para superfícies com materiais difusos (também conhecidos como foscos).
Como a iluminação direta e indireta é calculada?
Muitos algoritmos podem ser usados para calcular a iluminação direta, todos com pontos fortes e fracos. Por exemplo, se a cena tiver uma única luz e nenhuma sombra, a iluminação direta é trivial para calcular, mas não parecerá muito realista. Por outro lado, quando uma cena tem várias fontes de luz, processá-las todas para cada superfície pode se tornar difícil.
Para resolver esses problemas, algoritmos otimizados e técnicas de sombreamento foram desenvolvidos, como sombreamento diferido ou em sombreamento agrupado. Esses algoritmos reduzem o número de interações de superfície e luz a serem computadas.
As sombras podem ser adicionadas por meio de várias técnicas, incluindo mapas de sombra, volumes de sombra estêncil e Ray Tracing.
O mapeamento de sombra tem duas etapas. Primeiro, a cena é renderizada do ponto de vista da luz em uma textura especial chamada de mapa de sombras. Em seguida, o mapa de sombras é usado para testar se as superfícies visíveis na tela também são visíveis do ponto de vista da luz. Os mapas de sombra vêm com muitas limitações e artefatos, e rapidamente se tornam caros à medida que o número de luzes na cena aumenta.
Os volumes de sombra estêncil são baseados na extrusão da geometria da cena para longe da luz e na renderização dessa geometria extrudada no buffer do estêncil. O conteúdo do buffer de estêncil é usado para determinar se uma determinada superfície na tela está na sombra ou não. As sombras estêncil são sempre nítidas, de maneira não natural, mas não sofrem de problemas comuns de mapas de sombras.
Até a introdução da tecnologia NVIDIA RTX, o Ray Tracing era muito caro para usar ao calcular sombras. Ray tracing é um método de renderização que simula o comportamento físico da luz. Traçar os raios de uma superfície na tela até uma luz permite o cálculo de sombras, mas isso pode ser um desafio se a luz vier de um ponto. Além disso, sombras Ray Tracing podem se tornar caras rapidamente se houver muitas luzes na cena.
Métodos de amostragem mais eficientes foram desenvolvidos para reduzir o número de raios necessários para calcular sombras suaves de várias luzes. Um exemplo é um algoritmo chamado ReSTIR, que calcula a iluminação direta de milhões de luzes e sombras com Ray Tracing em taxas de quadros interativas.
O que é Path Tracing?
Para iluminação indireta e iluminação global, existem ainda mais métodos. O mais direto é chamado de Path Tracing, onde caminhos de luz aleatórios são simulados para cada superfície visível. Alguns desses caminhos alcançam luzes e contribuem para a cena finalizada, enquanto outros não.
Path Tracing é o método mais preciso capaz de produzir resultados que representam totalmente a iluminação em uma cena, correspondendo à precisão dos modelos matemáticos para materiais e luzes. Path Tracing pode ser muito caro para calcular, mas é considerado o “santo graal” dos gráficos em tempo real.
Como a iluminação direta e indireta afetam os gráficos?
A iluminação direta fornece a aparência básica de realismo e a iluminação indireta torna as cenas mais ricas e naturais.
Uma maneira pela qual a iluminação indireta tem sido usada em muitos videogames é através da luz ambiente onipresente. Este tipo de luz pode ser constante ou variar espacialmente sobre sondas de luz dispostas em um padrão de grade. Ele também pode ser renderizado em uma textura que envolve objetos estáticos em uma cena – esse método é conhecido como “mapa de luz”.
Na maioria dos casos, a luz ambiente é sombreada por uma função da geometria ao redor da superfície chamada de oclusão ambiente, que ajuda a aumentar o realismo da imagem.
Exemplos de iluminação direta, iluminação indireta e iluminação global
A iluminação direta e indireta estão presentes, de alguma forma, em quase todos os jogos 3D desde a década de 1990. Abaixo estão alguns marcos de como a iluminação foi implementada em títulos populares:
- 1993: DOOM apresentou um dos primeiros exemplos de iluminação dinâmica. O jogo podia variar a intensidade da luz por setor, o que tornava as texturas mais claras ou mais escuras, e era usado para simular áreas escuras e brilhantes ou luzes piscando.
- 1995: Quake introduziu mapas de luz, que foram pré-computados para cada nível do jogo. Os mapas de luz podem modular a intensidade da luz ambiente.
- 1997: Quake II adicionou cor aos mapas de luz, bem como iluminação dinâmica de projéteis e explosões.
- 2001: Silent Hill 2 apresentou iluminação por pixel e mapeamento de sombras. Shrek usou iluminação diferida e sombras de estêncil.
- 2007: Crysis mostrou oclusão de ambiente dinâmica em espaço de tela, que usa profundidade de pixel para dar uma sensação de mudanças na iluminação.
- 2008: Quake Wars: Ray Traced tornou-se a primeira demo tecnológica de jogos a usar reflexos baseados em Ray Tracing.
- 2011: Crysis 2 se tornou o primeiro jogo a incluir reflexos no espaço da tela, que é uma técnica bastante popular até hoje, que reutiliza dados presentes no espaço da tela para calcular reflexos.
- 2016: Rise of the Tomb Raider tornou-se o primeiro jogo a usar oclusão de ambiente baseada em voxels.
- 2018: Battlefield V tornou-se o primeiro jogo comercial a usar reflexos baseados em Ray Tracing.
- 2019: Q2VKPT se tornou o primeiro jogo a implementar o Path Tracing, que foi posteriormente refinado no Quake II RTX.
- 2020: Minecraft com RTX é o primeiro jogo comercial a usar Path Tracing.
O que vem a seguir para iluminação de gráficos em tempo real?
Os gráficos em tempo real estão se movendo em direção a uma simulação mais completa de luz em cenas com complexidade crescente.
O ReSTIR expande drasticamente as possibilidades dos artistas usarem várias luzes em jogos. Sua variante mais recente, ReSTIR GI, aplica as mesmas ideias em relação à iluminação global, permitindo o Path Tracing com mais saltos e menos aproximações. Ele também pode renderizar imagens com menos ruído mais rapidamente. Mais algoritmos estão sendo desenvolvidos para tornar o Path Tracing mais rápido e acessível.
Usar uma simulação completa de efeitos de iluminação com Ray Tracing também significa que as imagens renderizadas podem conter algum ruído. Eliminar esse ruído, ou “denoising”, é outra área de pesquisa ativa.
Mais tecnologias estão sendo desenvolvidas para ajudar os jogos a eliminar efetivamente o ruído da iluminação em cenas complexas e altamente detalhadas com muito movimento em taxas de quadros em tempo real. Este desafio está sendo abordado a partir de duas pontas: algoritmos de amostragem avançados, que geram menos ruído e denoisers avançados que podem lidar com situações cada vez mais difíceis, como o NRD, NVIDIA Real-Time Denoiser.
Confira as soluções da NVIDIA para iluminação direta e indireta e acesse os recursos da NVIDIA para desenvolvimento de jogos.
Saiba mais sobre gráficos com a NVIDIA no SIGGRAPH 2022 e assista à apresentação especial da NVIDIA, apresentada pelo CEO e líderes seniores da NVIDIA, para ouvir os últimos anúncios e lançamentos gráficos da empresa.