다른 좌표계와 물리 시뮬레이션 연결


9

물체가 "창"을 통해 두 물리 시뮬레이션 사이를 이동하고 그들이 창 평면과 교차하는 경우 두 시뮬레이션의 물체와 충돌하기를 원합니다.

시뮬레이션의 좌표계는 동일한 원점을 가지지 않으며 방향이 다를 수 있습니다. 시뮬레이션 자체를 래핑하는 것은 필요하지 않지만 더할 나위가 없습니다.

개별 개체를 복제하지 않고 시스템을 효율적으로 연결하려면 어떻게합니까?

편집하다:

계산은 가능한 한 정확해야하므로 반대쪽에서 동시에 창을 가로 질러도 객체가 고착되지 않습니다.


첫 번째 질문은 물리적 시뮬레이션이 창 전체에서 정확해야 하는가하는 것입니다. 방향 변경으로 인해 적절한 스윕이 불가능 해집니다. 규모가 바뀌는 포털과 비슷합니다. 고통의 세계입니다. 두 번째 질문 : 임의의 방향으로 또는 최소한 90도 각도에서 다른 방향으로 축 스왑 만?
Kaj

이제 포털에서 해결해야 할 문제인 것 같습니다. 내가 정확하게 기억한다면 그들은 이러한 문제들과 그들이 게임 내 주석에서 어떻게 해결했는지 언급합니다. 이 온라인 어딘가에서 찾을 수 있습니다.
Nailer

@ Kaj 임의의 직각 전환을 위해 계산 경로를 분할하는 것이 가장 좋습니다. 이런 식으로, 직각은 더 높은 정밀도와 속도를 가질 수 있지만 다른 각도도 가능합니다.
Tamschi

@Nailer 정확하게 기억한다면, 포털을 여는 동안 새로운 물리 환경을 만든 다음이 추가 시뮬레이션에 근접한 모든 물리 객체를 복제했습니다. 그들은 어떻게 든 물체를 구속한다고 말했지만, 힘을 변형시키고 각 물리 단계를 위치시키는 것일 가능성이 높습니다. <br> 플레이어의 움직임 방식으로 인해 대상에서 세 번째 클론을 생성한다고 확신합니다. 소스에서 시뮬레이션되었습니다.
Tamschi

답변:


2

이전에는 '포탈 라이즈 드 (Portalized)'로 알려진 Pseudoform이라는이 멋진 프로젝트가 포털을 사용하여 물리학 적 시뮬레이션을 그루비 방식으로 처리합니다.

의사 형태

확인 해봐!

특히 비디오-엄청나게 시원합니다.

오픈 소스이므로 어떻게 작동하는지 확인할 수 있습니다.

나는 그것이 당신이 원하는 것이라고 확신합니다. :)


2
방금 코드를 읽었습니다. 그들이하는 방식은 밸브의 솔루션과 거의 같지만 추가 물리 환경이 없습니다. 포털 엔진의 포털은 포털 표면에 닿으면 객체의 복제본을 생성 한 다음 특정 시간 동안 포털을 떠나면 삭제합니다. 이 답변은 여전히 ​​도움이됩니다. 복제본을 구속하는 데 사용되는 조인트는 포털에서 객체가 어떻게 변환되는지 보여줍니다.
Tamschi

0

좋아-이것이 효과가 있는지 모르겠습니다.
위의 정보를 기반으로 객체가 세상 밖으로 나갈 때를 감지 할 수 있도록 '창'에 트리거를 추가했습니다. 충돌시 현재 속도 벡터를 잡습니다. 트리거가 발생한 위치와이 프레임의 종료 위치를 기준으로 남은 시간 간격을 계산합니다 (세계 외부에서는이를 허용하기 위해 가상 경계가 필요합니다). 이 시점에서 속도와 남은 시간 간격을 알 수 있으므로 입력하려는 세계의 경계에서 속도를 재배치하고 속도를 재 투영 할 수 있습니다. 그러나 이것은 한 프레임에 두 개의 물리 업데이트가 필요하며 한 객체의 경계는 a에서 b로 가고 다른 객체는 b에서 a로 같은 위치에 있습니다. 충돌이 전혀 감지되지 않습니다.
킨다 스케치,


