February 2004

Project ANISE 이야기 III

Project ANISE

이번에 휴가 나와서 거의 컴퓨터만 붙잡고 있었다.
이제는 내가 왜 이리 집착하면서 이걸 하고 있는 건지 하는 회의감 아닌 회의감도 조금씩 들고.
후후.
이제 좀 쉴 때가 온 건가. 아니 다시 일하러 갈 때가 된건가.

아무튼, 나름대로 진척은 있었다.
예전부터 꼭 구현해보고 싶던 화면 뽀사시 효과.
이건 처음 alpha 버전 때도 시도했었던 것이다. 그때는 무식하게 이미지 화일을 읽어들이는 족족 바로 필터를 줘서 메모리에 저장해뒀었는데, 이렇게 만드니 구현은 쉬웠지만 대신 애니메이션을 출력해줄 때 경계 부분이 망가지는 결정적인 단점이 있었다. 한 이미지 화일에는 애니메이션의 조각이 되는 여러 그림들이 들어있는데 이 경계들을 고려하지 않고 그냥 뭉개버려놨으니, 화면에 출력될 때는 이미 화면 상에 찍혀있는 다른 그림들과 맞지 않는 것이다.

그래서 이번엔 화면을 갱신해줄 때마다 필터를 걸도록 해주었다. 이론적으로는 아무런 문제가 없다고 확신하고 돌려본 순간! 이런, 전혀 예상치 못한 복병이 있었다. ‘동급생’ 시리즈의 경우에 화면에 그림을 뿌려줄 때 나름대로 효과를 준답시고 한줄 한줄 건너뛰면서 위, 아래로 마치 주사선이 지나가는 것처럼 보여준다. 그러다 보니 필터가 평균값을 계산하는 순간에 해당 픽셀의 위, 아래에는 아직 픽셀이 찍히지 않은 경우가 생기는 것이다.

물론, 이러한 문제들은 모두 실제 화면 프레임버퍼와 엔진 내부에서 사용되는 버퍼들의 관계 사이에 있는 설계적 결함때문이기도 하다. 하지만 이제 와서 다 뜯어고칠 수는 없고.. 포기할까.. 아까운데.. 꼭 해보고 싶었는데.. 이런저런 생각들을 다 하다가.. 결국 타협을 본 것이..

평균값을 계산할 때 위, 아래 픽셀은 보지 않고, 좌, 우의 픽셀값만 계산하는 것!

만약 그림을 양옆에서 좌우로 뿌려주면 어떻게 대처하게느냐고 물으신다면.. 나도 모른다;

그래도 일단 그럭저럭 효과는 난다. 더불어 한줄짜리 꼼수를 써서 스캔라인 효과도 만들어주었다. 어떤 사람들은 이런 뽀사시 효과가 너무 흐릿하다고 싫어하기도 하지만, 나는 이런게 좋다. 3D 게임 할 때도 해상도를 낮출지언정 꼭 FSAA는 걸고 싶어하니까.

아무튼 상당히 느리긴 해도 마음에 든다. 그리고 옆에 펜티엄4 데스크탑에서 돌려보니 속도도 그렇게 느리지 않다. 역시 700과 1500의 차이란 이런 것인가=_=

엊그제 즈음해서는 이렇게 느린 속도, 특히 필드 화면에서의 엄청난 버벅임을 극복해보고자 맵 구성 알고리즘을 좀 바꾸어 보았다. 결과만 얘기하자면, 속도에는 상당한 진전이 있었지만, 화면 전환 등이 일어날 때 사소한 문제점들이 보여서 일단은 봉인해둔 상태이다. 역시 이렇게 원래의 구현 외에 최적화랍시고 이것저것 갖다 붙이면 뭔가 꼬이기 마련인가보다.

그리고 어제는 화면 버퍼 구조를 싹 바꿨다. 사실 난 처음에 SDL에서 32bit로 비디오 모드를 잡으면, 8bit palettized surface를 만들지 못하는 줄 알고 있었다. 지금 생각해보면 왜 그랬는지 모르겠지만, 아무튼 그래서 이제껏 byte array로 버퍼를 만들어서 palette도 별도로 관리하고, 덕분에 볼때마다 헷갈리는 ~color 함수들이 많았는데. 문득 깨달은 것이다. 전혀 그럴 필요가 없었다고.

어제 하루종일 바꿨다. 막판에 팔렛트 지정 하는데 SDL_SetColors 함수의 인자가 헷갈려서 고생을 한 것 빼고는 꽤 순조로웠다. 마치 설명에는 팔렛트 전체를 인덱스와 함께 받아서 처리해주는 것처럼 되어 있었는데, 잘못 이해한 것이었다. 이 문제에 대해서는 잠을 자다가 잠결에 번뜩이는 해결책이 생각 났었다. 참 신기하기도 하지.

아무튼 지금 잘 된다.

더불어 ‘애자매’에서 화면이 깨지는 현상의 원인도 알아냈다. 자꾸 out of bound가 나서 스크립트 해석에 문제가 있는 것은 아닌가하는 생각까지 했었는데, 그런 게 아니었다. blit을 할 때 경계를 벗어난 부분을 살짝 clip해줘버리니 모든 것이 해결되었다. 그렇다. 원래부터 ‘애자매’는 스크립트에 오류가 있었던 것이다!(라고 믿고 싶다)

마지막으로.. (길다) Zaurus에 관해서.

