장면 그래프로 또는 장면 그래프로?


10

내 게임에서 장면 그래프를 구현할지 여부에 대한 결정으로 어려움을 겪고 있습니다. 그러한 도구를 요구하는 사용 사례가 있지만 구현 세부 정보를 얻을 수 없었습니다.

일부 배경 : 모바일 플랫폼 (주로 Android)을 대상으로 한 우주 사수 형 게임을 작성 중이며 내 코드는 거의 C ++입니다. 미들웨어를 사용하지 않습니다. 특히 렌더링 및 물리 엔진은 제 자신의 작품입니다. 물리 엔진은 힘과 충격에 따라 물체의 위치를 ​​업데이트합니다. 나는 아직 애니메이션 시스템이 없지만 어느 시점에서 이것을 방문 할 수도 있습니다 (이 토론과 관련이 있거나 없을 수도 있습니다).

먼저 좋은 사용 사례를 설명하겠습니다. 여러 개의 개별 부품으로 구성된 보스를 갖고 싶습니다. 각 부품은 독립적으로 손상 / 파괴 될 수 있습니다. 예를 들어, 다른 보스 개체와 독립적으로 피해를받을 수있는 팔이있는 보스가있을 수 있습니다. 팔이 파괴되면 보스의 어깨에 위치한 불 입자 효과가 이제 팔이 파괴되었음을 나타낼 수 있습니다.

그대로, 나는 물리 엔진의 제약 조건으로 그러한 문제를 해결하여 그러한 복합 객체를 함께 유지하려고 시도했습니다. 그러한 제약 중 하나는 0 자유도를 제공하며 본질적으로 변환 행렬입니다. 이것은 실제로 아래 설명 된 장면 그래프에서 궁극적으로 나를 끄는 문제를 피하기위한 시도입니다.

장면 그래프를 사용하지 않는 주된 이유는 물리 세계와 렌더링 장면 모두에서 중첩 된 객체 (부모의 변형을 상속하는 객체)를 유지하는 효율적인 방법을 찾을 수 없기 때문입니다. 물리 세계에는 객체가 월드 공간 (또는 적어도 동일한 공간)에 있어야하지만 렌더링 장면에는 부모 공간에 객체가 필요합니다. 두 공간 모두에서 위치를 추적하면 도움이 될 수 있지만 피할 수는 없지만 성능과 관련이있는 것은 아닙니다.

그러나 위에서 설명한 것과 같은 유스 케이스를 고려할 때 부모 공간에서 '작업'할 수있는 것이 매우 중요해질 것이며 제약 조건을 사용하여 물리 엔진이 이러한 관계를 유지하도록 강요하는 것은 문제가 될 것입니다.

위에서 설명한 유스 케이스와 곤경을 감안할 때 그래프 구조를 사용하여 한 객체에서 다른 객체로 변환을 전달해야합니까? 그렇다면 물리 엔진이 어떻게 새로운 위치를 계산하고 다른 공간에있는 물체에 대한 교차 테스트를 수행해야합니까?

답변:


11

실제로 계층 적 그래프를 시도 하고 성능을 측정 했습니까?

간단한 물리 엔진을 조사하여 문제를 처리하는 방법을 확인 했습니까? 심지어 객체 사이에 연결되어있는 2D 엔진조차도 입증 된 방향으로 안내하는 데 도움이됩니다.

나는 당신의 물리학을 여러 공간에서 실행하려고 시도하지 않을 것입니다. 복잡함은 어려울 것입니다. 월드 공간에서 물리를 실행하고 기능을 추가하여 로컬 공간 객체를 월드 공간으로 또는 뒤로 이동시키는 계층 구조 변환을 작성하십시오. 필요에 따라 제약 조건은 부모 개체를 기준으로 로컬 공간에 있어야합니다.

참고로 순수한 객체 배열조차도 "장면 그래프"이며 매우 간단한 것입니다. 문제를 해결하는 방법으로 데이터를 구성하는 것을 두려워하지 마십시오. 특히 해당 데이터 구성의 성능이 그 성능을 측정하지 않은 한 요인이라고 결정하지 마십시오.


성능이 아니라 시간 때문에 해결하려고했습니다. 당신이 인디에있을 때, 오랫동안 무언가에 갇히게되면 진보와 사고 방식에 해로울 수 있습니다. Spring RTS 엔진을 약간 살펴 보았지만 원하는 것을 찾지 못했습니다. 따라서 그래프를 이동하면 물리 엔진에서 로컬 공간의 객체 위치를 업데이트 한 다음 월드 공간 방향을 계산하고 충돌 감지와 함께 사용하기 위해 월드 공간 방향을 유지해야합니다. 그래도 역행렬을 계산해야하는 "뒤로"에 대해 언급 했습니까? 언제해야합니까?
notlesh

시간이 문제라면 물리 라이브러리를 사용하는 것이 훨씬 빠르며 많은 디버깅 시간을 절약 할 수 있다고 생각했습니다. 2D 만하고 있다면 box2d.org 일까요? 나는 당신이 짐작했던 것처럼 단지 역이기 때문에 "뒤로"를 제안했습니다. 언젠가는 세계 공간에서 무언가를 가져 와서 다른 모델에 연결하고 싶을 것입니다.
Patrick Hughes
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.