yuchi's Development Home


프로그래밍의 도를 향해#1

조회 수 5025 추천 수 154 2002.04.22 21:42:38
시간순으로 적진 않겠다.
2001년 6월경부터 대략 10월까지의 일이다.물론 이 일을 완전히 쇼부본것은 아니다.아직도 추가하고 수정해야할 부분들이 있다.

3D엔진개발이 공식적으로 결정되고 프로젝트가 시작된 시점은 7월경이었다.그 전에는...나는 개인적인 프로젝트로, 혹은 3D프로젝트를 맡게될 것을 대비해서 맥스 익스포터를 6월경부터 만들고 있었다.정확히는 훨씬 전이었다.

좀더 뒤로 돌아가보자.
2000년도에 순전히 개인적인 취미로 3D프로그래밍을 할때는 맥스의 텍스트 포맷인 .ASE를 사용했다.완전 초보이던 시절에 ASE파서만 두번을 만들었다.제대로 동작하고 확장이 가능한 형태로 만드는데까지는...정말 내가 무능해서 그랬는지는 몰라도 몇개월의 시간이 걸렸다.서브 매터리얼 처리라든가...ASE에 나오는 거의 모든 데이타들을 적어도 로드까진 해주고 몇메가 혹은 몇십메가가까지도 커지는 그 텍스트 파일을 EOF가 나올때까지 무사히 로드하기 위해서 정말 많은 테스트를 하고 디버깅을 했다.물론 단지 파서만 만드는것이 아니고 읽어들인 데이타를 화면에 보여주기 위한 작업, 즉 ASE뷰어를 만드는데 그렇게 오래 걸렸단 얘기다.

ASE뷰어를 두번 만들고 나서 깨달은것은...이것은 정말로 테스트용 포맷이라는 것이다.파서를 만드는것도 상당히 시간이 많이 걸렸고...수십메가짜리 텍스트파일을 로딩하기란 상당히 답답한 일이었다.그 무렵부터 플러그인을 만들어서 직접 데이타를 익스포트해야겠다는 생각을 했다.그래서 간단하 프로토 타입을 만들고 몇번 테스트하곤 했었다.

다시 2001년 6월 경으로돌아가서...
주저없이 새 3D프로젝트는 맥스 플러그인으로 데이타를 익스포트하기로 했다.
2D도 마찬가지지만 특히 3D는 로딩하면서 초기화해야할 것이 상당히 많다.익스포터를 만들면서 생각했던것은..그 모든 초기화들을 가능하면 플러그인에 넣어버리자는것이었다.로딩타임을 줄임은 물론 런타임 모듈의 코드 사이즈를 상당히 줄일수 있다는 생각에서였다.가시적으로 가장 원했던 것은

pModel->ReadFlle("hoho.mod");
pModel->Render();

이렇게 단 몇줄 코드로 화면에 3D모델을 렌더링하게 해주는것이었다.

익스포터는 두개를 제작했다.하나는 매쉬를 익스포트하는 모델 익스포터였고 하는 애니메이션 익스포터였다.애니메이션쪽은 그럭저럭 쉽게 구현했다.문제는 매쉬쪽이었다.매터리얼별로 페이스를 소팅해야했고, 텍스쳐 좌표를 복수개 가지는 버텍스에 대해선 별도 처리를 해야했으며 피지크를 사용하는 경우 본 오브젝트에 버텍스들을 링크시켜야했다. 또한 애니메이션 처리시 중복 트랜스폼을 막기 위해서 오브젝트간 계층구조에 맞춰 오브젝트 순서를 재배열했다. 온통 예외처리 코드와 검색,검색,검색, 그리고 노가다 코드들인 잔뜩 들어갔다.또 유져 인터페이스가 들어가야 했는데 내가 제일 싫어하는 일이 UI만드는 일인데..정말 미칠것 같았다.
코드는 어떻게 해서 만들긴 하는데 문제는 또 있었다.바로 테스트와 디버깅.

초기 엔진 컴포넌트 DLL보다 소스가 더 클 정도로 맥스 익스포터의 소스는 컸다.또한 맥스SDK에서 포함하는 헤더와 라이브러리가 많았기 때문에 컴파일 속도가 느렸다.컴파일 걸어놓으면 짧아도 1분.늦으면 3분정도였다.
맥스 플러그인은 DLL이었으므로 맥스를 띄우기 전엔 테스트할 수 없었다.맥스 띄우는데 다시 1분정도..문제를 찾으면 다시 VC++에서 소스 수정..위의 작업을 반복했다.정말로 엿같은것은...모든 3D어플리케이션 제작시 겪는 문제지만 버텍스와 페이스 데이타가 수만개에 달하는데 그 중 몇샘플의 값이 이상하다고 해도 이걸 찾아내기란 물에 빠진 렌즈 찾는 격이었다.겪어본 사람은 알것이다.정말 돌아버린다.

