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. :)
13
Odpowiedzi:
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
noperspective
kwalifikatory 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źródło