Jak emulować grafikę PSX za pomocą OpenGL?

13

Chcę wiedzieć, jakie opcje (lub shadery) ustawić, aby moja gra OpenGL wyglądała jak gra Playstation 1. Wiem, że prawdopodobnie nie da się tego osiągnąć w 100%, ponieważ PSX używał telewizji, a telewizja inaczej renderuje ten monitor. Dzięki. :)

użytkownik712092
źródło
1
Możesz znaleźć przydatne informacje o sprzęcie na stronie Wiki .
Jonathan Connell
2
Pamiętam, że ostatnio był link do kogoś, kto stworzył shadery, aby powielić CRT gier SNES na PC z monitorem LCD. Byłem przekonany. altdevblogaday.com/2011/07/18/…
dascandy

Odpowiedzi:

24

Moim zdaniem, najważniejszymi bitami, aby scena OpenGL wyglądała jak scena PSX, byłoby upewnienie się, że filtrowanie jest wyłączone (PS1 miał tylko najbliższego sąsiada) i wyłączenie buforowania Z (nie było żadnego) i renderowanie twoja scena z algorytmem malarzy.

Oświetlenie było tylko na wierzchołek, w rzeczywistości nie było żadnego sprzętu oświetleniowego, tylko kolorowanie wierzchołków w odcieniach gourauda. Oświetlenie było sterowane programowo, dzięki czemu można było zrobić wszystko w granicach czasu procesora, którego nie było wiele dla sprytnych zaawansowanych rzeczy, takich jak „oświetlenie”. :) W pewnym momencie udało nam się spekulować, ale ponieważ było na wierzchołek, scena wyglądała na błyszczącą, więc ją upuściliśmy. Nigdy nie udało nam się sprawić, by specular działał z oskórowanymi siatkami jako mieszaniem normalnych, a następnie ich użycie zajęło zbyt wiele czasu.

PS1 również miał trochę tekstury, nie jestem pewien, jak zaimplementujesz to w OpenGL, ale jeśli szukasz autentycznych wrażeń, może po prostu próbujesz załamać promieniowanie UV, gdy są blisko krawędzi ekranu dałoby rozsądne przybliżenie.

Polecam również przyjrzeć się transformacjom wierzchołków: PS1 nie miał pływaków, więc renderowanie odbywało się za pomocą rurociągów o stałym punkcie, jest to przyczyną roztrzęsienia podczas odtwarzania animacji. Wierzchołek mógł znajdować się tylko w tak wielu pozycjach, a przy 16-bitowym stałym punkcie nie było nawet tak wielu pozycji. Obejrzyj kilka filmów z youtube na PS1, aby dowiedzieć się, jak wpłynęło to na grę, http://www.youtube.com/watch?v=RSV4IBa1pMIwidać tutaj, że oznacza to, że wokół linii drgają proste linie, gdy kamera jest blisko poziomej. Myślę, że dobrym sposobem na emulację byłoby przekształcenie twojego świata w oprogramowanie (tak jak PS1) i zawsze wysyłanie współrzędnych ekranu liczb całkowitych do emulowanego rozmiaru ekranu (co było jednym z głównych powodów, dla których polis wzdrygali się, ponieważ nie można renderować na subpiksele).

EDYTOWAĆ

Płynność tekstur była spowodowana tym, że PS1 w ogóle NIE ma interpolacji 3D. Jak wspomniano przez user712092, mechanizm renderujący affine mógł interpolować tylko w przestrzeni ekranu, więc skończyły się nasze przekątne. Można to zrealizować, włączając noperspectivekwalifikatory interpolacji lub emulować ręcznie transformując scenę i odrzucając ostateczną wartość Z w wierzchołku po podzieleniu współrzędnych ekranu xiy przez tę wartość Z

Richard Fabian
źródło
Niezły wgląd;)
Jonathan Connell
@Richard Texture pływać? Czy to częściowy czy całkowity brak korekty perspektywy ? Na przykład Quake dokonał korekty perspektywy każdego N pikseli.
user712092,
@Richard Oznacza to, że muszę uciekać się do a) shaderów wierzchołków, aby emulować stały punkt 16 bitów b) nie jestem pewien, czy glVertex3s je rozwiązuje c) istnieją pewne biblioteki OpenGL stałego punktu.
user712092,
3
Łał. Skąd to wszystko wiesz?
ashes999
@ ashes999 Jestem profesjonalnym twórcą gier od ponad 10 lat.
Richard Fabian