포털의 충돌 감지를 구현하는 방법은 무엇입니까?


12

예를 들어,이 시나리오를 생각해보십시오 (제 끔찍한 그림 기술은 제외) 영상

이것은 stickman이 파란색 포털 (빨간색 포털에 링크 됨)을 통과하는 "포탈"을 기반으로하지만 빨간색 포털에서 그를 막는 벽이 있습니다. 따라서 그는 포털을 완전히 통과 할 수 없습니다.

그래서 제 질문은 이것입니다 : 물리 / 충돌 탐지는 어떻게합니까? 플레이어를 슬라이스합니까? 그들을 연결할 수있는 방법이 있습니까? 이를 지원하는 물리 엔진이 있습니까? 그렇지 않다면 어떻게해야합니까?


내가 아는 한, 그들은 Portal 1의 개발자 논평에서 몇 가지 내용을 설명합니다.
Archy


@ Byte56, 감사합니다. 게시물을 업데이트했습니다. 나는 이것이 더 명확히해야한다고 생각합니다 :)
MiJyn

1
나는 포털이 자유롭게 떠 다니는 배치가 아니기 때문에 포털에서 설명하는 상황이 매우 드문 일이라고 생각합니다. 벽과 특정 벽에만 배치됩니다. 포털을 배치 할 수 있었지만 포털의 다른 쪽 끝에 장애물로 인해 포털을 통과 할 수없는 상황을 기억하지 못합니다. 전환 기간 동안 두 위치 모두에서 플레이어의 임시 사본을 만들 수 있다고 생각합니다.
MichaelHouse

2
@ Byte56 : 많이 기억해서는 안됩니다. 포털 1에서이 작업을 수행 한 것을 기억합니다. 포털을 사용하여 죽지 않도록 분쇄 영역을 떠올리는 것 같습니다. 포털 근처의 물건과 충돌하는 것은 흔한 일이며 엔진이 쉽게 처리합니다.
Nicol Bolas

답변:


7

포털 게임은이 문제를 해결하는 좋은 방법이 있습니다 :

플레이어가 소스 포털 (파란색)을 통해 튀어 나와 대상 포털 (주황색)에서 튀어 나와있는 것으로 보입니다. 플레이어가 대상 포털에 복사되고 단계별로 진행되는 것을 볼 수 있습니다. 게임은 두 번째 카메라와 텍스처로 렌더링하여 소스 포털을 볼 때 표시되는 이미지를 렌더링합니다.

그러나 대상 위치에있는 플레이어의 사본은 물리와 상호 작용 하지 않습니다 . 렌더링 목적으로 만 존재합니다. 대신 소스 포털의 다른 쪽에서 가상 충돌 객체를 만들고 플레이어가 해당 객체와 충돌하도록합니다. 이것은 물리를 단순하게 유지합니다.

플레이어가 포털을 완전히 거치지 않고 도달 할 수있는 한 해당 가상 객체 만 필요합니다. 플레이어가 포털을 완전히 통과하자마자 상황이 반전됩니다.

설명 할 이미지 : 파란색 포털은 소스 포털이고 주황색 포털은 대상 포털입니다. 점선으로 된 흰색 상자는 가상 충돌 오브젝트이고 실제 상자는 렌더링 된 오브젝트입니다. 플레이어 (빨간색 점이있는)는 주변의 개체와 만 상호 작용합니다. 주황색 포털의 개체는 완전히 무시됩니다.

여기에 이미지 설명을 입력하십시오


4
" 두 번째 카메라 및 텍스쳐 텍스쳐 사용하기 "Portal 1의 개발자 논평은 렌더 투 텍스쳐를 사용 하지 않는다고 명시 적으로 말했습니다. ). 대신 기본적으로 월드 버전을 포털의 다른쪽으로 변환하고 다시 렌더링합니다.
Nicol Bolas

와우, 이것은 거의 모든 것에 응답합니다! 나는 궁금합니다. 포탈이 내부에 물체가있는 구멍으로 작동합니까?
MiJyn