가장 빠른 방법 인 것 같지만 두 객체가 같은면에서 창을 가로 지르는 경우 문제가 있습니다. 첫 번째 객체가 경계를 가로 질러 중간에 붙어 있으면 두 번째 물체가 경계에 도달 할 때까지 충돌하지 않습니다. 대상의 첫 번째 안에 표시됩니다.
Tamschi

입력하는 동안 약간 편집되었으며 실제로 다음과 같이 추가되었습니다. –o \
Kaj

읽는 법을 배워야 해요. 나의 추가는 또 다른 국경 사건이었다. 숙고합니다.
Kaj

아닙니다. 국경은 세상 바깥에 있습니다. 따라서 오브젝트 1은 오브젝트 b와 마찬가지로 자체 속도로 월드 2 (창 2가 아닌 세계 2의 경계에서)로 촬영됩니다. 그들은 국경의 세계 2에서 제대로 충돌 할 것입니다. 그러나 내 자신의 국경 사건은 여전히 ​​유효합니다.
Kaj

가상 테두리에 대한 부분을 잘못 읽은 것 같습니다. 어쨌든 물체가 끼면 또 다른 문제가 있습니다. 대상 창의 뒷면에있는 부분은 여전히 ​​원래 위치에서 렌더링되지만 테두리에 닿지 않는 개체는 충돌하지 않습니다. 이러한 문제를 해결하는 한 가지 방법은 시뮬레이션을 통합하는 것이지만 이것이 어떻게 효율적으로 수행 될 수 있는지 잘 모르겠습니다.
Tamschi

0

물리 시뮬레이션에 대한 정보를 읽고 가능한 해결책을 찾았습니다. 각 물리 단계를 3 단계로 나눠서 작동합니다.

1. 사전 단계 :

각 물리 단계, 창은 연결의 각 측면에 대해 두 개의 변환을 만듭니다.

  • 객체의 위치, 속도 (및 크기 및 무게)를 대상 좌표계로 변환하는 입력 변환
  • 출력을 객체의 원래 시스템으로 다시 변환하는 출력 변환

(정적 창은이 작업을 한 번만 수행하면됩니다.)

또한 각 좌표계의 객체는 세 그룹으로 나뉩니다.

물리 그룹화 http://content.wuala.com/contents/Tamschi/Stack%20Exchange/WindowGrouping.png

  1. 창 앞의 개체 (녹색).
    객체가 창 평면과 교차하거나 창 뒤에서 교차 할 가능성이있는 경우이 그룹으로 계산됩니다 (표시되지 않음).

  2. 이 물리 단계 (오렌지)에서 창을 교차 시키거나 교차 할 가능성이있는 물체.

  3. 창 뒤의 개체 (파란색). 개체가 창의 뒷면으로 날아가도 여전히 그룹 3의 구성원으로 표시됩니다.

창이 시뮬레이션 경계에 있으면 그룹화를 단순화 할 수 있습니다.

2. 주요 단계 :

물리학은 몇 가지 예외를 제외하고 대부분 평소와 같이 계산됩니다.

  • 두 번째 그룹의 객체는 세 번째 그룹의 객체와 충돌하지 않으며 그 반대도 마찬가지입니다.

  • 창의 입력 변환은 두 번째 그룹의 객체에 사용되며 결과는 대상 시스템의 전면 및 교차 객체에 대해 평가됩니다. 결과 변형은 출력 변형을 사용하여 변형되고 원래 객체에 적용됩니다.

(계산 중에 객체가 히트되면 다시 그룹화해야합니다!)

3. 사후 단계 :

두 번째 그룹의 개체가 창을 통과 한 경우 입력 변환을 사용하여 대상 시스템으로 이동합니다.

추가 생각 :

물리 계산 후 변환이 유지되면 렌더링 속도를 높이고 AI 계산을보다 쉽게 ​​수행 할 수 있습니다. 그룹화를 사용하여 렌더링 프로세스에서 클립 평면을 제거 할 수 있습니다.

이 솔루션의 단점은 물리 엔진에 창을 직접 추가해야한다는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.