Como a tecnologia SSAO funciona nos jogos da SCS Software?

Depois de muito tempo, os desenvolvedores da SCS Software decidiram escrever outro artigo detalhado dos bastidores, desta vez no SSAO, a oclusão ambiental gerada na imagem, que foi adicionada como parte das atualizações de 1,38 para o ATS e o ETS2.
A seção a seguir é, portanto, uma tradução completa do artigo original do blog do SCS Software.
 
 Hoje, gostaríamos de explicar o novo recurso gráfico que estamos apresentando em nossos jogos com a atualização 1.38. Este artigo é muito técnico - pedimos aos nossos programadores que nos ajudassem, e a explicação é bastante complicada. No entanto, sentimos que, pelo menos para alguns de vocês, esse material pode ser muito interessante - para que você possa ver que o que está acontecendo sob o capô do mecanismo de jogo requer muita pesquisa e trabalho duro da nossa equipe de programadores. Além dos próprios detalhes técnicos, acreditamos que explicar as trocas de contexto e desempenho pode ser útil e importante para a maioria dos jogadores.
Um resumo do texto abaixo seria que a oclusão ambiental gerada na imagem é uma técnica excelente, nova, mas de alto desempenho, que enriquece a renderização do nosso mundo de jogo. Você não precisa usá-lo se sentir que seu desempenho está muito baixo, ou pode gostar e pode sacrificar alguns quadros por segundo para uma melhor percepção de sombras e profundidade. Todo o efeito pode ser insignificante, geralmente funciona no nível subconsciente, mas depois que você se acostumar, provavelmente encontrará dificuldades para retornar. Esse é outro marco em nosso plano para melhorar a iluminação / sombreamento em que estamos trabalhando, e será seguido por um novo processamento de luz usando HDR e uma introdução mais ampla de superfícies normalmente mapeadas nas próximas atualizações.
Essa técnica tem suas limitações e armadilhas. Ele tem sido usado por vários jogos AAA nos últimos anos e, embora não seja perfeito, ajuda a percepção humana a entender melhor a cena, por isso esperamos que adicioná-la ao nosso mix de tecnologia para simuladores de caminhão seja benéfica. No futuro, definitivamente queremos introduzir outras maneiras de calcular sombras que irão melhorar ou mesmo substituí-las.


Estamos sob pressão constante da parte vocal da base de fãs para melhorar a aparência de nossos jogos, mas, ao mesmo tempo, ainda há um desejo de rodar nossos jogos mais rapidamente. Além dessas demandas, às vezes conflitantes, provenientes da base de jogadores, também temos nosso próprio departamento de gráficos, que sempre deseja novas conveniências gráficas para tornar nossos jogos mais ricos e melhores. 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 que o jogo se torne incompatível com nossos clientes existentes. Portanto, existe a opção de desativar o SSAO completamente e fazer várias configurações para sua qualidade / desempenho.

O trabalho dos programadores nas novas técnicas SSAO / HBAO também exigiu mudanças em nossas práticas de modelagem. Todos os modelos 3D em nossos jogos tiveram que ser reformulados pelo departamento de arte e, em todos os casos em que sombras falsas ou apagões já foram aplicados diretamente ao modelo, eles foram alterados. Para alguns modelos de jogos mais complexos, isso significava uma simplificação que reduzia o número de triângulos o suficiente para melhorar o desempenho da renderização. Até certo ponto, substituímos parte do esforço manual futuro necessário para criar modelos 3D de boa aparência individuais por um processo de renderização algorítmica que unifica a aparência das sombras por toda a cena e ajuda a "enraizar" objetos como edifícios, postes de iluminação ou vegetação. no campo.


O que significa o SSAO e como ele funciona
Antes de começar - observe que o SSAO é uma abreviação geral de "oclusão ambiental do espaço da tela". O nome inclui todas as várias técnicas de oclusão ambiental (AO) e suas variantes que funcionam no espaço da tela (ou seja, elas obtêm todas as informações em tempo de execução a partir dos dados que são plotados na tela do monitor e nos buffers apropriados). Existem SSAO (tecnologia da Crytek de 2007, que basicamente deu nome a todas essas técnicas), MSSAO, HBAO, HDAO, GTAO e muitas outras técnicas, cada uma usando diferentes técnicas de ajuste, cada uma com suas vantagens e desvantagens. Baseamos nossa abordagem em uma técnica horizontal chamada GTAO, que foi introduzida pela Activision em 2016.