6

시도하고 수행하는 방법은 다음과 같습니다.

포털에있는 동안에는 물리 엔진에 두 개의 플레이어 사본이 있습니다. 각 사본은 포털의 반대쪽에있는 모든 충돌을 무시한 다음 결과를 결합하고 시뮬레이션 결과를 두 모델에 적용합니다.

이상적으로는 플레이어의 각 절반에 대해 중력을 별도로 적용하지만 플레이어의 무게 중심이있는 포털 측면에 적용하면 도망 칠 수 있습니다.

이러한 충돌을 무시하려면 적절한 볼륨을 설정하고 포인트가 해당 포인트 내에 있는지 테스트해야합니다. 실린더 (수직으로 뻗어있을 수 있음)가 좋은 옵션 인 것 같습니다. 테스트는 다음과 같습니다if (!collisionPoint.InsideCylinder(portal)) ProcessCollision(); else IgnoreCollision();

대부분의 물리 엔진에는 물체와 충돌 할 수있는 것을 필터링하는 시스템이 있다고 생각하므로 표준 물리 엔진을 사용하는 것이 가능해야합니다. 예를 들어 http://bulletphysics.org/mediawiki-1.5.8/index.php/Collision_Filtering#Custom_collision_filtering

결과를 결합하기 위해 가장 간단한 옵션은 아마도 둘 사이에 일종의 융통성이없는 제약 조건 을 추가 하고 물리 엔진이 처리하도록하는 것입니다.


흠, 어떻게해야합니까? 나는 플레이어를 복사하는 것에 대한 부분을 얻었지만 그 외에는 단서가 없습니다. 반대쪽에서 충돌을 어떻게 무시합니까? 결과를 어떻게 결합합니까?
MiJyn

더 자세한 내용을 편집했습니다.
Adam

고마워, 나는 이것에 대해 생각하고 내 머리에 이것을 똑바로 설정할 수 있으면 나중에 답장 할 것입니다 :)
MiJyn

고마워요, 귀하의 답변과 Virtlink 's 내 질문에 대답 :) 이제 "정답"을 설정할 대상을 결정하려면 ...
MiJyn

4

플레이어의 추락 거리는 어떻게 계산합니까?

왜 하시겠습니까? 플레이어가 얼마나 "아래로"갔는지 계산할 필요는 없습니다. 객체가 시뮬레이션을 진행함에 따라 얼마나 멀리 떨어져 있는지 확인할 수 있습니다.

포털을 어떻게 연결합니까?

순전히 게임의 관점에서 볼 때, 포털은 충돌로 혼란을 일으켜 충돌 가능한 객체를 충돌 불가능한 것으로 전환하는 정교한 텔레 포터에 지나지 않습니다. 물체가 포털에 닿으면 다른 쪽 물체와 충돌 할 가능성이 있습니다. 포털을 통해 개체가 "충분히"지나 가면 다른 개체로 효과적으로 순간 이동하여 위치와 방향을 즉시 변경합니다.

물리학은 단순히 정상적으로 진행됩니다.


When an object touches the portal, it starts potentially colliding with things on the other side네 맞습니다. 물리 엔진으로 어떻게해야합니까? 내 질문 인 것 같아요 :)
MiJyn

@MiJyn : 당신은 그것을 할 수있는 물리 엔진을 작성합니다. 밸브는 포털을 실제로 작동시키기 위해 소스 엔진 을 본질적으로 깨뜨려야 했습니다. 상업적 또는 오픈 소스 물리 엔진은 자연스럽게 그렇게 할 수 없습니다. Portal의 인기에도 불구하고 시장에 수많은 Portal 복제본이없는 이유가 있습니다.
Nicol Bolas

매우 유사한 기술을 가진 많은 다른 게임들이 있기 때문에 흥미 롭습니다 (마인 크래프트를위한 ​​TARDIS 모드조차도보십시오). 쉽게 할 수 있는 방법 이 있어야한다고 확신합니다 .
MiJyn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.