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