Desmistificando gráficos da próxima geração Manoel Balbino de Lima Neto Diretor Técnico, Programador Líder Preloud Electronic Entertainment Brazil O que muda na próxima geração em termos gráficos? • Nova geração de consoles e PCs • Foco em pipeline programável • Geometria deixa de ser o maior limitador Comparações: Antes: • Predominância de função fixa • Efeitos e materiais dependem de código interno da engine • Dificuldade de variar efeitos/materiais • Shaders simples com uso limitado e específico Agora • Shaders como base das engines gráficas • Materiais e efeitos definidos fora da engine • Facilidade de adicionar novos efeitos e materiais • Shaders complexos multipropósito Comparações: Antes: • Geometria processada pela CPU • Geometria enviada “ondemand” para GPU por quadro Agora • Geometria processada pela GPU • Geometria é mantida sempre na GPU, em buffers Importância da pipeline programável • GPU mais independente da CPU, aumentando a paralelização • Flexibilidade e controle sobre o processo de rasterização, permitindo o uso de algoritmos e operações não possíveis com função fixa Tratamento de imagem • Pós-processamento de imagem é vital na nova geração • O maior suporte a shaders permite que efeitos mais avançados, como motion blur por pixel, depth of field, ajuste tonal e outros sejam utilizados simultaneamente sem necessidade de comprometimento do visual do jogo Tratamento de imagem Tratamento de imagem Render to texture • Antes limitado a poucos efeitos, é a base de muitos efeitos visuals na próxima geração: • Shadow mapping • Real-time reflections • Subsurface scattering Shadow Mapping Real time reflections Subsurface scattering Subsurface scattering HDR • Suporte estendido a formatos de textura floating-point permite que texturas e buffers armazenem valores além da faixa de 0 a 1 (inclusive valores negativos) • Isso permite armazenar valores de intensidade de luz mais próximos da realidade • Efeitos como reflexos, refrações, materiais translúcidos, exposição de câmera mais realistas sem necessidade de “hacks” HDR Alta definição • Tanto em PCs quanto em consoles, houve aumento nas resoluções mínimas, e uma migração para formatos 16:9. • Defeitos gráficos são mais visíveis, e demandam maior atenção à qualidade da imagem final • Com mais pixels para serem preenchidos, otimizações de rasterização são cruciais. Alta definição • Utilizar o mínimo de operações para atingir o resultado desejado em um shader • Shader 3 oferece recurso de controle de fluxo reais (for loops e blocos if else) que podem aumentar a performance quando bem utilizados • Todas as texturas devem usar compressão a menos que seja absolutamente necessário: taxas de compressão podem ser de 75% ou 87% por pixel, dependendo do formato Desafios • Maior demanda sobre conhecimento de computação gráfica: – Iluminação, blending de camadas de texturas e transformação de vértices não são mais feitos automaticamente pela GPU: o desenvolvedor precisa “pôr a mão na massa” – Entender os diversos algoritmos de iluminação e a lógica por trás deles permite maior liberdade para criar, otimizar e atingir resultados interessantes (mesmo que “fisicamente incorretos”) Desafios • Gerenciar shaders é vital para um resultado variado e otimizado: – A combinação de propriedades de materiais pode exigir centenas ou milhares de shaders – Criação manual gera código duplicado, de difícil manutenção – Existem formas de automatizar o processo: • Criação procedural de shaders • Linkagem dinâmica (fragment linking) • Über-shaders (super-shaders)