2009년 01월 06일
슈로대 알파 색상수의 비밀(?)
지금부터 하는 얘기는 솔직히 몰라도 별 상관은 없는 얘기고 롬 해킹을 한다거나 적어도 저처럼 합성을 하는 인간이 아니라면 정말 쓸데없는 이야기이므로 보기 거북하다 싶으시면 굳이 읽지 않으셔도 됩니다(...)아,읽으시겠다고 하면 비디오 게임에서 그래픽이 어떻게 다뤄지는지에 대해 조금은 알아두시는게 편할 겁니다.전 이걸 도저히 아무나 알아들을 수 있도록 풀어 설명할 재간이 없습니다......
PS1용 알파나 알파 외전에 사용된 유닛 스프라이트들의 퀄리티를 보면 같은 PS1로 발매된 슈퍼로봇대전 F나,이후 GBA나 NDS로 나온 슈퍼로봇대전의 그것을 훨씬 뛰어넘습니다.(모션 말고 단순히 세워 놨을때 그림의 질을 이야기하는 겁니다)이 차이가 어디서 오느냐 하면 유닛 스프라이트가 몇 개의 색을 가지고 표현되었느냐...에서 옵니다.

왼쪽부터 F(PS1) , A/R/D(GBA) , 알파 외전(PS1)에 쓰였던 TV판 마징가 Z의 스프라이트(그래픽)입니다. 그리고 각 그래픽 밑에 있는 사각형 덩어리들이 저 그래픽을 나타내는데 쓰인 색깔 팔레트입니다. F와 A의 것은 16색만을 쓰고 있습니다만 알파 외전을 보세요. 무려 36색이나 쓰고 있습니다. (마지막 체크무늬 색은 '투명색'을 나타내는 것이므로 사실 15색/15색/35색이라고 해야 할지도 모르겠습니다만 게임에 쓰이는 그래픽에서는 투명색도 하나의 색으로 칩니다)
'GBA용 게임에 나온 마징가 Z는 왜 겨우 16색밖에 쓰지 않나요,알파 외전처럼 36색 쓰면 되잖아요'라고 물으실지도 모르겠습니다. 그에 대한 답은 'GBA에서 스프라이트에 쓰이는 팔레트 하나가 담을 수 있는 색의 최대 수가 16색이기 때문에'입니다. 기계 스펙이 그런식으로 만들어져 나왔거든요. 하드 성능상 그렇게 할 수밖에 없다는 겁니다. 사실 유닛 하나를 나타내는데 팔레트를 두 개 때려넣으면 16색 이상이 가능하긴 합니다만 팔레트 수를 무한정 늘릴 수 있는 게 아니고 한번에 16개밖에 쓸 수 없기 때문에 힘듭니다. GBA에 대해서는 팔레트 하나에 들어갈 수 있는 색이 16색이라는건 예전부터 확실했었고, 그래서 전 GBA 계열 슈로대에 대해선 별 의문을 갖지 않았습니다.
그런데 문제는 알파와 알파 외전입니다. 분명히 같은 기종으로 나왔던 F에서는 16색만을 쓰고 있는데, 이놈은 저렇게 16색을 뛰어넘고 있지 않습니까. 만약에 제가 F만 봤더라면 '아,PS1도 GBA처럼 한 팔레트에 16색까지만 쓸 수 있구나'라고 그대로 판단했을 겁니다. 그런데 그 이상을 쓰는 알파와 알파 외전이 존재하는 한, 제가 생각해볼 수 있는 가능성은 다음과 같이 더 늘어나게 됩니다.
1. 한 팔레트에 16색만 쓸 수 있는건 맞다. 그런데 알파랑 알파 외전은 유닛 하나에 하나 이상의 팔레트를 썼다.
2. 한 팔레트에 들어갈 수 있는 색상이 64색이다.
3. 아예 기존 게임기들과는 전혀 다른 그래픽 처리 방법을 쓰고 있다(...)
전 저 셋중에 대체 뭘까 하고 오랫동안 생각해 왔습니다. 알파 외전의 그래픽이 비디오 램에서 어떻게 돌아가고있는지 보려고 VRAM 덤프도 해봤습니다만, 타일은 보이는데 지금까지 봤던 다른 게임기들처럼 팔레트를 보고 적용시켜볼 방법이 없었습니다. 이걸 해봐야 색상에 대해 결론을 낼 수 있거든요. 그리고 그 팔레트를 보는 방법을 전 오늘에서야 알 수 있었고, 따라서 오늘에서야 겨우 결론이 났습니다.
알고보니 PS1은 다른 놈들하고는 살짝 다르게 CLUT(Color Look-Up Table)이란 놈을 써서 스프라이트에 컬러를 입히고 있었습니다. 제가 VRAM 덤프에서 그냥 찌꺼기라고만 생각했던 놈들(...)이 알고보니 이 CLUT이었구요. 뭐 여기서 CLUT에 대해 더 자세히 이야기할 필요는 없고(사실 저도 100% 이해가 가는건 아니므로...),일단 필요한것만 말하자면 알파 외전의 유닛 스프라이트에는 4비트 CLUT이 쓰이고, 이 4비트 CLUT 하나는 16개의 컬러를 갖고 있습니다. 알파/알외와 F가 달랐던 것은 각 게임이 유닛 하나를 나타내는데 CLUT을 몇개 썼느냐의 차이였습니다. 유닛 하나를 표현하는데 16색만을 썼던 F는 당연히 CLUT을 하나만 썼고, 알파 외전은 마징가 하나를 나타내는데 CLUT을 네개나 쓰고 있었습니다.

