Dreams é um exclusivo da Media Molecule para a PS4. E é o primeiro jogo a ser programado sem usar o tradicional sistema de rasterização, sendo feito 100% por computação no GPU.
Todos os jogos que habitualmente jogamos usam o pipeline gráfica das placas gráficas para apresentar os seus resultados. Isso quer dizer que usaremos os vertex shaders, os pixel shaders, as ROPs, cálculos de função fixa, etc, etc.
A grande inovação desta geração será misturar esse pipeline gráfico com a capacidade de computação do GPU, seja para a criação de físicas ou de outras componentes gráficas. Isso graças à computação assíncrona que permitirá que ambos os pipelines funcionem em paralelo.
Dreams da Media Molecule não utiliza computação de forma assincrona, mas pela primeira vez na história, cria um jogo onde a totalidade do grafismo é criado no pipeline de computação, sem sequer tocar no pipeline gráfico tradicional!
@anji_nl @BrianKaris thanks guys! Luckily @mirror2mask booked me to spill at siggraph already 🙂 100% compute, no rasterizer!
— xelamm snave (@mmalex) 16 junho 2015
Os motivos? A ver se conseguimos explicar de forma simples (e isto é complexo).
No grafismo o que temos é uma representação geométrica, normalmente um conjunto de triângulos que definem uma forma. E é algo universal nos jogos!
No entanto também podemos abordar a situação de outras formas menos comuns. Por exemplo, é possível descrever-se os objectos por formulas matemáticas, por exemplo, uma esfera!
Tradicionalmente seria algo do género:
Aqui teríamos centro em (x0, y0, z0) e raio r.
Poderíamos parametrizar os pontos da esfera da seguinte forma:
Outra equação é aquela que pegando num ponto num espaço 3D fornece a menor distância entre esse ponto à superfície da forma. E podemos usar essa função no “render” gráfico. Num ray tracing, por exemplo, para se determinar qual o ponto na esfera que os pixels da câmara devem render.
Assim, em vez de um conjunto de poligonos que representam a esfera no pipeline gráfico, podemos traçar um raio por pixel e avaliar precisamente que ponto da esfera esse pixel representa. Se já ouviste falar de efeitos “por pixel” em outros contextos, isto seria algo como geometria “por pixel”.
Ora estas funções permitem fazer coisas interessantes. Por exemplo, misturar formas com operações matemáticas entre as funções que definem as duas formas. Podes subtrair uma forma da outra com outra operação. Podes deformar as formas numa série de maneiras interessantes, adicionar ruido, torce-las, etc.
Por exemplo, a imagem de baixo mostra uma forma com uma pequena deformação na superfície descrita por uma função usando um seno.
A imagem foi rendida usando a função. A cada pixel a função foi avaliada de forma a se determinar a sua posição. Note-se como a figura é suave! Não há deformações poligonais, ou pontas. É uma forma muito precisa de se render a geometria.
Basicamente as grandes vantagens desta metodologia são a deformação robusta e as operações booleanas como adição/subtração e intersecção, que com polígonos são deveras complexas. E o cálculo da menor distância entre um ponto e uma superficie pode ajudar com o ambient occlusion, sombras, luz, fisica (detecção de colisões), etc.
O Unreal Engine 4 acrescentou recentemente esta mesma metodologia para cálculo de sombras de alta qualidade.
A dificuldade do método é a velocidade de cálculo, daí que os GPUs, pela sua extrema velocidade, pareçam a ferramenta ideal. E a Media Molecule, tendo criado um mundo onde o jogador molda as suas personagens, encontrou nesta metodologia a ferramenta ideal, optando por nem sequer tocar no pipeline gráfico tradicional.
Um PDF sobre a técnica pode ser encontrado aqui. O video que se segue é uma demo tecnológica já com 6 anos, com 4 Kbytes de dimensão e que implementa toda esta técnica de “render” processual.
Ficamos agora a saber as capacidades gráficas do GPGPU. Agora é esperar por um jogo que some as mesmas ao Pipeline tradicional usando a computação assíncrona, e podermos imaginar como as melhorias gráficas poderão evoluir.