Home Especial Transparência e o Sega Saturn…

Transparência e o Sega Saturn…

682
0

O Sega Saturn é conhecido por não conseguir reproduzir efeitos de transparência tão bem quanto seus concorrentes. Às vezes, os desenvolvedores recorriam a um efeito de ‘malha’. Por que esse compromisso foi necessário?

.

O problema

Frequentemente, os jogos do Saturn desejam aplicar um efeito de transparência, mas acabam adotando uma abordagem de ‘malha’.

No início do Mega Man X4, os refletores na versão do Saturn são representados por uma malha.

Transparência

Mas no PlayStation, eles são realmente transparentes.

transparência

Perceba que o Saturn está sem o segundo refletor laranja? Ele aparece normalmente no PlayStation. Tecnicamente, está presente no Saturn também (dá para ver o início dele), mas a abordagem de malha não permite exibi-lo.

E se você caminhar um pouco para frente, encontrará seu personagem dentro de um tubo de vidro transparente, mostrando que a transparência funciona muito bem no Saturn!

Transparência

Aí, qual é o problema com os refletores?

Uma História de Dois Processadores

Dos 8 processadores do Saturn, 2 são dedicados a desenhar gráficos na tela, o VDP1 e o VDP2.

O VDP1

O VDP1 é responsável por gráficos “altamente dinâmicos”. Ele desenha sprites e polígonos em um buffer de quadros. O VDP1 tem acesso a dois buffers de quadros, construindo o próximo quadro do jogo em um buffer enquanto o outro está sendo exibido.

Para usar o VDP1, você envia comandos, que são blocos de dados de 32 bytes que dizem ao VDP1 o que fazer. Entre os muitos comandos que ele entende, vários são para desenhar sprites e polígonos. Para o VDP1, um sprite é basicamente um polígono texturizado. Jogos 2D e 3D usam as mesmas primitivas de comando para construir suas cenas no Saturn.

Ao enviar um comando de desenho de sprite para o VDP1, é possível indicar se os pixels desse sprite devem ser totalmente opacos, meio transparentes ou uma malha (junto com algumas outras opções que estou simplificando).

Sempre que você vê uma “malha” em um jogo do Sega Saturn, o responsável é o VDP1. Os desenvolvedores não precisavam criar uma segunda versão em malha do sprite, eles simplesmente adicionavam a sinalização de malha ao comando e o VDP1 respondia adicionando todos os outros pixels em seu buffer.

O VDP 2

O VDP2 é responsável por gerenciar 5 camadas de fundo (oficialmente chamadas de “cenas”, mas usarei o termo “camada” por ser mais claro). Ele também tem a função de pegar o buffer de quadros do VDP1 e incorporá-lo na imagem final, sendo, de certa forma, um sexto plano de fundo. Mas há muito mais sobre isso depois.

As camadas de fundo podem ser empilhadas em qualquer ordem, roladas independentemente, algumas podem ser rotacionadas e redimensionadas, e outras podem ser dimensionadas no eixo z, realizando um efeito “modo 7” à la Super Nintendo.

Unindo o VDP1 e o VDP2

Quando chega a hora de combinar todas as camadas em uma imagem para exibir na tela, a prioridade é utilizada para determinar a ordem. Cada camada do VDP2 possui uma prioridade definida, e cada sprite no buffer de quadros do VDP1 também tem uma prioridade. Isso permite que diferentes sprites acabem atrás ou na frente de diferentes camadas.”

Tecnicamente, a prioridade no buffer de quadros do VDP1 é por pixel, não por sprite. O VDP2 não tem conhecimento ou preocupação com sprites, ele apenas vê pixels.

Quando o VDP2 está compondo todas as camadas juntas, ele também leva em consideração a transparência. Se um pixel em uma camada de prioridade superior estiver definido como meio-transparente, o pixel final será o resultado da média dos pixels de ambas as camadas juntos.

O buffer de quadros do VDP1 é apenas uma “camada”

Aqui está o ponto crucial. Ao adicionar sprites ao buffer de quadros, no final do dia, todos se juntam em um monte de pixels. É como se todos os sprites se unissem para se tornar uma única camada do VDP2. O VDP2 só pode fazer efeitos de transparência entre camadas. O Saturno não é capaz de lidar com efeitos de transparência entre sprites.

Se dois sprites no buffer de quadros se sobrepõem e ambos são opacos, então tudo bem, os dados de pixel do segundo sprite substituem os dados do primeiro sprite no buffer.

Mas se o segundo sprite deseja ser meio-transparente, ele ainda ocupará essa seção do buffer e substituirá o sprite anterior, mas os dados agora terão um sinalizador de transparência.

Aqui em Guardian Heroes, a capa de Nicole é translúcida, é um sprite que foi configurado como meio-transparente.

Mas quando ela se sobrepõe a outro sprite, a capa dela “absorve” os dados desse sprite, ainda mostrando a cena de fundo e não o sprite subjacente. Isso acontece porque os dados do sprite subjacente já não existem, em vez disso, a capa de Nicole os substituiu.

Em outras palavras, cada pixel no buffer de quadros do VDP1 pode ter um valor correspondente de prioridade e transparência. Mas, no fim das contas, ainda há apenas um pixel para trabalhar. Sprites sobrepostos sobrescrevem uns aos outros. O último sprite desenhado é o que prevalece.

Malhas para o ‘resgate’

A forma como o VDP1 e o VDP2 interagem entre si funciona muito bem na maior parte, permitindo a criação de cenas elaboradas nos jogos. Mas a semitransparência dos sprites é uma grande limitação. A Sega abordou o problema permitindo o uso da sinalização de malha. Isso permite um efeito de quase transparência sem eliminar os sprites.

Ao configurar a sinalização de malha, o VDP1 só desenha cada outro pixel de um sprite em seu buffer, permitindo que os dados do sprite anterior ainda apareçam nos espaços vazios. É exatamente isso que os refletores estão fazendo em Mega Man X4, permitindo que os refletores do primeiro plano não encubram Mega Man e os inimigos.

As TVs dos anos noventa

Quando o Saturn era um console atual, a maioria das pessoas o conectava à TV usando cabos de vídeo composto. O composto é um sinal de baixa qualidade que combina todas as informações de cor em um único fluxo borrado. Isso significava que o efeito de malha não era tão perceptível, já que os pixels da malha tenderiam a se misturar na borrão e resultar em uma aproximação razoável de transparência. As reclamações sobre as malhas do Saturn realmente começaram a aumentar quando a emulação e o uso de escaladores como o XRGB Mini permitiram que as pessoas jogassem jogos do Saturn com uma imagem cristalina.

Aqui está o Mega Man X4 sendo executado via cabo composto na minha HDTV.

E obrigado ao Low Score Boy

Um grande agradecimento ao Low Score Boy no YouTube. Seu vídeo sobre este assunto foi uma inspiração e fonte de muitas informações para esta postagem no blog. Eu pedi permissão a ele para escrever uma postagem no blog baseada em seu vídeo. Seu vídeo é altamente recomendado, ele apresenta mais exemplos, mostra como alguns desenvolvedores contornaram as limitações do hardware e explora renderização 3D também.

Fonte: Matt Greer

Comentários Facebook