Processo de Renderização


Este post irá descrever todas as grandes fases envolvidas no processo de renderização de uma cena 3D.

Minha meta é algum dia conseguir renderizar uma cena em real time semelhante ao que a Crytek fez na imagem ao lado (toda vez que eu vejo esta imagem eu não acredito que seja ela seja “real”) ….. de volta ao mundo real, vamos ao artigo =P

Renderização: Conceitos fundamentais

O processo de renderização é dividido em diversas etapas. Ele começa a partir da geração das geometrias e termina com a produção da imagem 2D final, passando pelas fases de posicionamento de objetos, posicionamento de câmera, projeção e rasterização.  A imagem abaixo mostra as principais fases.

Processos envolvidos na renderizacao baseada em rasterizacao

 

Geração da Geometria

Consiste na geração dos modelos gráficos que representarão cada objeto do mundo virtual. Para a computação gráfica, estes modelos não passam de uma descrição de primitivas gráficas e suas conexões. Em renderização de tempo real normalmente utilizam-se triângulos como primitiva básica, pois a pipeline das placas gráfica está otimizada para este uso.
Os triângulos podem ser representados de diversas maneiras, tais como Triangles Strip, Triangle Fans e Triangle List}. O formato de representação mais utilizado pelos renders e exportados pelos softwares de modelagem é a Triangle List indexada que são constituídas por uma lista de vértices e uma lista de índices.
A lista de vértice contém todos os vértices dos triângulos que fazem parte do modelo. Como eles normalmente representam superfícies sólidas conectadas, diversas primitivas compartilham seus vértices com triângulos adjacentes. Uma maneira de economizar espaço é armazenar os valores dos vértices uma única vez em uma lista e depois utilizar a lista de indices para descrever cada triângulo, conforme mostrado na figura abaixo

Vertices e Indices

 

Além das informações sobre a topologia dos triângulos, tem-se também dados relativo às cores de cada vértice, este tipo de informação é normalmente representada através de uma coordenada 2D que mapeia cada vértice para uma região de uma Textura 2D (pode-se armazenar cores diretamente nos vértices, porém esta pratica não é mais usual). Durante o processo de renderização, efetua-se uma “colagem”, no qual, a cada vértice do modelo, recupera-se a coordenada de textura armazenada e a interpola para toda a primitiva, para cada coordenada gerada, busca-se a cor armazenada na textura 2D e aplica-a na primitiva (Conforme mostrado na figura abaixo)

 

Texture Mapping

Outras informações adicionais podem ser fornecidas como normais do modelo a cada vértice (importante para o cálculo de iluminação) e tangentes a cada vértice (importante no uso de técnicas como Bump e Paralax Mapping).
O renderizador recebe um arquivo de texto ou binário descrevendo cada modelo ( que contém as informações discutidas anteriormente ) que será desenhado e converte-o em um formato interno adequado para realizar as transformações que serão explicadas a seguir.

Posicionando os Objetos na Cena
Os modelos gerados anteriormente estão em “espaço de modelo”, ou seja, o centro de coordenadas dele é o próprio baricentro (o centro do sistema de coordenadas aos quais os triângulos do modelo se referem é o baricentro do próprio modelo).
Uma cena 3D é constituída de diversos objetos espalhados pelo ambiente, desta forma, é necessário colocar cada um dos objetos em seu devido lugar. Este posicionamento consiste em aplicar uma transformação que levará o modelo do “espaço de modelo” para o “espaço de mundo” (passarão a referir-se ao centro da cena do mundo virtual ao invés do proprio baricentro).
As transformações consistem normalmente de uma translação, uma rotação e uma operação de escala (alteração no tamanho do objeto). Matematicamente, elas são representadas por matrizes 4×4, que podem ser facilmente combinadas com multiplicações. A posição de um vértice é representada por um vetor 4×1. (conforme mencionado, um vértice pode conter diversas outras informações além da posição).
De maneira resumida, posicionar os objetos no mundo virtual consiste em multiplicar cada um dos vértices do seus triângulos por uma transformação (comumente chamada de World Matrix). Caso o modelo contenha outras informações como normais ou tangentes, estas também devem ser transformadas.

Câmera
A cada instante (frame) pode-se observar apenas uma pequena fração do mundo virtual (semelhante a uma câmera fotográfica). Esta fração é definida em computação gráfica por uma câmera virtual que possui dois grupos de parâmetros, um primeiro associado ao posicionamento desta câmera (Matriz View) e um segundo associado a projeção (Matriz Projection).
Matematicamente, o processo de posicionar uma câmera no mundo consiste em construir um novo sistema de coordenadas cujo centro é a posição da câmera. Os parâmetros necessários para a criação deste sistema são:

  • Posição da câmera
  • Vetor representando a direção da câmera
  • Vetor apontando cima em relação a câmera

Os objetos da cena são transformados do espaço de mundo para um novo espaço chamado de “espaço de câmera” ou “espaço de olho” (eye space).
Após aplicada esta transformação, as coordenadas dos vértices de cada modelo estarão se referindo a este sistema de coordenadas definido. Uma conseqüência deste processo é que todo objeto que estiver no campo de visão da câmera irá aparecer no eixo Z, conforme mostrado na figura abaixo.

Posicionando a Camera

Ao ter todos os objetos se referindo à posição da câmera, o procedimento para descobrir quais não estão dentro do raio de visão é simplificado (por exemplo, objetos com coordenadas Z negativa estão claramente atrás da câmera).