지금은 엔진 컴포넌트에 넣어버렸지만, 초기의 익스포터에는 라이트맵 생성 기능이 들어있었다.알다시피 라이트맵 계산에는 시간이 많이 걸린다.그림자를 빼면 상당히 가벼워지지만 그림자 넣고 계산하려면 페이스별로 검사를 해야하므로 정말 오래 걸린다.
짜증나는것이 꼭 가벼운 매쉬로 돌릴땐 잘 나오고 20분씩 계산을 해야하는 덩치큰 매쉬를 넣으면 문제가 생기는 것이었다.당시 그림자 처리를 우한 삼각형과 선분충돌 소스에 문제가 있었는데 이거 잡느라고 무진장 힘들었다.
생각해보라..20분 계산해서 결과 확인하고...소스 고치고..이건 테스트해서 버그를 잡는다기보단 동물적인 감각으로 소스를 고치고 제대로 고쳤기를 기대하는 꼴이었다.
짜증이...만땅이었다.

익스포터가 빨랑 나와줘야 화면에 뭐라도 보여주고 작업을 하는것이니, 처음 시작하는 마당에 일정에 쫓겨다녀야했다.

지금은 그 속썩이던 녀석이 잘 돌아간다.아직 추가할 부분이 있긴 하지만 데이타는 항상 원하는대로 제대로 나온다.물론 코드는 다시 보고싶지 않다.빨리 짜야했고 애초에 혼자 작업할 것이기에좀 날림으로 짰더니 엄청난 누더기 코드가 되어버렸다.

다시 하고 싶지 않은 일로 다섯손가락에 꼽을 만한 일...맥스 플러그인 만드는 일이다.




* 여치님에 의해서 게시물 이동되었습니다 (2004-01-09 01:20)

댓글 '1'

^____^

2008.03.20 18:58:29
*.29.249.44

으...주제가 불러드릴까요? ㅠㅠ

역시 험난한 길인가 봐요 흑흑..
파일 첨부

여기에 파일을 끌어 놓거나 파일 첨부 버튼을 클릭하세요.

파일 크기 제한 : 0MB (허용 확장자 : *.*)

0개 첨부 됨 ( / )
List of Articles
번호 제목 글쓴이 날짜 조회 수sort
天安門大屠殺 六四天安門事件 反右派鬥爭 大躍進政策 文化大革命 六四天安門事件 The Tiananmen Square protests of 1989 天安門大屠殺 The Tiananmen Square Massacre 反右派鬥爭 The Anti-Rightist Struggle 大躍進政策 The Great Leap Forward 文化大革命 The Great Proletarian Cultural Revolution 人權 Human Rights 民運 Democratization 自由 Freedom 獨立 Independence 多黨制 Multi-party system 民主 言論 思想 反共 反革命 抗議 運動 騷亂 暴亂 騷擾 擾亂 抗暴 平反 維權 示威游行 法輪功 Falun Dafa 李洪志 法輪大法 大法弟子 強制斷種 強制堕胎 民族淨化 人體實驗 胡耀邦 趙紫陽 魏京生 王丹 還政於民 和平演變 激流中國 北京之春 大紀元時報 九評論共産黨 獨裁 專制 壓制 統一 監視 鎮壓 迫害 侵略 掠奪 破壞 拷問 屠殺 肅清 活摘器官 障テ社會 誘拐 買賣人口 遊進 走私 毒品 賣淫 春畫 賭博 六合彩 台灣 臺灣 Taiwan Formosa 中華民國 Republic of China 西藏 土伯特 唐古特 Tibet 達償ワ喇嘛 Dalai Lama 新疆維吾爾自治區 The Xinjiang Uyghur Autonomous Region free tibet



XE Login

天安門大屠殺 六四天安門事件 反右派鬥爭 大躍進政策 文化大革命 六四天安門事件 The Tiananmen Square protests of 1989 天安門大屠殺 The Tiananmen Square Massacre 反右派鬥爭 The Anti-Rightist Struggle 大躍進政策 The Great Leap Forward 文化大革命 The Great Proletarian Cultural Revolution 人權 Human Rights 民運 Democratization 自由 Freedom 獨立 Independence 多黨制 Multi-party system 民主 言論 思想 反共 反革命 抗議 運動 騷亂 暴亂 騷擾 擾亂 抗暴 平反 維權 示威游行 法輪功 Falun Dafa 李洪志 法輪大法 大法弟子 強制斷種 強制堕胎 民族淨化 人體實驗 胡耀邦 趙紫陽 魏京生 王丹 還政於民 和平演變 激流中國 北京之春 大紀元時報 九評論共産黨 獨裁 專制 壓制 統一 監視 鎮壓 迫害 侵略 掠奪 破壞 拷問 屠殺 肅清 活摘器官 障テ社會 誘拐 買賣人口 遊進 走私 毒品 賣淫 春畫 賭博 六合彩 台灣 臺灣 Taiwan Formosa 中華民國 Republic of China 西藏 土伯特 唐古特 Tibet 達償ワ喇嘛 Dalai Lama 新疆維吾爾自治區 The Xinjiang Uyghur Autonomous Region free tibet