Como emular os gráficos do PSX com o OpenGL?


13

Quero saber quais opções (ou shaders) definir para que meu jogo OpenGL se pareça com o jogo Playstation 1. Eu sei que provavelmente não pode ser alcançado 100% porque a PSX usava televisão e a televisão processa diferentemente esse monitor. Obrigado. :)


1
Você pode encontrar algumas informações úteis sobre o hardware na página Wiki .
22811 Jonathan Connell

2
Recordo que havia recentemente um link para alguém que criou shaders para replicar a sensação de CRT dos jogos SNES em um PC com monitor LCD. Eu estava convencido. altdevblogaday.com/2011/07/18/…
dascandy

Respostas:


24

Na minha opinião, os bits mais importantes para fazer uma cena do OpenGL parecer uma cena do PSX seria garantir que a filtragem estivesse desativada (o PS1 tinha apenas o vizinho mais próximo) e desativar o buffer Z (não havia nenhum) e renderizar sua cena com o algoritmo de pintores.

A iluminação era apenas por vértice; na verdade, não havia nenhum equipamento de iluminação, apenas a coloração sombreada com gouraud. A iluminação era orientada por software, para que você pudesse fazer qualquer coisa dentro das limitações do tempo da CPU, das quais não havia muito espaço para coisas avançadas inteligentes como "iluminação". :) Nós conseguimos especular a certa altura, mas como era por vértice, a cena parecia brilhante, então nós a abandonamos. Nós nunca conseguimos especular para trabalhar com malhas de pele como normais de mistura e, em seguida, usá-las levou muito tempo.

O PS1 também teve um pouco de nado de textura, não tenho certeza de como você implementaria isso com o OpenGL, mas se você estiver atrás de uma experiência autêntica, talvez apenas tentando fazer a quebra dos UVs quando eles estiverem perto da borda da tela daria uma aproximação razoável.

Também recomendo que você observe as transformações de vértices: o PS1 não possui flutuadores; portanto, a renderização ocorreu com pipelines de ponto fixo; essa é a causa do movimento instável ao reproduzir animações. Havia apenas tantas posições em que um vértice poderia estar, e no ponto fixo de 16 bits, essas nem eram tantas posições. Assista a alguns vídeos do YouTube do PS1 para ter uma idéia de como isso afetou o jogo, http://www.youtube.com/watch?v=RSV4IBa1pMIvocê pode ver aqui que isso significa que as linhas retas tremem quando a câmera está perto da horizontal. Eu acho que uma boa maneira de emular isso seria transformar seu mundo em software (assim como o PS1) e sempre gerar coordenadas de tela com números inteiros para o tamanho da tela emulada (que foi uma das principais razões pelas quais os polis se agitaram, eles não pôde ser renderizado em subpixels).

EDITAR

O nado de textura foi devido ao PS1 sem interpolação 3D. Conforme mencionado por user712092, o renderizador afim só podia interpolar no espaço da tela, então acabamos com nossas diagonais erradas. Isso pode ser implementado ativando noperspectiveseus qualificadores de interpolação ou emulados manualmente, transformando a cena e descartando o valor Z final em seu vértice depois de dividir as coordenadas da tela xey por esse valor z


Visão agradável;)
Jonathan Connell

@ Richard Textura nadar? É parcial ou completa falta de correção de perspectiva ? Por exemplo, o Quake fez a correção da perspectiva de cada N pixels.
precisa saber é o seguinte

@ Richard Então isso significa que eu tenho que recorrer a) shaders de vértices para emular o ponto fixo de 16 bits b) não tenho certeza se o glVertex3s resolve isso c) existem algumas bibliotecas OpenGL de ponto fixo.
user712092

3
Uau. Como você sabe tudo isso?
ashes999

@ ashes999 Sou desenvolvedor de jogos profissional há mais de 10 anos.
Richard Fabian
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.