2016년 3월 10일 목요일

MMC/SD Drive V3 제작 #9 - 스캔라인 효과를 넣어보자

저희 집에는 CRT 모니터가 하나도 없습니다. 전부 LCD만 갖고 있어요.

가끔 MSX로 게임하다 보면, 옛날(?) CRT에서 보여주던 스캔라인이 그리울 때가 있습니다.


그.래.서.

이걸 한번 만들어 봤습니다!


"응? 혹시 5년전에 만들었던 [스캔라인 이레이져] 얘기인가요? 라고 물으신다면,

"NO" 라고 일단 대답을 드리구요. ㅎ.ㅎㅋ


이번엔 순수 S/W 만으로 구현을 해보았습니다.

에뮬레이터 아니고, 실기에서 돌아가는거에요. 흐...


CRT 스캔라인 효과를 잠깐 설명드리면...

CRT에 전자가 주르르 스치며 영상을 만들어내면, 가로방향 전자 이동한 곳은 영상이 남게 되는데요.

화면 전체를 가로선(스캔라인)으로 모두 채우기 힘들기 때문에, 빈공간이 검게 남아있게 됩니다.

뭐, CRT 크기가 아주 작으면 이 공간이 안보일 수도 있어요.

20인치 쯤 되는 모니터에 240p 같은 몇개(?) 안되는 스캔라인 뿌리면, 검은 부분(라인)이 상당히 도드라지게 보입니다.


이런 현상은 LCD처럼 촘촘히 픽셀을 뿌려주는 디스플레이 기기에서는 나타나지 않습니다.

일부러 만들어내지 않는다면요.

MAME 같은 에뮬레이터는 단순히 빈 검정 라인뿐만 아니라, CRT/LCD의 RGB 형광 패턴도 흉내내는 기능도 있더라구요.


암튼, 이걸 MSX에서 S/W적으로 만들어보는겁니다.

최종 목표는 아래 그림처럼 되겠습니다.

캐슬에 나오는 주인공 되겠습니다요~ ㅋ



완전히 검정라인을 넣는 것 보다는, 50% 정도의 어두운 색으로 보이는게 좀 더 보기가 좋네요.



그럼, 이걸 어떻게 만들면 될까요?

아래처럼 주인공 그림이 16라인으로 만들어져 있는데, LCD 모니터는 이 그림을 화면 비율에 맞게 세로로 늘려서 표시합니다.

MSX에서 넌인터레이스 모드(240p)에서 쓰이는 부분이 192 또는 212라인 정도인데요.

1920 x 1080 해상도의 LCD 모니터에 출력하면, 세로가 5배 뻥튀기 되는 셈이죠.



만약 인터레이스 모드(480i)로 출력하게 되면 어떻게 될까요?

아래처럼 홀수, 짝수 화면이 번갈아가며 출력됩니다. 보통 odd, even field라고 불러요.

이 신호를 받은 LCD 모니터는 원래의 480라인 화면으로 재구성(디인터레이스) 후, 화면 크기에 맞게 늘려서 표시합니다.


아래 주인공은 원래 16라인으로 출력되지만,

LCD 모니터는 "아... 이거 원래 32라인 그림이구나" 라고 생각해서 홀/짝 화면을 합성하게 되는거지요.

눈에 보이는 영상에는 별 차이가 없지만, LCD 모니터가 생각하는 원본 영상은 이미 해상도 두배가 되었습니다.



그럼 여기서 홀/짝 화면 중 하나만 어둡게 만들수 있다면...

PC 용 에뮬레이터에서 보던 스캔라인 효과가 되지 않을까? 생각이 들지요?


아래처럼 홀수 화면(필드)는 원래 그림 그대로 출력하고, 짝수 화면(필드)는 어둡게 출력하면...

LCD 모니터가 합성을 해줍니다. "이건 원래 32라인으로 된 그림이야"라고 하면서요~

(줄무니가 있는 이상한 그림이라고 생각하겠죠. ㅋ)



그럼 어두운 화면은 어떻게 만들면 될까요?

잘 생각해보시면 답이 나옵니다. ㅋ



그럼, 결과 화면 감상하셔요~

MMC/SD Drive V3에서 구현된 CRT 스캔라인 효과입니다.

바이오스 다음 버전(v5.13)에서 기능 추가될 예정입니다.




댓글 없음:

댓글 쓰기