Engine de Renderização
– Transformações 3D: Nesta etapa aplica-se o movimento aos modelos 3D. Este movimento consiste no seguinte: a cada passo do jogo uma matriz irá acumulando o resultado de todos os movimentos que o objeto sofreu ao longo de seu histórico. Antes de visualizar a cena, será aplicada esta matriz sobre cada vértice que o compõem, posicionando-o no local que lhe corresponde naquele instante;
– Projeção 3D → 2D: Os vértices que compõem o objeto são coordenadas 3D, porém a imagem do modelo deverá ser desenhada numa superfície bidimensional (tela do computador). Nesta etapa, os vértices do modelo serão projetados sobre o plano de projeção da câmera. É comum encontrar esta etapa do pipeline junto com a etapa de transformações 3D, pois em última instância realizar esta projeção consiste numa aplicação de matriz de transformação também;
– Culling: Existem inúmeras formas de otimizar o processamento gráfico de um jogo. Uma destas consiste nos métodos de culling (Cull em inglês significa "refugo, escolher, selecionar de dentro de um grupo"). Assim, o que as técnicas de culling terão de fazer é saber escolher polígonos adequadamente, de forma que numa determinada situação, estejam presentes apenas aqueles que realmente importam para a visualização a partir do ponto em que a câmera se encontra. Pode-se pensar também da seguinte forma: quais dos polígonos de uma cena deverão ser enviados para o pipeline da placa gráfica? Obviamente não se deseja enviar algum que não terá nenhuma influência na visualização, mas até que ponto é simples realizar esta escolha, de forma rápida. Existem muitos algoritmos que farão este tipo de escolha. Em muitos casos a eficiência deste procedimento estará atrelada ao tipo de agrupamento e ordem de polígonos (um terreno possui uma distribuição de polígonos completamente diferente de que um personagem ou do que um labirinto). O culling pode ser feito em qualquer estágio do pipeline gráfico. Entretanto, é preferível eliminar os polígonos que não interessam o quanto antes para evitar processamento desnecessário sob polígonos que futuramente poderão ser eliminados. Vale a pena ressaltar que um método de culling não anula outro: podem-se ter os efeitos somados em muitos casos;
– Clipping: Ao projetar polígonos sobre o plano de projeção da câmera, alguns polígonos cairão totalmente dentro da área da tela e outros cairão parcialmente dentro, ou seja, apenas uma parte do polígono estará na tela de projeção. Para estes polígonos é necessário realizar o clipping (recorte), que consiste em criar novas arestas e vértices;
– Rasterização (iluminação e texturização): Finalmente, a última etapa do processo de renderização consiste em preencher os polígonos adequadamente, aplicando o material com o qual estão definidos. Inicialmente poderia-se pensar em fazer este processo através de um cálculo de iluminação para cada um dos pixels (per pixel) do interior de um polígono. Entretanto isto seria demasiadamente caro em termos computacionais. Para viabilizar este processo realiza-se uma interpolação (rasterização) entre a cor de cada um dos vértices que compõem o polígono. Desta forma, o cálculo de iluminação é feito apenas para cada vértice (per vertex) visível da malha. Esta rasterização também poderia demandar bastante tempo de processamento, pois apesar de ser algo simples de ser feito, existem pixels numa tela. Entretanto, este processo é realizado por um hardware específico para esta tarefa, que é a placa gráfica, ou GPU – Graphic Processor Unit.
Existem uma série de efeitos de iluminação (blur, bump-mapping, especularidade) que não podem ser aplicados realizando-se uma rasterização como foi explicada anteriormente. Isto porque para estes efeitos é necessário realizar um cálculo de iluminação per pixel e não per vertex. Para solucionar este tipo de problema, as placas gráficas mais modernas possuem a capacidade de suportar pixel shaders (Figura 60), que são pequenos programas que são executados para cada pixel que será plotado na tela.


Comentários
Postar um comentário