Bagaimana cara meniru grafis PSX dengan OpenGL?


13

Saya ingin tahu opsi apa (atau bayangan) untuk diatur sehingga permainan OpenGL saya terlihat seperti game Playstation 1. Saya tahu itu mungkin tidak dapat dicapai 100% karena PSX menggunakan televisi dan membuat televisi berbeda monitor itu. Terima kasih. :)


1
Anda dapat menemukan beberapa informasi perangkat keras yang bermanfaat di halaman Wiki .
Jonathan Connell

2
Saya ingat baru-baru ini ada tautan ke seseorang yang telah membuat shader untuk mereplikasi nuansa CRT dari game SNES pada PC dengan monitor LCD. Saya yakin. altdevblogaday.com/2011/07/18/…
dascandy

Jawaban:


24

Menurut pendapat saya, bit paling penting untuk membuat adegan OpenGL terlihat seperti adegan PSX adalah untuk memastikan pemfilteran dimatikan (PS1 hanya memiliki tetangga terdekat), dan mematikan buffering Z (tidak ada) dan membuat adegan Anda dengan algoritma pelukis.

Pencahayaan hanya per vertex, sebenarnya sebenarnya tidak ada perangkat keras pencahayaan hanya pewarnaan vertex berbayang. Pencahayaan adalah perangkat lunak yang digerakkan sehingga Anda dapat melakukan apa saja dalam batasan waktu CPU, yang tidak ada banyak cadangan untuk hal-hal canggih seperti "pencahayaan". :) Kami berhasil mendapatkan specular pada satu titik, tetapi karena per titik itu membuat adegan terlihat sparkley jadi kami menjatuhkannya. Kami tidak pernah berhasil mendapatkan specular untuk bekerja dengan jeruji berkulit sebagai campuran normal dan kemudian menggunakannya hanya memakan waktu terlalu banyak.

PS1 juga memiliki sedikit tekstur berenang, saya tidak yakin bagaimana Anda akan menerapkannya dengan OpenGL, tetapi jika Anda setelah pengalaman otentik, mungkin hanya mencoba untuk membuat kerusakan UV ketika mereka berada di dekat tepi layar akan memberikan perkiraan yang masuk akal.

Saya juga merekomendasikan Anda melihat transformasi vertex: PS1 tidak memiliki float, jadi rendering dilakukan dengan jalur pipa tetap, ini adalah penyebab gerakan gelisah saat bermain animasi. Hanya ada begitu banyak posisi di mana sebuah simpul bisa berada, dan pada titik 16bit tetap, itu bahkan tidak terlalu banyak posisi. Saksikan beberapa video YouTube PS1 untuk mengetahui bagaimana pengaruhnya terhadap game, http://www.youtube.com/watch?v=RSV4IBa1pMIAnda dapat melihat di sini bahwa itu berarti garis-garis lurus bergetar ketika kamera mendekati horizontal. Saya pikir cara yang baik untuk meniru ini adalah untuk mengubah dunia Anda dalam perangkat lunak (seperti yang dilakukan PS1) dan selalu menampilkan seluruh koordinat layar dengan ukuran layar yang ditiru (yang merupakan salah satu alasan utama mengapa polys itu berkeliaran, mereka tidak dapat dirender ke sub-piksel).

EDIT

Berenang tekstur adalah karena PS1 tidak memiliki interpolasi 3D sama sekali. Seperti yang disebutkan oleh user712092, renderer affine hanya bisa melakukan interpolasi di ruang layar sehingga kami berakhir dengan diagonal yang salah. Ini dapat diimplementasikan dengan menyalakan noperspectivekualifikasi interpolasi Anda, atau ditiru dengan mentransformasikan adegan secara manual, dan membuang nilai Z akhir dalam simpul Anda setelah Anda membagi koordinat layar x dan y dengan nilai z tersebut


Wawasan yang bagus;)
Jonathan Connell

@Richard Texture swim? Apakah sebagian atau seluruhnya tidak ada koreksi perspektif ? Misalnya Quake melakukan koreksi perspektif setiap N pixel.
user712092

@ Richard Jadi itu berarti bahwa saya harus menggunakan a) vertex shader untuk meniru 16 bit titik tetap b) tidak yakin apakah glVertex3 memecahkannya c) ada beberapa perpustakaan OpenGL titik tetap.
user712092

3
Wow. Bagaimana kamu tahu semua ini?
ashes999

@ ashes999 Saya telah menjadi pengembang game profesional selama lebih dari 10 tahun.
Richard Fabian
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.