Como sabemos a Xbox One possui uma grande limitação na dimensão da sua memória rápida, a ESRAM. Eis em que consiste o método Forward Plus que o motor de Forza utilizou para melhorar essa situação.
Há basicamente dois métodos principais se render a imagem para jogos 3D. Já falamos deles aqui na PCManias.
O Forward Rendering é o método original, o velhinho Old School.
O Deferred Rendering é uma metodologia mais recente.
Cada um dos métodos tem prós e contras, sendo que a principal vantagem do Deferred é que tem impactos muito menores na performance quando lida com multiplas luzes, sendo um método “relativamente simples” de ser implementado. Se lerem o artigo da PCManias sobre as limitações da Xbox poderão perceber que o forward rendering é muito mais versátil na forma como pode libertar espaço na ESRAM, mas infelizmente com este método cada objecto tem de ser rendido em numero idêntico ao número de luzes aplicadas.
Já no deferred rendering, ele só é rendido uma única vez, tendo ainda o bónus de a luz ser tratada como geometria, o que simplifica os cálculos.
O problema do Deferred Rendering são os seus contras, nomeadamente o facto de ser mais pesado quando lida com materiais múltiplos e dado que usualmente a geometria é separada no seu próprio buffer tem por vezes problemas com o MSAA, particularmente no hardware AMD.
O que os programadores fazem é não usar materiais multiplos, ou criar um G-buffer que guarda os dados de geometria entre outras coisas necessárias à produção da imagem final.
Infelizmente para a Xbox One, um G-Buffer completo gasta muita memória e ao usar muitos materiais, cada material aumenta ainda mais o tamanho do mesmo, criando-se uma situação incomportável.
A ideia do Forward+ surgiu da AMD pois os seus GPUs foram pensados para implementar o MSAA (Multi Sampling Anti Aliasing) ao nível do hardware, e assim sendo, dada a separação da geometria, a penalização pelo uso do G-Buffer acaba por ser maior que nas placas Nvidia.
O forward+ desenvolvido pela AMD e usado no motor de Forza, basicamente é um forward rendering onde se usa um compute shader para aplicar a luz à imagem calculada pelo método de Forward rendering, em vez de se ter de render o objecto multiplas vezes (uma vez para cada fonte de luz). Isto poupa uma série de passagens bem como imensa memória ao dispensar o G-Buffer (no forward rendering a geometria não é separada e está sempre presente). Para além do ganho de memória, o método permite o uso de MSAA implementado ao nível do hardware.
É uma técnica ainda muito pouco usada (que eu saiba até foi a primeira vez que foi usada em um jogo comercial), mas das mais adequadas à realidade da Xbox One, e que este jogo, tendo sido desenvolvido de raiz para a consola, e pensando na sua realidade, utilizou pela primeira vez. Tal permite à consola o uso de um grande número de luzes, em tudo semelhante ao usado nos métodos de deferred rendering, mas sem o consumo de memória do G-Buffer associado e que levaria muito certamente a resolução a descer para os 900p ou menos.
É a “prova provada” que as conversões de jogos PC são um ponto positivo, mas igualmente bastante negativo nesta geração de consolas que necessitam de usar o poder do GPGPU para mostrarem a sua performance total.
Podem consultar parte de um documento da AMD sobre o método seguindo o link.