Come emulare la grafica di PSX con OpenGL?


13

Voglio sapere quali opzioni (o shader) impostare in modo che il mio gioco OpenGL assomigli a Playstation 1. So che probabilmente non può essere raggiunto al 100% perché PSX ha usato la televisione e la televisione rende in modo diverso quel monitor. Grazie. :)


1
Puoi trovare alcune utili informazioni sull'hardware nella pagina Wiki .
Jonathan Connell,

2
Ricordo che recentemente c'era un collegamento a qualcuno che aveva creato shader per replicare la sensazione CRT dei giochi SNES su un PC con monitor LCD. Ero convinto. altdevblogaday.com/2011/07/18/…
dascandy

Risposte:


24

Secondo me, i bit più importanti per far sembrare una scena OpenGL simile a una scena PSX sarebbero assicurarsi che il filtro fosse disattivato (PS1 avesse solo il vicino più vicino) e disattivare il buffering Z (non ce n'era) e renderizzare la tua scena con l'algoritmo dei pittori.

L'illuminazione era solo per vertice, in realtà in realtà non c'era nessun hardware di illuminazione solo una colorazione del vertice sfumata di gouraud. L'illuminazione era guidata da un software in modo da poter fare qualsiasi cosa entro i limiti del tempo della CPU, di cui non c'era molto di più per cose avanzate intelligenti come "l'illuminazione". :) Siamo riusciti a diventare speculari a un certo punto, ma dato che era per vertice ha reso la scena scintillante, quindi l'abbiamo lasciata cadere. Non siamo mai riusciti a diventare speculari per lavorare con mesh skined come normali di fusione e poi il loro utilizzo ha richiesto troppo tempo.

La PS1 ha anche avuto un po 'di nuotata nella trama, non sono sicuro di come lo implementeresti con OpenGL, ma se stai cercando un'esperienza autentica, forse stai solo cercando di abbattere i raggi UV quando sono vicino al bordo dello schermo darebbe una ragionevole approssimazione.

Ti consiglio anche di guardare le trasformazioni dei vertici: la PS1 non aveva float, quindi il rendering ha avuto luogo con pipeline a punto fisso, questa è la causa del movimento nervoso durante la riproduzione di animazioni. C'erano solo così tante posizioni in cui un vertice poteva trovarsi, e a un punto fisso a 16 bit, non c'erano nemmeno così tante posizioni. Guarda alcuni video di YouTube per PS1 per avere un'idea di come ha influenzato il gioco, http://www.youtube.com/watch?v=RSV4IBa1pMIpuoi vedere qui che significa che le linee rette oscillano quando la fotocamera è vicina all'orizzontale. Penso che un buon modo per emulare questo sarebbe trasformare il tuo mondo in software (proprio come ha fatto la PS1) e trasmettere sempre coordinate dello schermo di numero intero alla dimensione dello schermo emulato (che è stata una delle ragioni principali per cui i polizi si sono mossi, non è stato possibile renderizzare in pixel secondari).

MODIFICARE

La nuotata delle texture era dovuta al fatto che PS1 non aveva alcuna interpolazione 3D. Come menzionato dall'utente712092, il renderer affine poteva solo interpolare nello spazio dello schermo, quindi abbiamo finito con le nostre diagonali sbagliate. Questo può essere implementato noperspectiveattivando i qualificatori di interpolazione o emulando trasformando la scena a mano e scartando il valore Z finale nel vertice dopo aver diviso le coordinate dello schermo xey per quel valore z


Bella intuizione;)
Jonathan Connell,

@Richard Texture nuota? È parziale o totale mancanza di correzione prospettica ? Ad esempio, Quake ha eseguito la correzione prospettica di ogni N pixel.
user712092,

@Richard Quindi significa che devo ricorrere a a) shader di vertici per emulare il punto fisso a 16 bit b) non sono sicuro che glVertex3s lo risolva c) ci sono alcune librerie OpenGL a punto fisso.
user712092,

3
Wow. Come fai a sapere tutto questo?
ashes999,

@ ashes999 Sono uno sviluppatore di giochi professionale da oltre 10 anni.
Richard Fabian,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.