yuchi's Development Home


충돌처리

조회 수 4062 추천 수 104 2005.03.06 04:19:01


SS3D엔진에서는 진영씨가 충돌처리 코드를 이미 사용하고 있었다. 실전적용된적은 한번도 없지만.

이번 프로젝트에서 실전 사용될것이다. 문제는...

씬 그래프의 기반이 왕창 바뀌어서 기존 코드를 쓸 수가 있느냐 하는 것이었다.
다행히 진영씨가 퇴직할때까지 충돌처리 코드를 분리해서 잘 정리해놨다.
덕택에 bsp기반의 엔진에 이 충돌처리 코드를 붙이는건 어렵지 않았다. 필드쪽에 대해서는 무난하게 작동,

역시나 문제는 BSP로 바뀐 건물과의 충돌처리.

충돌테스트용 삼각형이 무진장 많이 쏟아져나와서 진행이 불가능할정도로 느려졌다.

초기 버젼에서는 충돌처리용 삼각형을 집어넣던 그리드라도 있었는데 BSP기반으로 오면서 그 부분까지 완전 제거된것을 모르고 있었던 것이다.
대구 내려간 진영씨한테 전화 걸어서야 알게 되었다.

일단 충돌처리용 삼각형리스트를 어떤 식으로든 분할해야했다. 쩝...보스 잡으려고 칼 받으러 장로한테 갔더니 장로가 자기 아들 구해오면 칼 준다고 해서 다시 아들 찾아나서는...그런식의 스토리가 또 전개되는 것이다. 충돌처리하려고 자료구조를 또 몇개씩 만들고 만들고 만들어야하는...

그리하여 머리를 싸매기 시작한것이 지난주 초.

첨에는 3차원 그리드를 사용했다.하루 웬종일 작업해서 코드를 다 짜고 로직상으론 테스트가 다 끝났다. 뭔가 석연치 않아서 집에 오는 내내 고민하다 심각한 결함을 발견. 폐기하기로 결정했다.

고민고민하다가 이동 및 충돌처리에서 쓰이는 바운딩 매쉬는 캡슐이라는데 착안해서 KD트리를 사용하기로 했다.

일단 충돌처리용 삼각형 리스트를 이미 빌드된 BSP에 때려넣는다. 각 리프에 삼각형들이 들어가면 리프 안에서 KD트리로 잘라나간다.

좀 세밀하게 샘플링하도록 했더니 거의 완벽하게 균형을 잡은 트리가 만들어졌다.

이 과정에서 상당히 삽질했다. KD트리 빌드 코드를 넣고 나니 pvs빌드 시간이 황당하게 길어져버린것. 거의 네배쯤 증가했다.
처음에는 내 눈을 의심했으나 곧 원인을 파악했다.

new,delete로 할당한 힙블럭 갯수가 너무 많아져서 할당,해제할때마다 힙체크 시간이 기하급수적으로 길어진것이었다.
pvs빌드시에 실시간으로 new,delete를 많이 사용하는데 이미 bsp노드와 포탈로 new,delete를 많이 사용한 상태에서, KD트리 빌드한다고 BSP리프마다 수많은 KD트리 노드들이 new로 할당된채 존재하고 있으니....

그 상태에서 pvs빌드한다고 new,delete를 미친듯이 호출해대니 느려질수밖에.

이 문제는 일단 간단하게 해결했다. pvs빌드 하기 전에 KD트리빌드를 끝내고 new,delete로 할당한 노드들은 모두 제거, new 한번으로 할당하는 배열스타일로 바꿔버렸다.

그 다음은 .BSP파일로 저장할때 KD트리까지 같이 저장하는 문제인데, 기술적으로 어려울것 없으나 상당히 짜증나는 부분임에는 틀림없다.

토요일 출근해서 이 부분까지 다 짜긴 했는데 테스트하면 제대로 안돌아갈게 뻔해서 그냥 집으로 와버렸다.

방금까지 새벽 내내 코딩해서 일단 이 부분도 테스트하고 디버깅 완료.

이제 실전적용이 남아있다.

이동경로를 나타내는 캡슐 구조체로 BSP노드들을 걸러내고 그 BSP노드들이 가지고 있는 KD트리에 다시 캡슐을 주고 노드들을 걸러낸다. 최종적으로 KD트리 노들로부터 삼각형들을 추출해내면 이 놈들이 충돌처리할 삼각형 리스트.
여기서 중복되는 삼각형들도 제거해야된다. 코드는 다 짜뒀는데 역시 테스트하기 겁나는군.

스샷은 충돌매쉬를 표현한것이다. 연두색 부분은 카메라의 뷰 포인트가 속하는 KD트리 노드의 삼각형들. 저놈들 가지고 충돌 테스트를 하게 될 것이다.

에휴...이거 언제쯤 완료되려나..재미없다.

댓글 '2'

maxidea

2005.03.06 20:06:06
*.52.201.33

죽어라 만들고 막상 테스트할때(컴파일 조차도...) 망설여지면 그냥 일단 뽀사지던 말던
일단 해보는겁니다. 하다보면 또 하게 되더라고요. ㅋㅋ ^^

zapwand

2005.03.06 20:19:35
*.241.7.225

BSP작업할때는 기분전환용으로 재미있는 FPS게임을 하시면서 FPS게임에 재미를 붙이시는게 작업하는데 안지루하고 도움도 많이되지 않을까 하는 생각이 드네요.
제가 직접 BSP를 만들 기회는 없었지만 전 프로젝트에서 FPS작업할때 둠이나 카스 하프라이프2 콜옵듀티 등을 틈틈히 했었는데 재미도 있었고 작업에도 많은 아이디어를 주는 등 도움이 되더군요.
파일 첨부

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

파일 크기 제한 : 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