วิธีการเลียนแบบกราฟิกของ PSX ด้วย OpenGL?


13

ฉันต้องการที่จะรู้ว่าตัวเลือก (หรือเฉดสี) ที่จะตั้งค่าเพื่อให้เกม OpenGL ของฉันดูเหมือนเกม Playstation 1 ฉันรู้ว่ามันอาจจะไม่สามารถทำได้ 100% เพราะ PSX ใช้โทรทัศน์และโทรทัศน์แสดงจอภาพแตกต่างกัน ขอบคุณ :)


1
คุณสามารถหาข้อมูลฮาร์ดแวร์ที่มีประโยชน์ได้จากหน้าWiki
Jonathan Connell

2
ฉันจำได้ว่าเมื่อเร็ว ๆ นี้มีลิงก์ไปยังคนที่สร้าง shaders เพื่อเลียนแบบความรู้สึกของเกม SNES บนพีซีที่มีจอ LCD ฉันมั่นใจ altdevblogaday.com/2011/07/18/…
dascandy

คำตอบ:


24

ในความคิดของฉันบิตที่สำคัญที่สุดในการสร้างฉาก OpenGL ดูเหมือนว่าฉาก PSX จะทำให้แน่ใจว่าการกรองถูกปิด (PS1 มีเพื่อนบ้านที่ใกล้ที่สุดเท่านั้น) และปิด Z buffering (ไม่มีเลย) และแสดงผล ฉากของคุณด้วยอัลกอริทึมจิตรกร

แสงเป็นเพียงจุดสุดยอดเท่านั้นในความเป็นจริงไม่มีฮาร์ดแวร์แสงใด ๆ เพียงแค่การฉ้อโกงการแรเงาสีจุดสุดยอด แสงเป็นซอฟต์แวร์ขับเคลื่อนดังนั้นคุณสามารถทำอะไรก็ได้ภายใต้ข้อ จำกัด ของเวลา CPU ซึ่งไม่มีอะไรเหลือเฟือสำหรับสิ่งที่ก้าวหน้าอย่างฉลาดเช่น "แสง" :) เราพยายามหาจุดหนึ่งได้ แต่เมื่อถึงจุดสุดยอดมันทำให้ฉากดูเป็นประกายดังนั้นเราจึงลดมันลง เราไม่เคยจัดการกับ specular ให้สามารถทำงานร่วมกับ mesh skinned ได้เพื่อเป็นการผสมผสานบรรทัดฐานแล้วใช้พวกมันแค่ใช้เวลามากเกินไป

PS1 มีการว่ายน้ำพื้นผิวเล็กน้อยฉันไม่แน่ใจว่าคุณจะนำสิ่งนั้นไปใช้กับ OpenGL ได้อย่างไร แต่ถ้าคุณมีประสบการณ์ที่แท้จริงหลังจากนั้นอาจพยายามทำให้ UVs พังทลายเมื่อใกล้ขอบหน้าจอ จะให้การประมาณที่สมเหตุสมผล

ฉันขอแนะนำให้คุณดูที่การเปลี่ยนแปลงจุดสุดยอด: PS1 ไม่มีลอยดังนั้นการเรนเดอร์เกิดขึ้นกับท่อจุดคงที่นี่เป็นสาเหตุของการเคลื่อนไหวที่กระวนกระวายใจเมื่อเล่นภาพเคลื่อนไหว มีเพียงตำแหน่งจำนวนมากที่จุดสุดยอดสามารถอยู่ได้และ ณ จุดคงที่ 16 บิตนั่นไม่ใช่ตำแหน่งที่มากแม้แต่ทั้งหมด รับชมวิดีโอ youtube ของ PS1 เพียงไม่กี่ตัวเพื่อรับทราบว่ามันส่งผลต่อเกมอย่างไร, http://www.youtube.com/watch?v=RSV4IBa1pMIคุณสามารถดูได้ที่นี่ซึ่งหมายความว่าเส้นตรงจะกระวนกระวายใจเมื่อกล้องอยู่ใกล้กับแนวนอน ฉันคิดว่าวิธีที่ดีในการลอกเลียนแบบนี้จะเป็นการเปลี่ยนแปลงโลกของคุณในซอฟต์แวร์ (เช่นเดียวกับที่ PS1 ทำ) และส่งออกพิกัดหน้าจอจำนวนเต็มเป็นขนาดหน้าจอที่จำลองเสมอ (ซึ่งเป็นหนึ่งในเหตุผลสำคัญที่ว่าทำไม polys ไม่สามารถแสดงผลเป็นพิกเซลย่อยได้)

แก้ไข

การว่ายน้ำพื้นผิวเกิดจาก PS1 ไม่มีการแก้ไขแบบ 3D เลย ดังที่ได้กล่าวไว้โดย user712092 ตัวเลียนแบบตัวเลียนแบบสามารถสอดแทรกในพื้นที่หน้าจอเท่านั้นดังนั้นเราจึงลงเอยด้วยเส้นทแยงมุมของเราผิดทั้งหมด สิ่งนี้สามารถดำเนินการได้โดยการเปิดตัวnoperspectiveแก้ไขการประมาณค่าของคุณหรือจำลองด้วยมือเปลี่ยนฉากและทิ้งค่า Z สุดท้ายในจุดสุดยอดของคุณหลังจากที่คุณแบ่งพิกัดหน้าจอ x และ y ด้วยค่า z นั้น


ข้อมูลเชิงลึกที่ดี;)
Jonathan Connell

@ Richard เนื้อว่ายน้ำ? เป็นการขาดการแก้ไขมุมมองหรือไม่? ตัวอย่างเช่น Quake ทำการแก้ไขมุมมองแต่ละพิกเซล N
user712092

@Richard ดังนั้นหมายความว่าฉันต้องหันไปใช้ a) จุดยอด shaders เพื่อจำลองจุดคงที่ 16 บิต b) ไม่แน่ใจว่าglVertex3sแก้มันได้หรือไม่ c) มีบางจุดคงที่ของห้องสมุด OpenGL
user712092

3
ว้าว. คุณรู้ทั้งหมดนี้ได้อย่างไร?
ashes999

@ ashes999 ฉันเป็นผู้พัฒนาเกมระดับมืออาชีพมากว่า 10 ปี
Richard Fabian
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.