2 minuto(s) de leitura

1. Lista de Frames e Threads

Para exemplificar o processo de renderização vamos apresentar os seguintes passos conforme as thread são executas:

Threads        
CPU Frame A Frame B Frame C Frame D
DRAW CPU   Frame A Frame B Frame C
GPU     Frame A Frame B
Time in milliseconds 0 33 66  

Acompanhe a ordem de execução de cada Frame.

  1. O Frame A é instanciado na CPU;
  2. Logo em seguida o Frame A é passado para um momento onde a CPU e a GPU compartilham alguns elementos de construção. Enquanto isso ocorre a CPU carrega o Frame B;
  3. Após passar pelo passo de compartilhamento o Frame A é colocado inteiramente na GPU;
  4. A operação se repete para todos os Frames;
  5. Perceba que a cada passo que se completa são liberados recursos de CPU e GPU para serem usados com outros frames.

Informação: A seguir vamos abordar cada passo.

2. Processamento do Frame 0 - Time 0 - CPU

Nota: Qualquer coisa relativa a mudança e posição dos objetos é realizado neste passo.

Neste passo o calculo da lógica e as transformações é realizado na CPU, como por exemplo:

Animações - Calcula quando as Animações iniciam e terminam;

Posição de modelos e objetos - Necessário para calcular a posição e sua influência;

Física - Calculo para determinar onde os objetos vão;

Inteligência Artificial - Por exemplo, em um veículo controlado por IA é necessário determinar, como ele se movimenta, como o estado e onde o carro estará realmente;

Cria e destrói, esconde e apresenta - Necessário para determinar onde os objetos aparecem no mundo.

Nota: O Unreal Engine conhece todas as transformações e todos os objetos.

3. Processamento do Frame 1 - Time 33ms - Preparar a Thread

Antes de podermos usar as transformações para renderizar a imagem, precisamos saber o que incluir na renderização, isso é executado principalmente na CPU, mas algumas partes são manipuladas pela GPU, para tal finalidade é realizada a tarefa de :

Processo de oclusão - Construção da lista de todos os objetos e modelos visíveis, sendo que o processamento é realizado por objeto e não por polígono;

Preparação da Thread - Uma Thread da GPU é alocada.

A seguir as 4 Etapas em ordem de execução desse processo.

Distance Culling - Remove quaisquer objetos além de X da câmera;

Frustim Culling - Verifica o que está na frente da câmera;

Precomputed Visibility - (Visibilidade pré-computada) Divide a cena em uma grade, cada célula da grade lembra o que está visível naquele local;

Occlusion Culling - Verifica com precisão o estado de visibilidade em cada modelo.

4. Processamento do Frame 2 - Time 66ms - GPU

A GPU agora tem uma lista de modelos e transformações, mas se apenas renderizássemos esta informação iria causar uma grande quantidade de renderização de pixels redundantes, portanto, precisamos descobrir quais modelos serão exibidos com antecedência.

Figura. 3 Objetos na cena.
Menu Project Settings > Rendering > Early Z-Pass.

Considerando a renderização de cada pixel na cena na imagem acima não poderia renderizar os pixels que estão detrás dos cilindros e os que estão ocultos por outros objetos.