Як наслідувати графіку PSX за допомогою OpenGL?


13

Я хочу знати, які варіанти (або шейдери) встановити так, щоб моя гра OpenGL виглядала як гра Playstation 1. Я знаю, що це, ймовірно, не може бути досягнуто на 100%, тому що PSX, який використовує телебачення і телебачення, робить інакше, ніж монітор. Спасибі. :)


1
На сторінці Wiki можна знайти корисну інформацію про обладнання .
Джонатан Коннелл

2
Я пригадую, нещодавно там було посилання на когось, хто створив шейдери, щоб повторити CRT відчуття ігор SNES на ПК з РК-монітором. Я був переконаний. altdevblogaday.com/2011/07/18/…
dascandy

Відповіді:


24

На мій погляд, найважливішими бітами, щоб зробити сцену OpenGL схожим на сцену PSX, було б переконатися, що фільтрування вимкнено (у PS1 був лише найближчий сусід), і вимкнути буферизацію Z (не було жодної) та візуалізувати ваша сцена з алгоритмом художників.

Освітлення було лише за вершиною, адже насправді не було освітлювальної апаратури, а лише забарвлення вершини, затінене гуру. Освітлення керувалось програмним забезпеченням, щоб ви могли робити все, що завгодно в межах процесорного часу, з яких не було багато запасних для розумних сучасних речей, таких як "освітлення". :) Нам вдалося отримати окуляри в один момент, але, як це було за вершиною, це змусило сцену виглядати блискучою, тому ми її скинули. Нам ніколи не вдалося змусити окулярів працювати зі шкірними сітками як змішування нормалів, а потім їх використання просто зайняло занадто багато часу.

У PS1 також було трохи текстури, і я не впевнений, як би ви це реалізували з OpenGL, але якщо ви переконалися в справжньому досвіді, можливо, просто намагаєтесь зробити розбиття УФ-променів, коли вони біля краю екрана дав би розумне наближення.

Я також рекомендую вам переглянути перетворення вершин: PS1 не мав плавців, тому візуалізація проходила з конвеєрами з фіксованою точкою, це і є причиною тремтливого руху під час відтворення анімації. У вершині було лише стільки позицій, і 16-бітова фіксована точка, це було навіть не так багато позицій. Перегляньте кілька відео YouTube YouTube PS1, щоб отримати уявлення про те, як це вплинуло на гру, http://www.youtube.com/watch?v=RSV4IBa1pMIтут ви бачите, що це означає, що прямі лінії тремтять навколо, коли камера близька до горизонталі. Я думаю, що хорошим способом емуляції цього було б перетворити ваш світ на програмне забезпечення (як PS1) і завжди виводити цілі координати екрана на цілий розмір екрану (що було однією з головних причин того, що поліси тремтіли навколо, вони не вдалося надати пікселів).

EDIT

Переплив текстури був обумовлений тим, що PS1 взагалі не має інтерполяції 3D. Як згадував user712092, афінний рендерінг міг інтерполювати лише в екрані, тому ми закінчилися з нашими діагоналями все неправильно. Це можна реалізувати, увімкнувши noperspectiveкласифікатори інтерполяції, або емулюючи вручну перетворення сцени та відкидаючи остаточне значення Z у вершині після того, як ви розділили координати екрана x і y на це z значення


Приємне розуміння;)
Джонатан Коннелл

@ Ричард текстури плавати? Це часткова чи повна відсутність корекції перспективи ? Наприклад, Quake зробив перспективну корекцію кожного N пікселів.
користувач712092

@ Richard Отже, це означає, що я повинен вдатися до а) вершинних шейдерів, щоб імітувати 16 біт з фіксованою точкою b) не впевнені, чи glVertex3s вирішує це в) є деякі бібліотеки OpenGL з фіксованою точкою.
користувач712092

3
Ого. Звідки ти це все знаєш?
ashes999

@ ashes999 Я був професійним розробником ігор більше 10 років.
Річард Фабіан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.