1 pontos por GN⁺ 2024-10-31 | 1 comentários | Compartilhar no WhatsApp
  • 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
  • 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

 
GN⁺ 2024-10-31
Comentários no Hacker News
  • O fato de que sombras ao ar livre são azuis é o que mais gosto
    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
    • É isso mesmo, e é tão sutil que muita gente nem percebe
      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
    • Pintores muitas vezes aprendem a pintar sombras externas com um leve tom roxo, para maximizar o contraste com o amarelado da luz do sol
    • Acabei de ver isso também em uma pintura de inverno de Monet: https://news.artnet.com/art-world/monet-the-magpie-three-fac...
  • Gosto da variação usada hoje em jogos de plataforma da Nintendo. Eles usam shadow maps, como a maioria hoje em dia, mas a sombra do personagem do jogador é ajustada para sempre cair diretamente abaixo dele, independentemente da posição real da fonte de luz
    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
  • Eu achava que o motivo de Valorant sempre parecer meio ruim era o fato de os jogadores não projetarem sombras. Descobri há alguns dias que isso acontece porque, para reduzir trapaças, o servidor não envia ao cliente a posição dos modelos de outros jogadores até decidir que eles estão visíveis
    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
    • Talvez você tenha visto algo que eu escrevi. Não sei se Valorant desativou as sombras dos jogadores por causa do sistema antitrapaça, mas com certeza isso simplifica o antitrapaça
      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
    • Não daria para resolver isso se o servidor também verificasse a visibilidade das sombras? Não conheço bem Valorant, mas parece que não se esconder com uma fonte de luz atrás de você poderia de fato virar um elemento estratégico
  • Ótimo texto, com muitas referências nostálgicas a jogos. Ainda me lembro de ficar impressionado com as sombras em Zelda do N64 muito tempo atrás
    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
    • Se for possível criar sombras boas o suficiente com truques de fumaça e espelhos, por motivos de desempenho é melhor continuar usando essas técnicas de ilusionismo
  • Sobre o trecho “o jogo mais antigo lançado com sombras por stencil talvez seja Severance: Blade of Darkness, de 2001, e as sombras são excelentes”, Revolte para PowerVR PCX1 usava sombras por stencil em 1996
    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
  • Para ver o estado da arte em tecnologia de iluminação em videogames, veja a demonstração recente de UE 5.5 MegaLights da Epic: https://youtu.be/p9XgF3ijVRQ?si=GcU0kP33iKQh_5Ge
  • Quando há mais de uma fonte de luz, as sombras realmente ficam mais escuras onde se sobrepõem
    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
    • Isso não está certo. No momento em que uma sombra de cada fonte de luz, ou seja, duas sombras, se cruzam, só resta preto ou luz ambiente
      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
    • Boa observação, mas o texto não está errado. Achei bem interessante
      A condição é “como há apenas uma fonte de luz, e ela está bem distante, a sombra é simplesmente a ausência de luz”
  • Sobre o trecho “alguns simuladores de voo antigos desenham uma sombra achatada vista de cima quando o avião está na pista. Durante a pesquisa, eu esperava encontrar um exemplo em que a sombra também aparecesse em voo, mas não encontrei”, F-29 RETAL, ou F29 Retaliator, F29, é esse exemplo
    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 sombra mais marcante para mim foi jogando GTA IV. Eu tinha um PC gamer bem potente, e as sombras em tempo real geradas pelos faróis do carro do jogador eram excelentes no geral
    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
  • O texto é bom e foi uma leitura divertida
    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
    • Se você quer que um jogo continue bonito muitos anos depois, nada supera iluminação global baked. Foi o primeiro jogo em que vi sombras azuis reais em plena luz do dia. Mas eram sombras geradas pela geometria do nível
      Acho que na época ele foi injustamente subestimado. Talvez por ser mais curto que os concorrentes