OpenGL로 PSX의 그래픽을 에뮬레이트하는 방법은 무엇입니까?


13

OpenGL 게임이 Playstation 1 게임처럼 보이도록 설정할 옵션 (또는 쉐이더)을 알고 싶습니다. PSX는 텔레비전과 텔레비전 렌더링을 모니터와 다르게 사용했기 때문에 100 % 달성 할 수 없다는 것을 알고 있습니다. 감사. :)


1
Wiki 페이지 에서 유용한 하드웨어 정보를 찾을 수 있습니다.
Jonathan Connell

2
최근에 LCD 모니터가 장착 된 PC에서 SNES 게임의 CRT 느낌을 재현하기 위해 셰이더를 만든 누군가와의 링크가 있다고 생각합니다. 나는 확신했다. altdevblogaday.com/2011/07/18/…
dascandy

답변:


24

내 의견으로는 OpenGL 장면을 PSX 장면처럼 보이게하는 가장 중요한 비트는 필터링이 꺼져 있는지 (PS1이 가장 가까운 이웃 만 있음) 확인하고 Z 버퍼링을 끄고 (없음이 아님) 확인하는 것입니다. 화가 알고리즘을 사용한 장면.

조명은 꼭짓점마다 만 이루어졌으며, 실제로 조명 하드웨어에는 구라 우드 음영의 꼭짓점 채색 만 없었습니다. 조명은 소프트웨어로 구동되므로 CPU 시간의 한계 내에서 무엇이든 할 수 있었으며, "조명"과 같은 영리한 고급 기능을위한 여분의 공간은 많지 않았습니다. :) 우리는 한 지점에서 거울을 얻을 수 있었지만 정점마다 장면을 반짝 거리게 만들었습니다. 스킨 된 메시를 블렌딩 노멀로 작업 할 때 스페 큘러를 얻지 못하고 사용한 데 너무 많은 시간이 걸렸습니다.

PS1에는 약간의 질감 수영이 있었지만 OpenGL을 사용하여 어떻게 구현했는지 잘 모르겠지만 실제 경험이 있다면 화면 가장자리에 가까워 질 때 UV 고장을 만들려고 할 수도 있습니다. 합리적인 근사치를 줄 것입니다.

또한 정점 변환을 살펴 보는 것이 좋습니다. PS1에는 플로트가 없었으므로 렌더링은 고정 소수점 파이프 라인을 사용하여 이루어졌습니다. 이것이 애니메이션을 재생할 때 불안한 동작의 원인입니다. 정점이있을 수있는 위치는 너무 많았고 16 비트 고정 점에서는 그다지 많은 위치가 아니 었습니다. 게임에 어떤 영향을 미치는지 이해하기 위해 몇 가지 PS1 YouTube 비디오를 시청 하십시오 (http://www.youtube.com/watch?v=RSV4IBa1pMI).카메라가 수평에 가까워지면 직선이 흔들린다는 것을 의미합니다. 이것을 에뮬레이션하는 좋은 방법은 (PS1처럼) 소프트웨어로 세상을 변화시키고 항상 정수 화면 좌표를 에뮬레이트 화면 크기로 출력하는 것입니다 (폴리가 흔들리는 주요 이유 중 하나였습니다. 하위 픽셀로 렌더링 할 수 없습니다).

편집하다

텍스처 수영은 3D 보간이 전혀없는 PS1 때문이었습니다. user712092에서 언급했듯이 affine 렌더러는 화면 공간에서만 보간 할 수 있으므로 대각선이 잘못되었습니다. 이것은 noperspective보간 한정자 를 켜거나 씬을 손으로 변형하여 에뮬레이션하고 x 및 y 화면 좌표를 z 값으로 나눈 후 정점의 최종 Z 값을 무시하여 구현할 수 있습니다.


좋은 통찰력;)
Jonathan Connell

@Richard Texture 수영? 그것은인가 관점 보정의 일부 또는 전체 부족 ? 예를 들어 Quake는 각 N 픽셀의 원근 보정을 수행했습니다.
user712092

@Richard 그래서 그것은 a) 16 비트 고정 소수점을 에뮬레이트하기 위해 a) 정점 셰이더에 의지해야 함을 의미합니다. b) glVertex3s가 그것을 해결 하는지 확실하지 않습니다 .
user712092

3
와. 이 모든 것을 어떻게 알 수 있습니까?
ashes999

@ ashes999 저는 10 년 이상 프로 게임 개발자였습니다.
Richard Fabian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.