Wie kann ich PSX-Grafiken mit OpenGL emulieren?

13

Ich möchte wissen, welche Optionen (oder Shader) eingestellt werden müssen, damit mein OpenGL-Spiel wie Playstation 1-Spiel aussieht. Ich weiß, dass es wahrscheinlich nicht zu 100% erreicht werden kann, weil PSX Fernsehen verwendet und Fernsehen anders rendert als der Monitor. Vielen Dank. :)

user712092
quelle
1
Auf der Wiki- Seite finden Sie einige nützliche Hardware-Informationen .
Jonathan Connell
2
Ich erinnere mich, dass es kürzlich einen Link zu jemandem gab, der Shader erstellt hatte, um das CRT-Feeling von SNES-Spielen auf einem PC mit LCD-Monitor zu reproduzieren. Ich war überzeugt. altdevblogaday.com/2011/07/18/…
dascandy

Antworten:

24

Meiner Meinung nach besteht das Wichtigste, um eine OpenGL-Szene wie eine PSX-Szene aussehen zu lassen, darin, sicherzustellen, dass die Filterung deaktiviert ist (PS1 hatte nur den nächsten Nachbarn) und die Z-Pufferung zu deaktivieren (es gab keine) und zu rendern Ihre Szene mit Maleralgorithmus.

Die Beleuchtung erfolgte nur per Scheitelpunkt, tatsächlich gab es keine Beleuchtungshardware, sondern nur gouraud-schattierte Scheitelfarben. Die Beleuchtung war softwaregesteuert, so dass Sie alles innerhalb der Grenzen der CPU-Zeit tun konnten, von denen es nicht viel Ersatz für clevere fortgeschrittene Dinge wie "Beleuchtung" gab. :) Wir haben es geschafft, an einem Punkt spiegelnd zu werden, aber da es sich um einen Scheitelpunkt handelte, sah die Szene so funkelnd aus, dass wir sie fallen ließen. Wir haben es nie geschafft, mit skinned meshes als Mischnormalen zu arbeiten, und dann dauerte es zu lange, sie zu verwenden.

Die PS1 hatte auch ein bisschen Texturschwimmen, ich bin nicht sicher, wie Sie das mit OpenGL implementieren würden, aber wenn Sie nach einer authentischen Erfahrung suchen, versuchen Sie vielleicht nur, die UV-Strahlen aufzubrechen, wenn sie sich dem Bildschirmrand nähern würde eine vernünftige Annäherung geben.

Ich würde auch empfehlen, dass Sie sich die Vertex-Transformationen ansehen: Die PS1 hatte keine Floats, daher fand das Rendern mit Festkomma-Pipelines statt. Dies ist die Ursache für die unruhige Bewegung beim Abspielen von Animationen. Es gab nur so viele Positionen, an denen sich ein Scheitelpunkt befinden konnte, und bei einem 16-Bit-Fixpunkt waren das noch nicht einmal so viele Positionen. Schauen Sie sich ein paar PS1-YouTube-Videos an, um eine Vorstellung davon zu erhalten, wie sich dies auf das Spiel ausgewirkt hat: http://www.youtube.com/watch?v=RSV4IBa1pMISie können hier sehen, dass es bedeutet, dass gerade Linien herum jittern, wenn sich die Kamera in der Nähe der Horizontalen befindet. Ich denke, ein guter Weg, dies zu emulieren, wäre, Ihre Welt in Software umzuwandeln (genau wie die PS1) und immer ganzzahlige Bildschirmkoordinaten auf die emulierte Bildschirmgröße auszugeben (was einer der Hauptgründe war, warum die Polys herumzitterten) konnte nicht auf Subpixel gerendert werden).

BEARBEITEN

Das Texturschwimmen war darauf zurückzuführen, dass die PS1 überhaupt keine 3D-Interpolation aufwies. Wie von user712092 erwähnt, konnte der affine Renderer nur im Bildschirmbereich interpolieren, sodass wir alle falschen Diagonalen erhalten haben. Dies kann implementiert werden, indem Sie noperspectiveIhre Interpolationsqualifizierer einschalten oder indem Sie die Szene von Hand transformieren und den endgültigen Z-Wert in Ihrem Scheitelpunkt verwerfen, nachdem Sie die x- und y-Bildschirmkoordinaten durch diesen z-Wert geteilt haben

Richard Fabian
quelle
Schöne Einsicht;)
Jonathan Connell
@ Richard Textur schwimmen? Fehlt es teilweise oder vollständig an perspektivischer Korrektur ? Zum Beispiel hat Quake alle N Pixel perspektivisch korrigiert.
User712092
@Richard Das bedeutet, dass ich auf a) Vertex-Shader zurückgreifen muss, um einen 16-Bit-Fixpunkt zu emulieren. B) Ich bin nicht sicher, ob glVertex3s ihn löst. C) Es gibt einige Fixpunkt-OpenGL-Bibliotheken.
User712092
3
Beeindruckend. Woher weißt du das alles?
Asche999
@ ashes999 Ich bin seit mehr als 10 Jahren ein professioneller Spieleentwickler.
Richard Fabian