Técnicas de sombra em videogames 3D clássicos
(30fps.net)- As sombras em jogos 3D não surgem automaticamente como no mundo real; são efeitos visuais projetados para parecer convincentes dentro de limites de desempenho
- Os primeiros jogos 3D tratavam sombras com técnicas simples, mas rápidas, como imagens 2D, blob shadows sob os pés, texturas de sombra em tempo de execução e geometria projetada em planos
- À medida que as cenas ficaram mais complexas, passaram a ser usados texturas projetadas, shadow maps e stencil shadows, mas com limitações como artefatos de resolução, projeção incorreta em superfícies e custo de execução difícil de prever
- A iluminação estática de fases armazenava grandes sombras com vertex colors e lightmaps, e os jogos modernos ainda usam variações dessas técnicas tradicionais, como Cascaded Shadow Maps, light probes e capsule shadows
- Sombras com ray tracing apontam para um resultado mais natural, mas em cenas complexas como as de Alan Wake 2 ainda dependem de amostragem e denoisers, então os trade-offs continuam definindo o caráter visual da imagem
As sombras nos jogos são feitas de forma diferente da realidade
- No mundo real, sombras são o resultado do bloqueio da luz, e se uma única fonte de luz está distante, várias sombras sobrepostas não ficam mais escuras
- Em videogames 3D, como sombras não existem naturalmente, os desenvolvedores precisam projetá-las diretamente equilibrando desempenho e convencimento visual
- Em jogos, também é possível representar sombras ficando mais escuras à medida que se sobrepõem, como no blob shadow de Metal Gear Solid
Sombras 2D desenhadas diretamente na tela
- A forma mais simples é desenhar uma imagem 2D de sombra na tela antes de desenhar o personagem
- Winter Gold e MDK usam imagens animadas de sombra 2D sem escalonamento
- Em cenas em que o personagem está à frente de todo o resto, essa abordagem simples funciona bem
Blob shadow: o círculo escuro sob os pés
- A abordagem mais simples em 3D é desenhar um disco escuro abaixo do personagem
- Super Mario 64 usa blob shadows nos personagens e, com o recurso de decal do hardware do Nintendo 64, efetivamente recorta a sombra para que ela apareça apenas no plano do chão
- Blob shadows podem ser animadas conforme a situação
- Em Super Mario 64, a sombra encolhe quando o personagem pula
- Em Metal Gear Solid, o formato da sombra muda
- O problema de a sombra ultrapassar um penhasco também pode ser tratado projetando o quad da blob shadow como se fosse um decal
Sombras planas baseadas em render texture
- Se a blob for só uma textura simples, o personagem pode ser renderizado de cima em tempo de execução para gerar uma textura de sombra
- Crash Bandicoot: Warped obtém bons resultados com texturas de sombra em tempo de execução
- Soldier of Fortune também usa a mesma abordagem, mas o resultado é pior por causa da baixa resolução da sombra
- Isso é diferente de shadow mapping, que cria um depth map a partir do ponto de vista da luz
- Aqui, usa-se uma imagem em preto e branco como textura
- O conceito é mais próximo de um shadow map de 1 bit
Sombras planas feitas com geometria
- Uma forma intuitiva é achatar e projetar em um plano o objeto que lança a sombra na direção oposta à luz, e renderizar o mesmo objeto mais uma vez em preto
- Essas sombras costumam permanecer opacas para esconder problemas em que partes do objeto se desenham umas sobre as outras
- Funciona bem em pisos planos, mas perde precisão em terrenos complexos
- F-19 Stealth Fighter desenha a sombra do avião sobre a pista
- Jogos baseados em GLQuake também exibem sombras planas
- Kingpin: Life of Crime usa sombras planas pretas de forma aceitável
- Half-Life alpha 0.52 expõe problemas de transparência
Sombras planas sobre terreno
- Virus, de David Braben, faz a nave projetar sobre o terreno uma sombra vista de cima
- Interstate ’76 inclina e estica a sombra plana para acompanhar a inclinação do chão
- Às vezes a sombra atravessa o chão
- No geral, o resultado é bastante convincente
- Na renderização por software, a sombra aparece levemente transparente; com aceleração por hardware, ela fica totalmente preta
- Interstate ’76 também tentou projetar sombras de objetos grandes, como pontes, mas o resultado não foi totalmente bem-sucedido
Drop shadow com textura projetada
- A abordagem de textura projetada pega a textura de sombra criada antes e a projeta sobre superfícies de vários formatos, não apenas um plano
- Conceitualmente, é parecido com apontar o Bat-Sinal do alto para baixo
- Toy Story 3: The Video Game é um exemplo dessa técnica, e as sombras ficam mais escuras quando se sobrepõem a outras sombras
- Ela pode criar sombras muito nítidas, mas é sensível às condições da superfície
- Pode ficar estranha em superfícies verticais
- Em alguns casos, pode até aparecer no teto
- Há exemplos disso em vídeos de gameplay de Sonic Adventure 2: Battle
- Como pode aparecer atravessando objetos, é mais adequada para casos especiais
- Também pode funcionar bem para sombras de árvores
Shadow map: o método padrão de fato
- O shadow map funciona fazendo o jogo renderizar uma imagem de profundidade do ponto de vista da luz e, ao renderizar o mundo, consultar essa imagem para decidir onde há sombra
- É relativamente fácil de implementar porque permite reutilizar o código normal de renderização
- A resolução limitada cria artefatos conhecidos, como “Peter Panning” e “shadow acne”
- Foram propostas várias técnicas para reservar mais área do shadow map para superfícies próximas da câmera
- Para obter um resultado bonito, normalmente é preciso ajuste fino
Stencil shadow: nítida, mas cara
- A stencil shadow pode desenhar sombras nítidas em qualquer superfície e criar um visual film noir difícil de imitar com shadow maps
- O caso mais famoso é Doom 3, conhecido por seus ambientes escuros
- Essa técnica divide o mundo em espaço iluminado e espaço em sombra usando uma geometria invisível chamada shadow volume
- O jogo só aplica iluminação aos pixels que não estão dentro do shadow volume
- O funcionamento exige desenhar o mundo várias vezes
- Primeiro, desenha-se o mundo inteiro com ambient lighting
- Para cada luz, desenha-se o shadow volume e depois o mundo novamente, fazendo com que só os pixels fora da sombra sejam afetados
- São configuradas stencil operations diferentes para front faces e back faces
- Um dos casos comerciais mais antigos possíveis é Severance: Blade of Darkness, que já mostrava boas sombras em 2001
- Um dos motivos de a técnica não ser muito usada hoje é que seu custo de execução é difícil de prever
- O custo varia muito conforme o tamanho aparente do shadow volume na tela
- Algoritmos otimizados tinham patentes
- Há um link relacionado sugerindo que a Id Software chegou a algum tipo de acordo sobre Doom 3
Stencil shadow suave
- Stencil shadows não precisam ser necessariamente duras
- Silent Hill 2 renderiza stencil shadows no PlayStation 2 e depois aplica blur para criar sombras suaves
- O resultado no console parece quase perfeito
Sombras simplificadas de personagens
- É possível fazer com que um modelo mais simples do que o exibido na tela seja o responsável por lançar a sombra
- Em Zelda no Nintendo 64, só os pés de Link projetam sombra, e o resto do corpo não
- Hyperblade usa uma abordagem peculiar em que os jogadores, em uma arena de hóquei futurista, projetam sombras planas com formas animadas simplificadas
Sombras na iluminação estática de fases
- Vertex color e lightmap são técnicas para armazenar a iluminação de uma fase e, em muitos jogos, foram o único jeito de mostrar sombras de grande escala
-
Vertex color
- Ico mostra que é possível criar sombras sofisticadas mesmo só com iluminação per-vertex antiga
- Em mapas low-poly, até sombras nítidas podem ser representadas com vertex colors
- Tony Hawk Pro Skater 2 produz resultados impressionantes mesmo com essa abordagem simples
-
Lightmap
- O lightmap é uma técnica clássica para armazenar iluminação e sombras da fase
- Em vez de guardar cor em cada vértice, usa-se um segundo conjunto de texturas dedicado apenas à iluminação
- Como é possível variar a resolução por área, dá para representar sombras com mais precisão onde isso for necessário
- Consome mais memória do que vertex colors
- Quake é frequentemente citado como o jogo que popularizou lightmaps
Técnicas tradicionais ainda usadas em jogos modernos
- Jogos modernos continuam usando técnicas tradicionais de sombra conforme o contexto
- Cascaded Shadow Maps, uma variação de shadow mapping, são usados para cobrir áreas amplas rapidamente
- Lightmaps podem ser usados junto com outras técnicas, como light probes
- Call of Duty também usa lightmaps
- Há exemplos nos slides Hemispherical Lighting Insights
- A ideia de usar modelos simplificados para sombra também continua
- The Last of Us cria sombras suaves de personagens com esferas alongadas
- A Unreal Engine oferece suporte a capsule shadows para personagens
- Sombras projetadas também continuam em uso
- Hot Wheels Track Attack renderiza uma shadow mesh como textura e depois a projeta na pista de corrida
- Isso pode ser visto na explicação do blog de desenvolvimento e em vídeos de gameplay
Nem as sombras com ray tracing são perfeitas
- Em jogos que tentam simular iluminação fisicamente correta, as sombras aparecem naturalmente onde a luz não chega
- Diferentemente de shadow maps, até pequenos detalhes geométricos podem projetar sombras corretas
- Lâmpadas grandes produzem sombras suaves de forma natural, e a iluminação indireta pode clarear cantos escuros
- Muito tempo e dinheiro foram investidos em algoritmos e hardware de ray tracing para tornar esse objetivo viável
- Na prática, as cenas dos jogos modernos são tão complexas que a simulação precisa ser aproximada
- Nas ray-traced shadows de Alan Wake 2, cada pixel recebe iluminação de apenas uma única luz escolhida aleatoriamente
- O resultado é enviado a um denoiser, que suaviza de forma inteligente a imagem ruidosa
- Sombras com ray tracing também não são perfeitas, e os trade-offs escolhidos acabam criando um visual próprio
A opção de não ter sombras
- Alguns jogos podem priorizar outros elementos em vez de sombras
- Não implementar sombras também pode ser uma escolha deliberada
1 comentários
Comentários no Hacker News
Não é uma ilusão de ótica nem uma escolha artística: como o céu é azul, em um dia claro as sombras são iluminadas pela luz refletida do céu, então parecem azuis
Se você olhar embaixo de um carro, nas partes em que dá para ver o céu há uma sombra azul bem nítida; quanto mais a carroceria bloqueia também a luz do céu, mais a sombra se aproxima de um preto verdadeiro
Misturar essa sombra solar azul bem definida com uma sombra de céu por AO suave e escura permite criar sombras bem bonitas a baixo custo
Um bom motor de renderização gráfica faz esse tipo de tratamento. As sombras devem ter um leve tom da cor do céu
Por isso algumas capturas antigas de No Man's Sky me incomodavam. Acho que vi uma cena em que o céu era verde, mas as sombras eram roxas
Isso ajuda a estimar onde ele vai pousar depois de um salto, como as sombras em forma de mancha dos jogos clássicos, mas mantendo a qualidade visual de uma sombra adequada
Se minha memória não falha, em ambientes escuros eles às vezes deixam a sombra mais clara que o chão para que ela continue visível
Assim, as sombras apareceriam e desapareceriam conforme o modelo do jogador fosse carregado e descarregado, então você não poderia ver a sombra a menos que também pudesse ver o corpo do jogador
Valorant simplificou a renderização de forma extrema de propósito para entregar taxas de quadros muito altas até em hardware de entrada. Além de não ter sombras dinâmicas, também não há nenhuma iluminação dinâmica, nem transparência alfa em lugar nenhum
Até coisas como fumaça, que normalmente seriam desenhadas com transparência, foram estilizadas para poderem ser totalmente opacas, porque isso é mais rápido. Independentemente de trapaça, é bem possível que sombras dinâmicas tivessem sido removidas de qualquer forma por desempenho
Com a adoção de técnicas de ray tracing, acho que fontes de luz de área e sombras suaves vão virar o padrão. Se você tiver hardware para isso, vale conferir Quake 2 RTX para ter uma ideia de como o futuro pode parecer
Por fim, adicionei esse blog à minha lista de recursos de gráficos: https://github.com/aaron9000/c-game-resources
https://www.youtube.com/watch?v=7BvtML5dIuI
O PowerVR PCX1 tinha suporte em hardware a volumes de sombra, implementado de forma mais eficiente do que sombras por stencil padrão. Em vez de desenhar a cena várias vezes, ele basicamente fazia em hardware um pré-passe apenas de profundidade em um buffer de profundidade/stencil on-chip para determinar os pixels visíveis, testava os volumes de sombra para decidir quais pixels estavam na sombra e então fazia amostragem de textura e sombreamento
A intensidade da iluminação era ajustada conforme o resultado dos volumes de sombra e, como apenas os pixels visíveis eram sombreados, o overdraw não desperdiçava largura de banda de fetch de textura desnecessária
O Dreamcast, baseado em sucessores do PCX1, também teve muitos jogos que usavam volumes de sombra. A implementação do Dreamcast era mais flexível: os volumes podiam alterar não só a iluminação, mas também a textura usada, o mapeamento UV e até a equação de blending de polígonos transparentes
Cheguei a fazer sombras suaves no DC (https://imgur.com/a/DyaqzZD na parte final), mas como isso volta para uma abordagem de stencil mais padrão e redesenha as sombras várias vezes, o custo de fill rate é bem alto
Se duas lâmpadas iluminam três pessoas, surgem seis sombras. Onde as seis sombras se sobrepõem, a região fica “preta” ou recebe apenas luz ambiente
Em outros pontos onde as sombras se sobrepõem menos, aparece um gradiente de iluminação
Se um ponto está dentro da sombra da fonte de luz A e dentro da sombra da fonte de luz B, de onde ele receberia luz? Só da luz ambiente; se nem isso houver, fica preto
A condição é “como há apenas uma fonte de luz, e ela está bem distante, a sombra é simplesmente a ausência de luz”
Essa sombra era mais um pequeno elemento que dava ao jogo uma enorme sensação de velocidade
https://imgur.com/a/hOgxr7a
https://www.mobygames.com/game/6233/f29-retaliator/
O momento de que ainda me lembro foi quando eu roubava um carro à noite em um beco. No exato instante em que o personagem do jogador entrava no carro, um policial virou a esquina e “viu” o roubo; ao mesmo tempo em que sacava a arma, os faróis se acenderam, projetando na parede próxima uma sombra enorme do policial em movimento
A sobreposição de sombras em MGS não está totalmente errada. Há luz ambiente, dispersão e outros fenômenos de iluminação global
A frase “Mirror’s Edge (2008, PC) é basicamente Lightmaps: The Game” é engraçada, mas correta. Era um jogo impressionante na época e ainda é hoje
Acho que na época ele foi injustamente subestimado. Talvez por ser mais curto que os concorrentes