[Artigo traduzido] EDGE: A brief History of 3D – Parte 3

Saudações aos gregos e troianos.

Pois é , amiguinhos, atrasei. Era para ter saído na sexta e acabei fazendo vocês passarem o sábado sem algo decente para ler sobre videogames (sentiram a panca, hein?). De qualquer forma, vamos a mais um pedaço do artigo da EDGE, contando a evolução das técnicas responsáveis pelos gráficos tridimensionais. Sigamos adiante!

Ray Casting

Nocomeço dos anos noventa, os computadores pessoais se tornaram poderosos o suficiente para permitir aos desenvolvedores pensar em renderizar mundos tridimensionais texturizados – com a condição de que eles usassem alguns truques. Ray Casting é um subconjunto de uma técnica mais complexa, o Ray Tracing, que renderiza o cenário da cena usando linhas de rastreamento verticais ao invés das horizontais. O raio, ou a linha reta do ponto de vista, é traçada do centro de cada linha de rastreamento na tela recuando para o interior da cena 3D. O primeiro objeto ou parede que é tocada indica sua posição e distância em relação à câmera, e se o mundo é feito por paredes ou blocos com tamanho uniforme, como aqueles em Wolfestein 3D, eles podem então ser texturizados de maneira similar aos sprites de Space Harrier. As coisas se tornam mais complexas se os ambientes não tiverem altura uniforme, mas é um simples caso de estender os testes nos raios de intersecção, exatamente o que John Carmack fez com Doom, lançado em 1993.

Iluminação em tempo real (Realtime Lighting)

Iluminação em tempo real abrange uma série complexa de técnicas diferentes, mas em termos simples pode ser representado por Gouraud direto ou mesmo sombreamento plano. Para os games, entretanto, isso é não é claramente suficiente, porque no mínimo nós queremos locais com luzes diretas (local point lights) – fontes de luz suspensas no espaço que emitem uma cor e brilho específicos, na medida em que a iluminação escurece enquanto a distância aumenta. Isso é alcançado aumentando os cálculos de iluminação (como o Phong) no estágio da rasterização para incluir múltiplas direções e posições de luz na conta – embora a cor final de cada ponto seja afetada por textura e outros efeitos de superfície, claro. Iluminação em tempo real foi usado com resultados espetaculares em Quake, da ID Software, lançado em 1996. Seus calabouços com atmosferas sombrias ostentavam luzes diretas locais na forma de tochas fixadas na parede assim como fontes em locais dinâmicos, como os lançadores de foguetes.

Z Buffering

Um dos maiores problemas com renderização 3D é em calcular quais polígonos devem aparecer na frente dos outros, além de mostrá-los corretamente. Você pode dispor os polígonos em ordem de profundidade e renderizar os mais longes da tela primeiro, mas o que acontece quando os polígonos se interseccionam? Isso é onde o Z-Buffering age. Aqui o z-buffer não apenas guarda o valor de cor para cada ponto como também a profundade daquele ponto em relação à tela, um cálculo que toma conta enquanto cada polígono é rasterizado. O Z-Buffer começa sendo configurado para o ponto mais longe da tela. Quando renderizado, a profundidade de cada ponto é comparada com os que já estão armazenados no buffer – se está mais próximo, um novo valor de profundidade do ponto é armazenado. Se não, os novos valores são eliminados, pois eles estão encobertos pelos pontos existentes na cena renderizada. Enquanto essa técnica esteve em uso por alguns anos, foi a complexidade geométrica de mundos como os de Mario 64 que mostraram como o Z Buffering podia remover algumas das limitações e restrições a que o jogo estava sujeito.

Frame Buffer: área na memória que carrega a imagem a ser mostrada na tela. Tipicamente é dividida em duas – o quadro sendo renderizado e o que será mostrado. O frame buffer normalmente carrega mais informação do que só a imagem: o canal alfa, stencil e profundidade (o z-buffer) são normalmente todos armazenados juntos.

Mapeamento de ambiente (Environment Mapping)

Os replays de Gran Turismo não são notáveis apenas por seus enquadramentos dramáticos da corrida, ou a fidelidade com que os carros correm nas pistas. Era também o brilho da lataria refletindo o ambiente em volta dos veículos e destacando suas formas e movimento. Há muitas maneiras de destacar o mapeamento de ambiente, mas o mais comumente usado é o mapa cúbico. Imagine estando em um ponto e bater seis fotos do espaço a sua volta: de frente, dos lados, atrás, por cima e por baixo. Um objeto pode ser texturizado como se estivesse no centro desse cubo, projetando raios a partir de suas superfícies “normais” para fora do cubo para ganhar o reflexo do ambiente virtual. Os cálculos matemáticos podem ser bastante simplificados permitindo reflexos estáticos serem computados sem prejuízo, uma deficiência que atualmente não é notável, especialmente em um circuito como os de Gran Turismo, onde a maior parte dos reflexos abrange estradas, guard Rails e o céu.

Complex filtering

Um dos problemas com mapeamento de textura é o aliasing, em que as texturas ficam quadriculadas quando vistas de perto ou flutuantes e trêmulas quando reduzidas a um tamanho menor que as suas atuais. Essas condições são causadas pela natureza básica da filtragem do “vizinho mais próximo”, que não leva em conta o fato de que é improvável que o centro de qualquer texel possa ser colocado no exato ponto que os cálculos determinam. Resultados melhores são alcançados com mais técnicas de complex filtering, que levam em conta as posições dos texels vizinhos. Filtragem bilinear (Bilinear filtering) usa o quadrado de quatro texels para interpolar as cores requeridas para cada ponto. Filtragem trilinear (Trilinear filtering) adiciona níveis de mip map nesse cálculo, enquanto o anisotropic leva em conta a orientação da superfície para aumentar o detalhamento em texturas sobre as superfícies orientadas de forma obliqua nos planos de vista. As claras, baixas resoluções (para os padrões modernos) das vistas texturizadas de Flight Simulator 98 se beneficiaram fortemente de tais técnicas, todas realizadas com inestimável ajuda das placas de vídeo, cuja vasta disponibilidade era relativamente nova em 1997.

Sombras em tempo real (Realtime Shadows)

Independente de o jogo ser 2D ou 3D, sombras são inestimáveis em permitir aos jogadores julgar a distância relativa entre os objetos do mundo do game. Enquanto existem muitas técnicas para se discutir aqui, uma amplamente usada nos jogos modernos em 3D é o mapeamento de sombras (shadow mapping). Para criar uma cena iluminada pelo sol, o jogo renderiza o ambiente da perspectiva de um vetor que determina a direção do sol e armazena a informação de profundidade, armazenando-a no z-buffer. Isso cria o mapeamento de sombra (shadow map) que define tudo que é visível a partir da fonte de luz. Quando a vista do jogador é renderizada, o jogo pode comparar a posição de cada ponto no espaço tridimensional do mapa, áreas sombreadas podem ser renderizadas sem a contribuição da fonte de luz. Se a luz se move, o mapeamento de sombra precisa ser atualizado, processo que cria as sombras que se movem em tempo real. O mais impressionante uso dessa técnica foi em Splinter Cell, que incorporou as sombras em sua mecânica de jogo.

Por enquento é só, mas não se desesperem pois há mais de onde vieram esses! Até a próxima parte! Abraços.

André V.C Franco/AvcF – Loading Time

2 thoughts on “[Artigo traduzido] EDGE: A brief History of 3D – Parte 3

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *