[GPG 1 글 4.6] [질문] 대부분의 mmorpg에서 지형위의 object와 캐릭터 사이의

GPG 시리즈 관련 질답, 논의 공간.

Moderator: 류광

비회원

[질문] 대부분의 mmorpg에서 지형위의 object와 캐릭터 사이의

Post by 비회원 »

대부분의 mmorpg에서 지형위의 object와 캐릭터 사이의 충돌처리 문제를 어떻게 해결 합니까?

점프가 안된다고 가정 했을때 어떻게 들 구현 하셨나요?

일일이 삼각형 별로 하나요? 아님 충돌 라인을 그려서 처리를 하시나여?

현재 구현 하는 겜에서 일일이 캐릭터와 object의 삼각형과 다 비교를 하고 있지만

제 생각에는 정말 필요없는 연산 같아서요.. 충돌 라인을 그리면 해결 될 듯 한데...

다른 분들은 어떻게 구현하셨는지 궁금합니다.

답변 부탁 드립니다.
edbear
Posts: 26
Joined: 2004-06-24 18:02
Location: 방랑중
Contact:

전에 어떤 엔진을 쓸 때 이렇게 하더군요.

Post by edbear »

한 3D 엔진에서는
맵오브젝트에서 x,y 좌표를 주면 높이 값이 나와요. 그래서 캐릭터를 그 높이 위에 올려 놓았습니다.
충돌 처리를 하지 않은 것이죠.
중국에 살아요~!
ProgC
Posts: 190
Joined: 2005-08-07 08:37
Location: 게임회사

음...

Post by ProgC »

데이터만 있다면 높이값을 알아내는것은 쉽습니다. 단순히 지형만 있고 높이값을 얻어내려고 한다면
"하이트맵(HeightMap)"을 이용해서 높이값을 얻어 낼 수 있습니다.

만일 데이터를 가공하지 않은 상태에서 모든 삼각형과 충돌 검사를 하는것은 매우 비효율적이기 때문에
기타 다른 알고리즘을 이용해서 검사할 삼각형을 최대한 줄이는것들이 있습니다.

만일 케릭터가 오브젝트에 서 있을 수 있게 만들고자 한다면

하이트맵으로 검사를 우선적으로 한 후에 해당 지역에 오브젝트가 있다면 오브젝트랑 삼각형 검사를 해서 Y값을 얻어 내셔야 하죠.

물론 이와 같은 상황에서도 모든 오브젝트에 대한 삼각형을 검사할 필요는 없고 적당한 알고리즘을 이용해서 최대한 검사할 삼각형을 줄이는 것이 우선입니다. 그 외에 삼각형 검사를 피할 방법은 별로 없는것 같고요.
just coding!
비회원

질문자 입니다.

Post by 비회원 »

제가 질문을 이상하게 올린 것 같네요

다들 답변이 이상한 답변만 올라오네요 ㅋ....

제가 궁금한 것은 hight map의 값 즉 y 값을 얻는 게 궁금한 것이 아니라...

충돌에 관한 것입니다.

이미 hight map으로 부터 y값은 얻어 와서 잘 쓰고 있는 상태이고

그 Hight map 즉 terrain 위의 올려져 있는 object 들과 character 의 충돌 문제 입니다.

다시 한번 질문 한다면 terrain 위의 object들과 character의 충돌 검사시 일일히 검사를 하는지

아니면 정확성은 좀 떨어지더라도 충돌 라인을 그려서 충돌 검사를 하는지에 관한 질문이었습니다.

대개의 상요화된 아니면 개발 중이신 게임에서 어떤 방법으로 개발을 하고 계신지 궁금합니다.

답변 부탁 드립니다. (많이요^^;;;)
비회원

일반적으로 object와 object 는 bounding box나 sphere 로 검사

Post by 비회원 »

영문 사이트 보시면 잘나와있더요.(우리나라 사이트에선 별로못본 것 같네요.)


가마 수트라나 게임데브 가시면 자료가 너무많아서 걱정임;;
소스코드도 많으니간 참고 마니 돼실거에요.

어디서부터 봐야해--;;

그리고 맵 가장자리부분은 invisible plane 을 놓습니다.

