Just a Blog

[MiSTer FPGA] MiSTer의 240p 화면을 Apple iPad Retina 9.7인치 4:3 디스플레이에서 사용하는 것에 대한 고찰 본문

Game

[MiSTer FPGA] MiSTer의 240p 화면을 Apple iPad Retina 9.7인치 4:3 디스플레이에서 사용하는 것에 대한 고찰

wehong 2021. 9. 4. 01:28

디스플레이, 컨트롤보드, 스피커, 케이스를 이리저리 구성해서 한 세트를 맞추고 구동을 확인하는데 집중하느라고 MiSTer에서 화면 설정에 대해 많이 생각해 보지 않았는데, 글을 두 개(#1, #2)나 올리고 나서야 MiSTer의 240p 화면을 디스플레이 하기 위한 설정에 대해 몇 가지 생각해 보게 되었다. MiSTer 쪽의 MiSTer.ini 파일 설정 관련 내용이다.

 

1. video_mode

이전 글에서도 올렸듯이 'video_mode=2048,26,32,48,1536,3,6,12,200000'로 세팅하면 'vsync_adjust' 값을 1로 하든 2로 하든 계속 화면 싱크가 드랍되어서 싱크를 다시 잡느라 화면이 계속 깜빡이는 현상이 발생했다. 결국 'video_mode=13'(2048x1536@60)으로 하고 'vsync_adjust=2'로 놓고 사용하고 있다.

 

 

2. vscale_mode

화면 스케일 방법은 선택을 해야 한다.

'vscale_mode=0'(scale to fit the screen height)을 하면 240p로 전시되는 게임들의 화면을 이 디스플레이에 (거의) 가득 차게 볼 수 있다. '320x240'이나 '2048x1536' 해상도 모두 4:3 비율이기 때문이다. 가로/세로 모두 스케일링 해도 오리지널과 동일한 비유로 커지기 때문에 가로, 세로로 늘어난 이미지가 오리지널 비율과 크게 다르지도 않다(물론 CRT 화면과 모던 디스플레이의 픽셀 차이로 오는 비율의 일그러짐은 여기서도 어쩔 수 없다).

 

하지만 스케일링을 할 때 정수배로 하지 않게 되면 원본 이미지의 한 점이 디스플레이 픽셀과 일치하지 않기 때문에, 화면의 선들이 고르지 않게 보인다거나 쉬머링(shimmering) 현상이 발생할 수도 있다. 1536은 240의 정수배(3배, 4배, 5배, ...)가 아닌 6.4배이기 때문에 240p 이미지의 한 점은 1536p의 한 점에 매칭될 수 없어 점과 점 사이에 중간 처리를 해줘야 하므로 여러 부작용이 발생할 수 있는 것이다.

이를 해결하는 방법으로 MiSTer에 내장된 'Scale Filter'를 이용할 수 있겠는데, 이렇게 되면 부가적인 프로세싱과 처리 시간이 (약간이나마) 소모될 것이며 또 그럼에도 불구하고 해결되지 못하는 측면도 있다. 'Scale Filter'로 많이 자연스러워지지만 균등한 라인 표시 등에서는 여전히 티가 나타날 수 밖에 없다(특히나 멀리서 화면을 보면 그것이 많이 느껴진다).

 

'vscale_mode=1'(use integer scale only)로 설정하면 이미지의 픽셀과 디스플레이의 픽셀이 정수배가 되어 가장 선명하게 볼 수 있다. 이때의 문제는 화면의 이미지가 전체적으로 작아진다는 것이다. '320x240' 해상도를 6배를 해도 '1920x1440'이기 때문에 '2048x1536'에 많은 빈 공간이 생기게 된다.

 

'vscale_mode=3'(use 0.25 steps of scale)으로 하는 벙법도 있다. 계산이 복잡한데(대충 1536을 4배해서 240을 넣고 1/4로 축소한다고 보면 될 것 같다), 실수배를 사용해 정수배로 했을 때 남는 공간을 더 활용하는 셈이 된다. 'vscale_mode=0'에 못 미치지만 'video_mode=1'보다는 훨씬 많이 화면 채워짐이 일어난다.

 

다만 복잡한 계산이 이루어진다는 점이 찜찜하며, 여전히 'Scale Filter'를 사용해도 균일한 라인이 균일하게 보이지 않는다('video_mode=0'보다는 낫기는 하지만).

 

만약 스캔라인 효과 등을 위해 'Scale Filter'를 사용하는 편이라면 'vscale_mode=0'로 설정하고, 'Scale Filter'를 사용하지 않는 편이라면 'vscale_mode=3'에 놓고 사용하는 편이 낫지 않을까 싶다. 'vscale_mode=1'로 하면, 9.7인치 화면도 다 사용하지 못하는 꼴이 되기 때문이다.

 

 

3. GBA 코어 설정

이상의 설정을 GBA 코어에 적용하면 계속 싱크를 맞추면서 화면이 깜빡이는 현상이 있었다. RetroRGB 관련 글에서 처럼 다음을 MiSTer.ini 파일에 추가하고 나니 정상적으로 동작했다.

[gba]
video_mode=1920,48,32,80,1200,3,6,26,154128
vscale_mode=1
video_mode_ntsc=1920,48,32,80,1200,3,6,26,154128
video_mode_pal=1920,48,32,80,1200,3,6,26,128440
[arduboy]
video_mode=8
vscale_mode=1

GBA 코어에서는 화면을 1920x1200에 정수배 스케일로 설정하는 내용이다. Arduboy 설정도 추가된 걸 보니 Arduboy 코어도 2048x1536에서 동작하지 않는 모양이다.

 

 

4. 소감

일단 이 디스플레이의 장점은 4:3 비율(aspect ratio), 빠른 응답시간(response time), 괜찮은 IPS 패널 적용 정도로 볼 수 있다. 그 중 4:3 비율인 점은, 사실 이 디스플레이의 해상도 240p의 정수배가 되지 않음으로써 조금 상쇄되는 면도 있어 보인다.

Comments