A parte da oclusão ambiental (AO) no nome significa que avaliamos quanta luz incidente (principalmente do céu, mas às vezes a oclusão calculada é aplicada a outras luzes) é obscurecida em um local específico no mundo do jogo. Imagine que você está em pé no nível do solo - acima de você veria o céu inteiro, ie. 0% de oclusão, a terra é totalmente iluminada pelo céu. Agora imagine que você está no fundo de um poço - você veria apenas um pequeno ponto do céu, ou seja. que o céu está quase 100% coberto e apenas contribui levemente para a iluminação ambiente desse poço, e é claro que o fundo em si também está bastante escuro. O nível específico de oclusão do ambiente em um local específico afeta os cálculos de iluminação e cria áreas sombreadas em dobras, furos e outros locais "mais complexos". Dependendo do ambiente, pode variar entre 0% e 100%.

Calcular a oclusão em grandes detalhes e com grande precisão exige muito desempenho; basicamente, você teria que emitir raios de qualquer posição contada em todas as direções e testar se eles atingiam o céu ou não e, então, calcular a média do resultado. Quanto mais raios você enviar, melhores informações serão obtidas, mas com o custo de custos de computação mais altos. Este processo pode ser processado offline, por exemplo, quando o mapa é salvo pelo seu designer. Alguns jogos e mecanismos usam esse método, mas dessa forma você poderá gerar informações de oclusão ambiental apenas para objetos estacionários, porque nenhum veículo ou objeto animado está presente naquele momento.

Portanto, em vez de incluir informações estáticas (que também exigiriam muito tempo e espaço em disco, dada a escala do nosso mapa do mundo), queremos calculá-las diretamente enquanto o jogo está em execução. Dessa forma, podemos calculá-lo para interação com veículos, pontes de abertura, objetos animados etc. Entretanto, existe um problema - para uma abordagem computacional, só temos dados visíveis na tela (lembre-se de "geração na imagem"), portanto Uma vez que uma parte do mundo do jogo sai do quadro visível, ele não pode ser usado para calcular a oclusão. Essa limitação cria vários artefatos, como a oclusão que desaparece na parede, causada originalmente por um objeto que ficou atrás da borda da tela, tornando-o invisível não apenas para você, mas também para o algoritmo, de modo que não afetou mais o cálculo da oclusão.
Bem, agora sabemos o que calcular (oclusão ambiental) e sabemos com que dados podemos contar (o que vemos na tela). O que faremos sobre isso? Bem, para cada pixel na tela (ou seja, 2 milhões de pixels em resolução HD, 4 vezes na escala de 400%!) Nosso código de sombreamento deve consultar o valor dos pixels ao redor do buffer z e tentar ter uma idéia da forma geométrica da área que o cerca. Temos apenas um número limitado desses "toques", porque, com o aumento do número de toques, há um aumento acentuado nos requisitos de desempenho - essa operação é o ônus real das placas gráficas 3D. O limite de toque novamente afeta a precisão da oclusão do ambiente (e pode causar imprecisões e riscos em determinadas situações). Imagine que você deseja calcular o ambiente em uma linha de dois metros e deseja gastar 8 toques para obter uma estimativa mais precisa. Você perguntará a cada 25 cm em uma linha reta, portanto, todos os pequenos detalhes entre esses pontos podem passar completamente despercebidos se você tiver azar e não acertá-lo diretamente no local indicado (ou pelo contrário, você terá azar porque poderá perdê-lo na próxima foto, de modo que os arredores parecerão repentinamente durante as fotos alterado e causa tremulação). Quanto mais o seu algoritmo detecta, menos preciso ele é. Portanto, você precisa limitar o tamanho da área que analisa em torno de cada pixel do jogo, o que, por sua vez, limita o quão "oculta" a oclusão do ambiente - para que esse método não seja adequado para calcular oclusões em grandes espaços, como em arcos. de repente os arredores parecem mudar durante as fotos e causar tremulação). Quanto mais o seu algoritmo detecta, menos preciso ele é. Portanto, você precisa limitar o tamanho da área que analisa em torno de cada pixel do jogo, o que, por sua vez, limita o quão "oculta" a oclusão do ambiente - para que esse método não seja adequado para calcular oclusões em grandes espaços, como em arcos. de repente os arredores parecem mudar durante as fotos e causar tremulação). Quanto mais o seu algoritmo detecta, menos preciso ele é. Portanto, você precisa limitar o tamanho da área que analisa em torno de cada pixel do jogo, o que, por sua vez, limita o quão "oculta" a oclusão do ambiente - para que esse método não seja adequado para calcular oclusões em grandes espaços, como em arcos.

