Entrevista Tecnológica: Split/Second
Digital Foundry sobre tecnologia com o director David Jefferies.
O único factor que precisam ter em conta quando estão a escolher entre correr a 30FPS ou 60FPS é qual a opção que vai dar ao consumidor a melhor experiência possível. A resposta a essa questão varia de jogo para jogo.
Independente do quão optimizado o teu motor está, podes, por definição, renderizar o dobro de detalhe a 30FPS do que a 60FPS. Para Split/Second sentimos que a experiência do consumidor seria imensamente melhorada tendo ambientes mais detalhados, mais físicas, mais efeitos especiais e explosões, mais iluminação e Power Plays mais impressionantes.
Se feito correctamente, um jogo a 30FPS que estique a consola aos seus limites consome mais tempo do que criar um jogo a 60FPS que estique a consola aos seus limites. Isto porque se fores desenhar o dobro no ecrã então os teus artistas precisam de gerar mais elementos a um maior nível de detalhe.
Lançámos muitos jogos a 60FP e lançámos muitos jogos a 30FPS e tomamos a decisão sobre o rácio de fotogramas no início de cada projecto - 30FPS são definitivamente a escolha certa para Split/Second mas pode ser que no futuro com um tipo de jogo diferente ele corra a 60.
Isto foi de longe o maior desafio tecnológico em Split/Second. As nossas maiores Power Plays podem ter 1.8km de distância, ter mais de uma centena de ramificações. centenas de físicas de objectos, dezenas de luzes e partículas e serem renderizadas num ambiente que contém um par de milhões de polígonos visíveis para não mencionar o brilho, graduação de cor, faróis anamórficos, HDR e nódoa de movimento.
Se fossemos somar todo o tempo gasto pelo programador a optimizar o motor seria medido em décadas, e inventámos alguns novos paradigmas de renderização porreiros. Verifiquem a nossa conversa "Screen Space Classification for Efficient Deferred Shading" na SIGGRAPH este ano para uma visão mais aprofundada.
Sim a optimização deve-se tanto aos artistas quanto aos programadores. Uma das ferramentas internas que lhes providenciamos é chamada Megabowles, e corre ao longo de cada ambiente no jogo activando cada Jogada de Poder e medindo a performance do jogo em cada ponto da pista.
Actualiza a enorme base de dados que contém a informação sobre onde o jogo está a exceder o estipulado para a renderização e porquê. Esta informação é então enviada de volta aos artistas que trabalham nos seus elementos até que estejam dentro do estipulado.
Lidamos com o problema da variação que os carros e eventos programados introduzem tendo orçamentos separados para os diferentes componentes do jogo. Por isso as partículas devem sempre estar dentro do orçamento das partículas, todos os carros devem ser renderizados no ecrã e dentro do orçamento dos veículos, as Power Plays devem estar dentro do orçamento das Power Plays e por aí adiante.
Todos os orçamentos juntos dão 33ms (uma única actualização 30Hz demora 33.33ms). Por isso não importa que coisas loucas estejam a acontecer no ecrã . desde que todos os componentes estejam dentro dos seus orçamentos então o fotograma vai terminar a renderização a tempo.
O renderizador Split/Second é correcto com gama, renderização com sombrear diferido. A parte correcta com gama é muito importante. O que isso significa é que nós convertemos correctamente os valores de entrada do calculador de efeitos de renderização do pixel em espaço linear antes de aplicar cálculos de iluminação usando um alvo de renderização de alta precisão.
Se não fizeres isto então os cálculos de iluminação são feitos em espaço gamma, o que é errado. Se pegares no número 1.0 e dividir por 2 em espaço gamma então vais ter cerca de 0.73, que não é o que queremos.
Podem massajar as entradas do calculador de efeitos de renderização do pixel (para texturas e iluminação por exemplo) para dar mais ou menos o resultado certo em certas circunstâncias mas nunca vais ter o resultado certo a todo o tempo, especial com valores de pixeis de baixa intensidade.
Muitos jogos não se preocupam com a correcção gama porque demora muitos meses a desenvolver um encadeamento correcto em gama completo e podes conseguir 'aproximadamente' sem ele. Se realmente investires o tempo para desenvolver um encadeamento então garantes que os teus cálculos de iluminação estejam sempre absolutamente correctos. É isto que estás a ver quando olhas para os objectos não directamente sobre a luz do sol em Split/Second - os pixeis de baixa intensidade estão iluminados correctamente ao invés de estarem incoerentes.
Outro factor importante aqui é o anti-aliasing. Essencialmente o MSAA tipifica a cor dos sub-pixeis no limiar de um polígono, por isso para 2xMSAA faz algo como P = (Pa + Pb) / 2.0. Como explicado antes, matemáticas não funcionam como esperariam quando um espaço não linear como um espaço gamma por isso a equação não vai dar resultados correctos.
Muitos jogos correm com anti-aliasing incorrecto e o programador ou ignora os artefactos que são produzidos ou então tem iluminação de baixo contraste que significa que os artefactos são menos proeminentes.
O estilo de iluminação de Split/Second pediu iluminação de muito alto contraste por isso foi essencial acertarmos isto.
A parte das sombras diferidas do renderizador significa que quebrámos a velha ligação entre geometria e iluminação. Com um renderizador tradicional, na renderização de um objecto precisas de especifica previamente quantas luzes o vão afectar (geralmente quatro) porque as luzes são renderizadas durante o passo 3D geométrico.
Com um renderizador de sombras deferido nós deferimos a iluminação da cena até depois do passo 3D geométrico. Neste ponto temos toda a geometria renderizada com cor albedo e então aplicamos a iluminação no espaço de ecrã.
Isto significa que podemos renderizar quantas luzes para as que tivermos rácio de preenchimento - em alguns dos nossos níveis nocturnos o número de luzes visíveis corre para as centenas.
Na PS3 a passagem da iluminação é feita nos SPUs para retirar carga do GPU. Esta técnica significa que todas as explosões, todas as faíscas, todas as luzes dos túneis é uma verdadeira fonte de luz. Também permite que os artistas coloquem centenas de luzes para simular luz imóvel no ambiente - estas luzes afectam subtilmente o carro enquanto este se move pela cena e ajuda a o assentar no mundo.