O proximo passo é a projeção do mundo visto para uma superfície 2D, para isto precisa-se de informações relativas a lente desta câmera. Normalmente em jogos utiliza-se uma projeção perspectiva (uma vez que o olho humano enxerga o mundo desta maneira). Os principais parâmetros deste tipo de projeção são:

  • Plano Mínimo de visão (Near Plane), distância mínima na qual pode-se ver algo, objetos mais próximos que estão distância não são vistos.
  • Plano Máximo de visão (Far Plane), distância máxima na qual pode-se ver algo
  • Campo de Visão
  • Aspect Ratio (relação entre a largura e comprimento da lente)

A projeção é também representada por uma matrix (maiores detalhes de sua construção pode ser encontrado no livro realtimerendering). As duas matrizes (View e Projection) em conjunto definem uma figura geométrica chamada View Frustum. Uma maneira visualmente simples de entender o processo de projeção é enxergar a câmera como um “gerador de Frustrum”, ou seja, ela esta no (0,0,0) e cria um tronco de pirâmide na direção do eixo Z. A cada frame todas as geometrias (triângulos dos modelos) da cena serão inspecionadas, se elas estiverem dentro do Frustrum, então serão projetadas no Plano Próximo da câmera, e provavelmente aparecerão na imagem final (a menos de oclusão) como mostrado na figura abaixo. Caso contrário serão descartadas.

Camera Frustrum

Ao efetuar a transformação de projeção, tem-se como resultado um vetor 3D X,Y,Z em que as coordenadas X,Y representam a posição do vértice projetado no plano Próximo da câmera e a coordenada Z representa a distância deste vértice em relação à câmera. Este espaço é chamado de Espaço Homogêneo de projeção (Homogêneo, pois independe de resolução de tela, as coordenadas X,Y,Z variam entre -1 e 1 ). A coordenada Z é utilizada mais a frente para decidir quando um objeto está na frente de outro (Depth Test).

Em resumo, cada vértice de cada triângulo de cada modelo que estão em coordenadas de mundo são transformados pelas matrizes de View e Projection (nesta seqüência), e o resultado é um vértice projetado no Plano próximo da câmera (que pode ser visto como um anteparo 2D qualquer como a tela de um monitor). Parâmetros adicionais como normais não devem ser submetidos a estas duas transformações.

Clipping e Rasterização

Os vértices que não estão completamente dentro do frustrum definido pela câmera não serão completamente visíveis e devem ser “clipados”. Esta etapa não é uma fase necessária, porém ajuda bastante no desempenho, uma vez que apenas os vértices que de fato contribuirão para a imagem final serão rasterizados. Este processo normalmente é feito por um hardware dedicado.
Após o Clipping vem a rasterização, no qual os vértices projetados no Plano próximo da câmera são transformados em pixels. Como exemplo considera-se um simples triângulo em espaço de projeção que passou pelo processo de Clipping intacto (estava completamente dentro do frustrum), a rasterização gera todos os pixels interiores a este triângulo. Inicialmente tem-se apenas três pontos, no fim da rasterização tem-se estes mesmo três pontos somados a todos os outros interiores à primitiva (os pontos gerados também estarão no espaço de projeção).
Outros atributos como Normais e coordenadas de texturas também são interpolados para cada pixel pelo rasterizador (no caso do triângulo anterior, o rasterizador interpolaria os valores das normais dos vértices para cada ponto interior ao triângulo). Obviamente os valores gerados estarão no espaço de coordenadas adequados (no caso das Normais o espaço mundo, a rasterização apenas interpola valores).

Colorindo os Pixel

Nesta fase, os pixels gerados pelo rasterizador devem ser coloridos. Normalmente nesta etapa é realizado o mapeamento dos pixels para os texels de uma textura 2D. Alguns sistemas de iluminação calculam suas equações neste momento.

Alpha Blending, Alpha, Stencil e Depth Tests

Por fim os pixels coloridos gerados na fase anterior são combinados (às vezes usando Alpha Blending) e testes de profundidade são realizados que apenas o pixel mais a frente (com menor Z) estará na imagem final. Uma outra operação realizada neste estagio é a conversão das posições dos pixels que estão em espaço homogêneo de projeção para coordenadas de tela dependentes de resolução.
O resultado desta fase é a imagem final, o conteúdo gerado é lido pelo dispositivo de saída (monitor, por exemplo) e visto pelo usuário.
A seqüencia de fases mostrada pode ser implementada completamente em software (como foi durante bastante tempo, a um tempo atras eu me aventurei e implementei um software render) ou em hardware.

Para uma abordagem deste assunto mais voltada ao hardware confiram meu tutorial no PontoV

, , , , , , , , , , , , , ,

  1. #1 by harta gono gini on 24 de março de 2017 - 7:43 pm

    And I POSSESS read wordpress support page. Just want to know, if my files over 3GB will certainly be deleted if I will not extend my upgrade for another 12 months..

  2. #2 by seo expert on las vegas on 24 de março de 2017 - 8:27 pm

    The best las vegas seo is here. Their las vegas seo expert, consultant, experts and consultants are the best from all the las vegas seo companies. Check out their SEO Las Vegas today.

  3. #3 by nike shoes on 24 de março de 2017 - 8:29 pm

1 382 383 384
(não será publicado)