Crytek Utilizou Defered Rendering e Tiling em Ryse: Son of Rome, contornando os limites da eSRAM

A notícia que se segue foi publicada sob muitas formas, mas aqui na PCManias a publicação terá de ser diferente, pois a Crytek ao revelar o método usado para criar Ryse: Son of Rome, revela que usou um processo de Tiling, o método que sempre aqui referimos como obrigatório para se ultrapassar os limites da eSRAM da Xbox One.

Ryse

Naturalmente que quem ler o sub-titulo desta notícia, e for um fanboy Sony vai imediatamente dizer “Ah, mas Ryse é apenas 900p e também não atinge os 1080p”.

E tem razão! A questão é que… dizer apenas isso é um tremendo disparate.

Para o provar vamos falar de Killzone. Kilzone é um jogo que usa uma técnica chamada Deferred Rendering (igualmente chamada de Deferred Shading). É um método com vantagens e desvantagens, sendo que uma das suas principais vantagens é o ultrapassar o limite relativamente pequeno de luzes dinâmicas que podemos tem em cena, o que permite pormenores gráficos mais evoluídos quer a nível de sombras, quer a nível de shaders.



Ora um dos inconvenientes deste método, para além da complexidade de programação, é o facto de criar render targets de enormes dimensões. Killzone: Shadow Fall na PS4 apresenta render targets de 800 MB, alho incomportável para os 32 MB da memória rápida da Xbox One.

Ora o que provavelmente é novidade saber-se é que Ryse: Son of Rome usa igualmente Defered Rendering/Shading. E isso é algo que parece completamente incomportável para a consola devido à sua pequena memória rápida.

Ora aqui na PCManias, já em Novembro de 2013 que falamos que uma das soluções para resolver o problema do limite da eSRAM passava pelo uso de uma metodologia de programação denominada de Tile Rendering (da mesma forma também conhecido como Tiled Shading). Este método basicamente divide a imagem nas quantidades que forem necessárias para que o Frame Buffer caiba na memória, unindo depois os resultados para a criação da imagem final.

Até ao momento, este método que já foi usado na Xbox 360, apenas dividiu o ecrã em duas partes, e os problemas com a união foram bastantes. Mas a Crytek não é nenhuma novata no assunto, e possui alguns dos melhores programadores do mundo, pelo que implementou esta técnica em Ryse, mas mais ainda, foram loucos o suficiente para a maximizar ao aplicarem Deferred Rendering/Shading.

Isto quer dizer que a consola não atinge os 1080p por limites que não os impostos pela eSRAM (muito certamente tal não acontece pois os FPS, mesmo a 900p caem por vezes abaixo dos 30), e vem comprovar que a metodologia, se bem usada e conjuntamente com os Move Engines, pode efectivamente resolver o problema do limite da eSRAM da Xbox One.



Citando o US Engine Business Development Manager da Crytek, Sean Tracy sobre as vantagens que o CryEngine, o motor da Crytek possui para o uso do Tile Rendering (tradução livre, pelo que a descrição sendo um pouco técnica e complexa de se traduzir, se disponibiliza a versão original no final):

O Cry Engine tem uma solução única e inovadora para essa situação e que foi despachada com Ryse. Um dos problemas de usar Deferred Shadingé que ele é muito pesado em largura de banda e tráfego de memória. Isto é exponencialmente pior quando as luzes sobrepostas causam consideraveis quantidades de leitura e escrita redundantes. Para resolver isso, em Ryse os nossos engenheiros gráficos criaram um sistema chamado tiled shading que tira vantagem da Xbox One.

Isto divide o ecrã em pedaços e gera uma lista de todas as luzes efectivas em cada pedaço usando um computer shader. Então verifica a luz visível nos pedaços em extensões mínimas e máximas. Saltamos então sobre cada uma das luzes da lusta e aplicações o shading.

Na prática isto permitiu os maiores ganhos de largura de banda que poderíamos espera, bastando ler o Gbuffer uma vez e escrever os resultados do shading uma vez no final de cada pixel. Apenas um único compute shader foi usado em Ryse para a verificação da visibilidade da luz, executando o pipeline scompleto de luz e shading (com algumas excepções para superfícies complexas como a pele e o cabelo).”

Versão original:

CryEngine has a unique and novel solution for this and was shipped with Ryse. One of the problems when using Deferred Shading is that it’s very heavy on bandwidth usage/memory traffic. This gets exponentially worse as overlapping lights cause considerable amounts of redundant read and write operations. In Ryse our graphics engineers created a system called tiled shading to take advantage of the Xbox One.

This splits the screen into tiles and generates a list of all the lights effective each title using a compute shader. It then cull’s light by min/max extents of the tile. We then loop over the light list for each tile and apply shading.

In practice this made for the biggest bandwidth save we could have hoped for, as just reading the Gbuffer once and writing shading results once at the end for each pixel. Only a single compute shader was used in Ryse for light culling and executing entire lighting and shading pipelines (with some small exceptions for complex surfaces like skin and hair).


Percebe-se agora a afirmação da Crytek dada à dias e na qual a empresa referia que não se esperava que os “bottlenecks” da Xbox One com a eSRAM fossem alguma vez resolvidos, mas que acreditava que aparecessem diversas técnicas únicas que o contornassem.

Sinceramente, Ryse é um dos jogos de nova geração que graficamente me fascinou. Não posso afirmar que seja o melhor jogo que já via a nível gráfico, mas que é impressionante… isso é inquestionável.



Posts Relacionados