Comment émuler les graphiques PSX avec OpenGL?

13

Je veux savoir quelles options (ou shaders) définir pour que mon jeu OpenGL ressemble au jeu Playstation 1. Je sais que cela ne peut probablement pas être atteint à 100% parce que la télévision utilisée par PSX et la télévision rendent différemment ce moniteur. Merci. :)

user712092
la source
1
Vous pouvez trouver des informations matérielles utiles sur la page Wiki .
Jonathan Connell
2
Je me souviens qu'il y avait récemment un lien vers quelqu'un qui avait créé des shaders pour reproduire la sensation CRT des jeux SNES sur un PC avec moniteur LCD. J'étais convaincu. altdevblogaday.com/2011/07/18/…
dascandy

Réponses:

24

À mon avis, les bits les plus importants pour faire ressembler une scène OpenGL à une scène PSX seraient de s'assurer que le filtrage est désactivé (PS1 n'avait qu'un voisin le plus proche), et de désactiver la mise en mémoire tampon Z (il n'y en avait pas) et de rendre votre scène avec l'algorithme des peintres.

L'éclairage était uniquement par sommet, en fait il n'y avait en fait pas de matériel d'éclairage seulement une coloration de vertex ombrée gouraud. L'éclairage était piloté par logiciel afin que vous puissiez faire n'importe quoi dans les limites du temps CPU, dont il n'y avait pas beaucoup de rechange pour des choses avancées intelligentes comme "l'éclairage". :) Nous avons réussi à devenir spéculaire à un moment donné, mais comme c'était par sommet, cela a rendu la scène étincelante, nous l'avons donc abandonnée. Nous n'avons jamais réussi à faire spéculaire pour travailler avec des maillages à peau comme des mélanges de normales, puis les utiliser prenait trop de temps.

La PS1 a également eu un peu de texture, je ne sais pas comment vous implémenteriez cela avec OpenGL, mais si vous recherchez une expérience authentique, essayez peut-être simplement de faire la décomposition des UV lorsqu'ils sont près du bord de l'écran donnerait une approximation raisonnable.

Je vous recommande également de regarder les transformations de vertex: la PS1 n'avait pas de flotteurs, donc le rendu a eu lieu avec des pipelines à point fixe, c'est la cause du mouvement instable lors de la lecture des animations. Il n'y avait que tant de positions qu'un sommet pouvait être, et à un point fixe de 16 bits, ce n'était même pas autant de positions. Regardez quelques vidéos YouTube PS1 pour avoir une idée de la façon dont cela a affecté le jeu, http://www.youtube.com/watch?v=RSV4IBa1pMIvous pouvez voir ici que cela signifie que les lignes droites tremblent lorsque la caméra est proche de l'horizontale. Je pense qu'un bon moyen d'émuler cela serait de transformer votre monde en logiciel (tout comme la PS1) et de toujours afficher les coordonnées de l'écran en nombre entier à la taille de l'écran émulé (ce qui était l'une des principales raisons pour lesquelles les polys tremblaient, ils n'a pas pu être rendu en sous-pixels).

ÉDITER

La nage de la texture était due au fait que la PS1 n'avait AUCUNE interpolation 3D. Comme mentionné par user712092, le rendu affine ne pouvait qu'interpoler dans l'espace d'écran, nous nous sommes donc retrouvés avec nos diagonales tout à fait erronées. Cela peut être implémenté en activant noperspectivevos qualificatifs d'interpolation, ou émulé à la main en transformant la scène et en supprimant la valeur Z finale dans votre sommet après avoir divisé les coordonnées d'écran x et y par cette valeur z

Richard Fabian
la source
Belle perspicacité;)
Jonathan Connell
@Richard Texture nage? S'agit-il d' un manque partiel ou complet de correction de perspective ? Par exemple, Quake a corrigé la perspective tous les N pixels.
user712092
@Richard Cela signifie donc que je dois recourir à a) des vertex shaders pour émuler un point fixe 16 bits b) je ne sais pas si glVertex3s le résout c) il existe des bibliothèques OpenGL à point fixe.
user712092
3
Sensationnel. Comment savez-vous tout cela?
ashes999
@ ashes999 Je suis développeur de jeux professionnel depuis plus de 10 ans.
Richard Fabian