이 프로젝트를 처음 시작한 동기가 바로 PDA 때문이었다. PDA에서 ScummVM가 돌아가는 것을 보고 감동을 받아 비슷한 것을 만들어보고 싶어서 시작한 것이다. 하지만 PocketPC의 해상도는 320*240이기때문에 640*400의 일본 어드벤쳐 게임들을 돌리기에는 무리가 있었다.

그러다가 Toshiba에서 E-800이라는 640*480이 지원되는 PocketPC 기반의 PDA가 나왔다는 소식을 얼마전에 들었다. 그래서 바로 저거야!라는 생각을 하고 있었는데..

역시 등잔 밑이 어둡다더니. 난 Zaurus에 대해 모르고 있었다.
Linux 기반에 640*480 VGA 해상도. SDL도 돌아간다. 크로스 컴파일만 하면 바로 돌아갈 수 있는 환경 아닌가!

Zaurus도 없으면서 크로스 컴파일러 툴체인도 설치하고 QTopia SDK도 빌드했다. 컴파일도 약간의 사소한 문제를 거쳐 성공하였다. 그런 다음, Zaurus를 가지고 있는 친구한테 빌붙어서 이리저리 시도를 해보았으나.. Elf 로고 뜬 다음 메뉴 화면에서 클릭하면 멈춰버린다는 것이다. 음. PDA가 있어야 직접 보면서 뭐가 잘못됐나 고치기라도 할텐데, 너무 답답하다. 드디어 꿈이 실현되는건가 생각을 했었는데 잠시 보류다.

여기까지!

지난 일주일간의 작업에 대한 간단한(?) 기록이었다. 원래 하루하루 써보려고 했는데, 워낙 게으르다 보니 힘이 든다. 그래도 이렇게 기록을 남겨두면 나중에 도움이 되겠지. 아니 추억이라도 되겠지. 후후.

태극기 휘날리며

태극기 휘날리며

사실 무슨 내용인지 하나도 모르고 영화관에 갔었다.
전쟁 영화이길래 무슨 독립군 얘기일거라고 상상했었는데..

막상 영화 시작하니까, 이거.. 대단하였다.
이 영화 보면서 많은 사람들이 라이언 일병 구하기 같은 영화를 떠올렸을 것 같은데, 더 잘 만들었으면 잘 만들었지, 뒤떨어지지는 않을 정도로 리얼하게 잘 만든 것 같다.

전쟁의 참혹함을 그대로 담았다고 해야하나..
지금은 내가 이렇게 편하게 살고 있지만, 만약 그 때 태어났더라면 어땠을까.. 이런 생각이 드니 정말 소름이 돋는다.

극중 스토리 전개가 약간 너무 극적인 면이 있기는 한 것 같지만 충분히 이해할 만 하며 상당히 감동적이었다. 우는 사람들도 꽤 많았다. 나도 약간이지만 눈이 흐려졌다.

이 정도 영화면 충분히 대박이 터질 것 같다. 아직 실미도를 못 봤는데, 그것과 비교하면 어떨지 궁금하군.

Super Bowl XXXVIII

Super Bowl XXXVIII

오늘 오전에 그 유명한 슈퍼볼 경기가 있었다.
사실 미식축구에 대해서는 거의 아는게 없지만, mandatory 행사였기 때문에 어쩔 수 없이 참석할 수 밖에 없었다. 물론 대신 일은 안 했다:)

이렇게 생각없이 경기를 보기 시작하여..

1쿼터.. 재미없었다. Caroliana Panthers와 New England Patriots의 경기였는데, 초반에 Panthers가 정말 못 했다. Patriots가 100야드 넘게 가고 있을 때 Panthers는 0야드를 굳건히 지키고 있었다. 며칠 전에 X-Box 게임에 나와있던 팀별 성적(아마 작년 기록이었을 듯 싶다)에서 한 팀은 15승이 넘었는데, 다른 한 팀은 15패가 넘게 나와 있어 어떻게 이 둘이 결승에서 붙게 되었냐고 사람들끼리 농담을 하고 그랬었는데, 아마 Panthers가 그 15패팀이었던 것 같다.

그리고 2쿼터. 오.. 여기서부터 경기가 슬슬 달아오르기 시작하였다. 뭐랄까.. 미식축구의 묘미라고 해야하나. 빽빽한 적진 사이를 요리조리 빠져나와 내달리기, 아니면 먼 거리에서 던져진 공을 정확히 잡아내어 내달리기.. 등등. 확실히 호쾌한 플레이들이 터지기 시작하며서 경기가 재미있어지기 시작하였다.

Janet Jackson의 어이 없는(?) 공연 퍼포먼스에 이은 3쿼터.
후후. 사실 하프 타임 지나고 나서는 지겨워져서 그냥 사람들이랑 탁구 치면서 놀았다-_-; 살짝 살짝 보니까 엎치락 뒤치락 역전에 재역전을 반복하며 박빙의 승부를 펼치다가 4쿼터 끝날 무렵에는 동점이 되어 있었다.

그리고 4초 남기고 터진 1점짜리 필드골. 이거 찼던 선수가 경기 초반에 쉬운 필드골을 2개나 놓쳐서 엄청 욕을 먹고 있었을터인데.. 이거 하나로 다 만회하면서 영웅이 되었다. 이름이 뭐였드라. Viniatieri구나.

아무튼 경기가 꽤 길어서 지루한 면도 없잖아 있었지만, 나름대로 미식축구도 알고 보면 재미있을 것 같다는 생각이 들게 해준 하루였다.

그리고 이제부터는 휴가:)