map이동은 y값만으로도 검사가 됍니다.
smilemugi
Posts: 9
Joined: 2005-05-13 16:53
Location: 비밀
Contact:

이런 방법도

Post by smilemugi »

머 캐릭터와 오브젝트의 충돌은 Sphere 간의 충돌을 하던지 Bounding Box 를 사용해서 하던지 하면 될 것 같습니다. 그런데 위에서 질문의 하신 분의 걱정거리는 필요없는 오브젝트와도 충돌처리를 하는 것이 너무 비효율적인 것 같다고 생각하시는 것 같습니다.

해결 방법은 여러가지가 있는데 대부분의 이론은 간단합니다. '최대한 충돌처리 할 오브젝트 개수를 줄인다' 라는 것인데요. 'Game Programming Gems 1권 4.6 다해상도 맵을 이용한 충돌 판정' 을 참조해도 되고, 분포된 오브젝트 들을 옥트리나 머 다른 알고리즘을 사용해서 일정한 영역으로 분할해서 사용해도 되구요.
재성이아빠
비회원

답답 .. ;

Post by 비회원 »

예를들어 마을 계단이나
공성전 시에 성벽을 지그제그 계단으로 오르내린다던지 할려면
하이트 맵 수준으론 어렵죠

그리고 일단 화면에 보이는 오브젝트만 고려한다는건
너무 당연한 겁니다.

바운딩 박스는 대부분 OBB 가 아니고 AABB 이므로
이런경우는 건물을 항상 직각으로만 배치해야 하고 건물도
직사각형 스타일 이어야만 하므로 제약이 많습니다.

그런 저런 이유로 충돌을 아예 못하게 막아버리는
즉 .. 땅만 다니는 게임들이 있죠 .. 뮤, A3, 트라비아 이런 것들 입니다.

대신 충돌을 오브젝트 마다 완벽히 해주면서 다니는건
린지2, 릴 온라인 등이죠

오브젝트 자체를 충돌처리하면 넘 부하가 걸리므로
약식 로폴 충돌메쉬를 만들어서 하기도 하지만 이는
디자이너의 이중작업입니다.

그런 저런이유로 사용되는게
OBB Hierarchy Tree 충돌 방식이죠 ..

검색해 보시면 찾으실 수 있을 겁니다.
%인터넷은 무한 정보창고 ^^
비회원

-- 비효율적이다...

Post by 비회원 »

비용이 많이드는것도 아니고 어려운것도 아닌데 비효율적이다라...
뭐가 비효율적이라는건지...
여러가지 시도해보고 테스트하고 자신이 가장 좋다고 생각하는것을 선택하면 될것을...
비회원

Post by 비회원 »

바운딩 박스, 구, 평면, 실린더 등을 조합해서 쓰는 방법도 괜찮고,
충돌용 로폴리 매시를 만들어서 쓰는방법도 괜찮을듯 합니다.
당연히 충돌용 매시는 바운딩 박스로 감싸져 있어야 겠죠(obb, aabb모두 괜찮지만 러프하게 해도 괜찮다면 aabb를 쓰시고, 좌표계변환행렬 한번쯤 곱해도 괜찮다 싶으시면 obb쓰시고..^^)

이 바운딩 박스에 캐릭터가 충돌하면 그내부의 매시와 실제 충돌검사를 하는겁니다.

혹은 좀더 세분화 해서 바운딩 박스 내부를 옥트리로 나눠서, 매시의 삼각형을 옥트리의 리프에 등록해놓으면 충돌검사할 삼각형이 더 줄어들겠죠.
비회원

^^

Post by 비회원 »

혹은 좀더 세분화 해서 바운딩 박스 내부를 옥트리로 나눠서, 매시의 삼각형을 옥트리의 리프에 등록해놓으면 충돌검사할 삼각형이 더 줄어들겠죠.
이부분은 크게 3 가지로 나뉩니다.

1.bsp
2.oct-tree
3.OBB Hiearchy Tree

2 번이 윗분 말씀이구요

결론은 다 좋습니다.

참고로 3 번의 경우는 공개소스가 있습니다.[/quote]
Post Reply