Hoje, gostaríamos de explicar um novo recurso gráfico que estamos apresentando aos nossos jogos com a atualização 1.38. O artigo é muito técnico - pedimos aos nossos programadores que ajudem, e a explicação é bastante complexa. No entanto, achamos que pode ser realmente interessante que pelo menos algumas pessoas da nossa audiência sejam expostas a esse material - ver que o que está acontecendo sob o capô de um mecanismo de jogo envolve muita pesquisa e trabalho duro de nossos equipe de programação. Além dos detalhes técnicos, pensamos que fornecer o contexto e explicar as compensações de desempenho pode ser útil e importante para a maioria dos jogadores.
Jaroslav akaCim
(um de nossos programadores corajosos e qualificados trabalhando em melhorias nos gráficos)
O resumo do TLDR do texto abaixo é que o Screen Space Ambient Oclusion é
uma nova técnica interessante, mas com alto desempenho, para enriquecer
a renderização do mundo do jogo.
Você não precisa usá-lo se sentir que diminui muito o desempenho ao seu
gosto, ou pode gostar e pode trocar alguns quadros por segundo para
melhorar a percepção de sombra e profundidade.
O efeito pode ser sutil, funciona principalmente no nível de
subconsciência, mas depois que você se acostuma, pode ser difícil
voltar.
É outro marco em nosso plano de melhorias de iluminação / sombreamento
que estamos executando agora, a ser seguido pelo novo processamento de
luz HDR e pela introdução de superfícies mapeadas mais normais nas
próximas atualizações.
A técnica tem suas limitações e peculiaridades.
Ele tem sido usado por vários jogos AAA nos últimos anos, e mesmo que
não seja perfeito, ajuda o sistema de percepção humana a entender melhor
a cena, e esperamos que seja benéfico adicioná-lo ao mix de tecnologia
de nossos simuladores de caminhão. Sem dúvida, quereremos introduzir maneiras adicionais de sombrear a computação que a melhorarão ou até a substituirão.
Estamos sob pressão constante para melhorar a aparência do nosso jogo por um subconjunto vocal de nossa base de fãs. Ao mesmo tempo, há sempre um desejo de acelerar os jogos.
Além dessas solicitações às vezes concorrentes da base de jogadores,
nosso departamento de arte está sempre ansioso por adquirir novos
brinquedos gráficos para tornar nosso jogo mais rico e melhor.
Sempre que introduzimos um novo recurso gráfico no jogo, tentamos
fazê-lo de uma maneira que não prejudique o desempenho de jogadores com
computadores mais antigos, não queremos tornar o jogo incompatível para
nossos clientes existentes. É por isso que existe uma opção para desativar completamente o SSAO e várias configurações para sua qualidade / desempenho.
O trabalho de nossos programadores nas novas técnicas SSAO / HBAO
também exigiu alterações em nosso pipeline de criação de arte e arte.
Todos os modelos 3D em nossos jogos tiveram que ser revisados pelo
departamento de arte, e todos os casos em que sombras falsas e
escurecimentos já foram aplicados a um modelo por um artista foram
alterados.
Para alguns modelos de jogos mais complexos, essa foi uma simplificação
que realmente reduziu o número de triângulos neles o suficiente para
melhorar o desempenho da renderização.
Até certo ponto, negociamos uma parte do esforço manual futuro que
seria necessário para criar modelos 3D de boa aparência individuais para
um passe de renderização algorítmica que unifica a aparência sombreada
de toda a cena, ajudando a "enraizar" objetos como edifícios, postes de
iluminação e vegetação para o terreno.
O que o SSAO representa e como funciona
Antes de começarmos - observe que SSAO é um acrônimo geral para "oclusão ambiental do espaço da tela".
O nome abrange todas as várias técnicas de oclusão ambiental (AO) e
suas variantes que funcionam no espaço da tela (significa que elas obtêm
todas as informações em tempo de execução a partir de dados que são
renderizados na tela do computador e em buffers de memória
relacionados).
Há SSAO (tecnologia Crytech 2007 que basicamente deu um nome geral a
todas as técnicas), MSSAO, HBAO, HDAO, GTAO e muitas outras técnicas,
cada uma usando abordagens ajustadas de maneira diferente, cada uma com
seus benefícios e desvantagens.
Baseamos nossa abordagem em uma técnica baseada no horizonte chamada
GTAO, que foi introduzida em um artigo de 2016 pela Activision.
A parte do nome da oclusão ambiental (AO) significa que avaliamos a
quantidade de luz que entra (predominantemente a luz do céu, mas às
vezes a oclusão calculada é aplicada também a outras luzes) fica ocluída
em um local específico no mundo do jogo.
Imagine que você está de pé em terreno plano - você veria o céu inteiro
acima, então há 0% de oclusão, o chão fica totalmente iluminado pelo
céu.
Agora imagine que você está no fundo de um poço - você veria apenas um
pequeno pedaço do céu, o que significa que o céu fica ocluído quase 100%
e contribui apenas um pouco para a iluminação ambiente naquele poço, e
naturalmente está bastante escuro o fundo do poço.
Um nível específico de oclusão ambiental em um local específico afeta
os cálculos de iluminação e cria áreas sombreadas em vincos, buracos e
outros locais 'complexos'. Pode chegar entre 0% e 100% com base no ambiente.
Computar a oclusão com alto detalhe e precisão consome muitos recursos; basicamente, você precisaria disparar raios de qualquer posição avaliada em todas as direções e testar se eles atingem o céu ou não e, em seguida, calcular a média do resultado. Quanto mais raios você disparar, melhores informações serão obtidas, mas com um custo de computação maior. Esse processo pode ser processado off-line, como quando o mapa do jogo é salvo pelo seu designer. Alguns jogos e mecanismos usam essa abordagem. Porém, dessa maneira, você só pode obter informações de oclusão ambiental sobre objetos estáticos que não se movem porque não há veículos, nem objetos animados presentes naquele momento.
Computar a oclusão com alto detalhe e precisão consome muitos recursos; basicamente, você precisaria disparar raios de qualquer posição avaliada em todas as direções e testar se eles atingem o céu ou não e, em seguida, calcular a média do resultado. Quanto mais raios você disparar, melhores informações serão obtidas, mas com um custo de computação maior. Esse processo pode ser processado off-line, como quando o mapa do jogo é salvo pelo seu designer. Alguns jogos e mecanismos usam essa abordagem. Porém, dessa maneira, você só pode obter informações de oclusão ambiental sobre objetos estáticos que não se movem porque não há veículos, nem objetos animados presentes naquele momento.
Portanto, em vez de incluir informações estáticas (que também levariam
muito tempo e espaço de armazenamento, dada a escala do nosso mapa do
mundo), queremos calculá-las em tempo real, em tempo de execução. Dessa forma, podemos calculá-lo também para interação com veículos, abrindo pontes, objetos animados e assim por diante. Há uma pegadinha embora.
Para essa abordagem de computação, temos apenas dados visíveis na tela
(lembre-se de "espaço na tela"); portanto, uma vez que parte do mundo do
jogo sai do quadro visível, ele não pode ser usado para avaliação de
oclusão.
Essa limitação cria vários artefatos, como o desaparecimento da oclusão
em uma parede, causada originalmente por um objeto que ficou atrás da
borda da tela e, assim, ficou invisível não apenas para você, mas também
para o algoritmo, deixando de contribuir para o cálculo da oclusão.
Ok, agora sabemos o que avaliar (oclusão ambiental) e sabemos quais dados temos (o que vemos na tela). O que nós fazemos?
Bem, para cada pixel na tela (ou seja, 2 milhões de pixels em resolução
HD, quatro vezes (!) Na escala de 400%!), Nosso código de sombreador
precisa consultar o valor do buffer z dos pixels ao redor, tentando
obter uma noção de a forma geométrica da área ao seu redor.
Podemos fazer apenas um número limitado desses "toques", pois há um
custo de desempenho cada vez maior com o aumento da contagem de toques.
Essa é uma operação que realmente está sobrecarregando o acelerador 3D.
O limite do número de torneiras, por sua vez, afeta a precisão da
oclusão do ambiente (e em certas situações pode criar imprecisões e
faixas).
Imagine que você deseja avaliar o ambiente em uma linha reta de 2
metros e está disposto a gastar 8 toques para aproximar o objeto.
Você consulta a linha a cada 25 centímetros, e qualquer detalhe menor
do que isso pode ser totalmente despercebido, a menos que você tenha
sorte e acerte-a no local (ou azar, porque você pode perder a cena
seguinte, para que os arredores pareçam mudar repentinamente entre
quadros e causar tremulação). Quanto mais o seu algoritmo detecta, menos preciso ele é.
Portanto, você precisa limitar o tamanho de uma área que analisa em
torno de cada pixel do jogo, o que limita a distância que o AO 'vê' - é
por isso que não é adequado para calcular a oclusão em grandes espaços,
como os arcos das pontes.
Mencionamos que a técnica de nossa escolha é baseada no horizonte. Isso significa que não estamos investigando o ambiente disparando raios no mundo 3D. Em vez disso, analisamos um hemisfério acima / ao redor de cada pixel para ver até que ponto ele se abre até ser bloqueado, quanta luz é deixada entrar pela geometria ao redor usando o z-buffer como nosso proxy. Na verdade, o hemisfério é aproximado por várias execuções ao longo de uma linha girada em torno do pixel especificado. Se pudermos acompanhar esse hemisfério por completo, não haverá oclusão. Se o algoritmo digitar um valor no buffer z que bloqueie a luz recebida, ele definirá o nível de oclusão. O algoritmo é otimizado para desempenho, mas sua limitação é que, uma vez atingido qualquer coisa, mesmo um pequeno objeto, ele pára de investigar mais. Isso pode causar um problema de "excesso de oclusão" e pode ser identificado como um artefato visual quando algum objeto relativamente fino, como um poste de sinalização de trânsito, causa forte oclusão em uma parede próxima. Você pode tentar detectar esses objetos pequenos e ignorá-los, que por sua vez podem produzir "sob oclusão" em bordas finas. Optamos pelo primeiro.
Há também outra propriedade interessante e útil das técnicas baseadas no horizonte. Dependendo de quanto de um hemisfério acima de um determinado pixel está ocluído, é possível calcular a direção menos ocluída. A quantidade de oclusão pode ser pensada como uma casquinha de sorvete com ângulo de vértice variável orientado nessa direção. Essa direção é chamada de "normal dobrado" e a usamos para vários cálculos de luz, como para ocultar uma reflexão em superfícies brilhantes. A idéia é que, se você olhar para a superfície e a direção refletida no espelho sair deste cone, consideraremos (pelo menos parcialmente) ocluído, diminuindo a intensidade da reflexão. A melhor maneira de ver esse efeito é observar peças cromadas maiores e redondas, como os tanques de diesel, com o SSAO ligado e desligado.
Mencionamos que a técnica de nossa escolha é baseada no horizonte. Isso significa que não estamos investigando o ambiente disparando raios no mundo 3D. Em vez disso, analisamos um hemisfério acima / ao redor de cada pixel para ver até que ponto ele se abre até ser bloqueado, quanta luz é deixada entrar pela geometria ao redor usando o z-buffer como nosso proxy. Na verdade, o hemisfério é aproximado por várias execuções ao longo de uma linha girada em torno do pixel especificado. Se pudermos acompanhar esse hemisfério por completo, não haverá oclusão. Se o algoritmo digitar um valor no buffer z que bloqueie a luz recebida, ele definirá o nível de oclusão. O algoritmo é otimizado para desempenho, mas sua limitação é que, uma vez atingido qualquer coisa, mesmo um pequeno objeto, ele pára de investigar mais. Isso pode causar um problema de "excesso de oclusão" e pode ser identificado como um artefato visual quando algum objeto relativamente fino, como um poste de sinalização de trânsito, causa forte oclusão em uma parede próxima. Você pode tentar detectar esses objetos pequenos e ignorá-los, que por sua vez podem produzir "sob oclusão" em bordas finas. Optamos pelo primeiro.
Há também outra propriedade interessante e útil das técnicas baseadas no horizonte. Dependendo de quanto de um hemisfério acima de um determinado pixel está ocluído, é possível calcular a direção menos ocluída. A quantidade de oclusão pode ser pensada como uma casquinha de sorvete com ângulo de vértice variável orientado nessa direção. Essa direção é chamada de "normal dobrado" e a usamos para vários cálculos de luz, como para ocultar uma reflexão em superfícies brilhantes. A idéia é que, se você olhar para a superfície e a direção refletida no espelho sair deste cone, consideraremos (pelo menos parcialmente) ocluído, diminuindo a intensidade da reflexão. A melhor maneira de ver esse efeito é observar peças cromadas maiores e redondas, como os tanques de diesel, com o SSAO ligado e desligado.
Então, veja bem, a idéia não é tão difícil para um programador gráfico
especializado;), mas há muita computação envolvida, colocando bastante
pressão no acelerador 3D. Por isso, criamos vários perfis de desempenho, cada um usando uma combinação de técnicas de otimização:
- Usando menos toques por direção - é mais rápido, mas permite que o AO perca objetos maiores do que com uma amostragem mais fina.
- Reprojetar resultados de AO do quadro anterior - permite ocultar os artefatos da subamostragem, mas pode criar fantasmas quando a reprojeção falha (quando o que você vê entre os quadros muda muito).
- Renderização em meia resolução - reduz o número de cálculos para 1/4, mas cria uma AO menos fina - o resultado pode ser um pouco sombreado
Esperamos que todas essas informações sejam interessantes e úteis para você. Enviaremos um high-five virtual se você ler este artigo até este ponto. Você merece um biscoito e uma xícara grande de chocolate quente! Se você ainda deseja obter mais detalhes sobre este tópico, sinta-se à vontade para verificar, por exemplo, este link .
Obrigado pelo seu tempo e apoio, e nos veremos novamente em alguns dos próximos artigos da seção "Sob o capô" que trazemos para o nosso #BestCommunityEver de tempos em tempos.
Obrigado pelo seu tempo e apoio, e nos veremos novamente em alguns dos próximos artigos da seção "Sob o capô" que trazemos para o nosso #BestCommunityEver de tempos em tempos.
Nenhum comentário:
Postar um comentário