저게 VRAM 덤프+CLUT 적용의 결과. CLUT 1은 눈이나 배 등 노란색이 들어가는 부분을 나타내는데 쓰였고,CLUT 2는 팔과 다리,CLUT 3은 몸통과 스크랜더 등,CLUT 4는 파일더 부분을 나타내는데 쓰였습니다. CLUT 하나에 16색이고 네개의 CLUT이 쓰였으므로 알파/외전의 한 유닛에 들어갈 수 있는 최대 색깔은 16×4=64색이 되는 겁니다. 각 CLUT당 투명색이 다 하나씩 있어야 하니 실제로 쓰일 수 있는 최대 색깔은 (16-1)×4=60색이 되겠군요. 결과적으로는 제가 지금까지 생각한 것 중 1번에 가까운 방법이었다고 할 수 있겠습니다...64색인데 위에 있는 마징가에 쓰인 색은 36색이었지요. 이건 네개의 CLUT 중 중복되는 색깔이 그만큼 많기 때문입니다. 그림 전체의 통일성(?)을 위해 색 일부는 다른 CLUT하고 똑같이 맞춰놨다고 해야 할까요...
저렇게 할 수 있는 기기 스펙을 가지고 윙키 소프트는 대체 뭘 한 겁니까(...)
*P.S.지금 다시 보니 제가 CLUT을 잘못 찾았거나 하나 빠뜨린 것 같기도 한데,어쨌든 결론은 16색짜리 한개 이상을 써서 색수를 늘렸다는 겁니다,네(...)
# by | 2009/01/06 00:14 | 잡글 | 트랙백 | 덧글(4)




☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
과연...
하마지 어머님//
그때도 댓글로 달았던 것 같긴 합니다만, 흑백 GB와 GBC는 둘 다 한 팔레트에 4색까지밖에 안들어갑니다.(흑백 GB도 일단 흑백 계통으로 4색짜리 팔레트가 있긴 합니다)즉 GBC에서 4색 이상을 쓴다는건 결국 몬스터 하나 나타내는데 4색 팔레트를 두개 이상 쓰는 것이고,이는 그대로 흑백 GB에서도 나타낼 수 있습니다.흑백 GB와의 호환을 위해 일부러 그렇게 한게 아니고,그냥 별다른 기교 없이 스탠더드한 방법을 이용해서 표현한 겁니다.
포켓몬 하나를 나타내는 4색은 그냥 '백,흑,나머지 두 색'이고,투명색은 쓰이지 않았습니다.투명하게 나타낼 게 없었거든요.금/은/크리스탈에서 모든 포켓몬이 그 어떤 상황에서도 흰색 바탕 위에서만 나타난다는걸 생각해보세요.
시북님//
근데 그런것도 다 전략의 일종이 아닌가 싶어요. 한 기종으로 시리즈를 많이 내야 할 경우에는 처음부터 기기의 한계를 끌어내버리면 다음 작품을 낼때 유저에게 발전을 보여주기 힘들잖아요. 물론 초기에는 기술이 미약하다가 해당 기종으로 계속 게임을 개발하면서 기술이 발전하는 경우도 있겠습니다만...
윙키 소프트 같은 경우에는 그냥 인간들이 이상한 고집을 갖고 있었거나 귀찮았던 것 같지만요(...)