Mencionamos que a técnica que escolhemos é baseada no horizonte. Isso significa que não examinamos o ambiente emitindo raios no mundo 3D; em vez disso, analisamos o hemisfério acima / ao redor de cada pixel para ver até que ponto ele se abre até ficar obscurecido por quanta luz é deixada entrar na geometria circundante usando o buffer z como enviado. Na verdade, o hemisfério é aproximado por várias execuções ao longo de uma linha desenhada em torno de um determinado pixel. Se pudermos observar todo o hemisfério por inteiro, não haverá sombra. Se o algoritmo tocar em um valor no buffer z que bloqueie a luz recebida, ele definirá o nível de sombreamento. O algoritmo é otimizado para desempenho, mas sua limitação é que, assim que toca em algo, mesmo um objeto provavelmente pequeno, ele pára de investigar mais. Isso pode causar um problema de "sombreamento" e pode ser visto como um artefato visual em que um objeto relativamente fino, como um poste de sinalização de trânsito, causa uma forte oclusão em uma parede próxima. Você pode tentar detectar objetos pequenos e ignorá-los, o que por sua vez pode causar "sombreamento insuficiente". Decidimos sobre a primeira variante.

Há também outra característica interessante e útil das técnicas baseadas no horizonte. Dependendo de quanto do hemisfério acima de um determinado pixel está sombreado, é possível calcular a direção menos sombreada. A extensão da oclusão pode ser imaginada como uma casquinha de sorvete com um ângulo de vértice variável orientado em uma determinada direção. Essa direção é chamada de "normal dobrado" e a usamos para vários cálculos de luz, como reflexos de sombras em superfícies brilhantes. A idéia é que, quando você olha para a superfície e as direções refletidas no espelho saem desse cone, consideramos uma oclusão (pelo menos parcial), que reduz a intensidade da reflexão. A melhor maneira de ver esse efeito é observar peças cromadas maiores e redondas, como tanques de combustível, com o SSAO ligado e desligado.

Portanto, como você pode ver, a idéia em si não é tão exigente, pelo menos para um programador profissional de gráficos, mas existem muitos cálculos que sobrecarregam a placa de vídeo 3D. Por isso, criamos vários perfis de desempenho, cada um com a ajuda de diferentes técnicas de otimização:

  • Use menos toques para cada direção - é mais rápido, mas permite que a oclusão do ambiente omita objetos maiores do que com amostras mais refinadas.
  • Redesenhar os resultados da oclusão ambiental da imagem anterior - permite ocultar artefatos da redução de amostragem, mas "fantasmas" podem ocorrer se o redesenho falhar (quando o que você vê entre as imagens geralmente muda).
  • Renderização com resolução mais baixa - reduz o número de cálculos em um quarto, mas cria uma oclusão ambiental menos precisa, resultando em sombreamento levemente desfocado
Se você leu este artigo até agora, estamos satisfeitos que sua tradução tenha sido útil entre nossos leitores. Não se esqueça de compartilhar conosco os comentários sobre suas observações ou comentários e perguntas.

Fonte: 
blog.scssoft.com
Postagem Anterior Proxima Postagem