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가 있어야 직접 보면서 뭐가 잘못됐나 고치기라도 할텐데, 너무 답답하다. 드디어 꿈이 실현되는건가 생각을 했었는데 잠시 보류다.

여기까지!

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

3 Responses

  1. a rigorous hike, it was time for a bit of renserhmeft, so we headed down toward Muir Woods/Beach and stopped for a pint at the Pelican Inn, a sister property to the MHI. This is a little slice of

  2. This is such a fabulous facility on Google webmaster tools. But, I have big concern with De-Indexing of pages.I'm working on eCommerce website. [] I can see 404 pages when I remove any products from website. I'm dealing with 301 redirect method. But, Google take too much time to De-Index that specific page from web search. Can you add facility in Google webmaster tools where we can notify Google via CSV or any bulk data format?

  3. Å, så fin stålstreng! Nydelig farge på det soverommet. Der finner man roen. Skal pusse opp soverommet selv snart, så all inspirasjon er velkommen for tiden.Riktig god helg!!

Leave a Reply