다음은 MCG의 Bullet Physics 노드를 사용하여 강체 시뮬레이션을 작성하기 위한 개략적인 기본 단계입니다.
표준 만들기
Bullet Physics 시스템을 "표준"이라고 합니다. 표준은 시뮬레이션 중 캐시되고 업데이트되어야 하는 시스템으로, 해당 제약 조건 및 관계와 함께 시뮬레이션에 참여하는 모든 강체를 포함해야 합니다.
강체를 표준에 추가하려면 표준 자체를 먼저 만들어야 합니다. 표준에는 일반적으로 장면의 시작 시간인 초기 시간이 있어야 합니다. 표준 중력도 설정할 수 있습니다.
동적 오브젝트 추가
잠재적인 충돌 오브젝트 역할만 하는 다른 오브젝트와 달리 동적 오브젝트는 Bullet Physics 엔진에 의해 변환이 업데이트되는 강체입니다.
- 애니메이션 제어기의 경우 변환을 하나만 출력할 수 있으므로 동적 오브젝트를 하나만 가질 수 있습니다.
- 다른 상황에서는 여러 개의 동적 오브젝트를 가질 수 있습니다. 예를 들어 볼륨 내에 변환을 배포하고 이 변환을 사용하여 여러 메시 복사본을 인스턴스화함으로써 형상을 만들 수 있습니다. 이러한 경우 변환 배열에서 집계 연산자를 사용하여 동일한 동적 특성을 가진 여러 강체를 표준에 추가할 수 있습니다.
동적 오브젝트를 표준에 추가하려면 다음 기본 단계를 수행합니다.
- 강체의 동적 특성을 설정합니다.
동적 오브젝트의 경우 질량은 0이 아닌 양수 값이어야 합니다.
- 동적 특성을 사용하여 강체를 만듭니다.
- 동적 오브젝트의 경우 isKinematic 포트를 False로 설정해야 합니다.
- convexHull은 충돌 탐지에 사용되는 메시입니다. 이 메시는 물이 새지 않도록 빈틈이 없어야 하고 오목한 곳이 있는 경우에는 볼록한 헐만 사용됩니다. 이 메시는 오브젝트의 렌더링된 모양에 사용되는 메시와 동일하지 않아도 됩니다. 예를 들어 좀 더 빠른 충돌 계산을 위해 단순화된 메시를 사용하거나 빽빽한 오브젝트로 상호 침투에 의해 유발되는 폭발적인 힘을 피하기 위해 좀 더 작은 메시를 원할 수 있습니다.
- 필요에 따라 오브젝트의 초기 속도를 설정하고 제약 조건을 작성할 수 있습니다.
- 동적 오브젝트를 표준에 추가합니다.
나중에 표준에서 변환 값을 다시 가져오려면 동적 오브젝트의 인덱스가 필요하므로 표준 및 해당 순서에 추가된 동적 오브젝트 수를 파악해 둡니다. 표준에 추가된 첫 번째 오브젝트는 인덱스 0이고 두 번째 오브젝트는 인덱스 1이 되는 방식입니다.
충돌 오브젝트 추가
Bullet Physics 엔진은 동적 오브젝트의 충돌에 충돌 오브젝트를 사용하지만 해당 변환은 업데이트하지 않습니다. 충돌 오브젝트는 일반적으로 바닥 및 벽 같은 것에 사용되지만 애니메이션될 수도 있습니다.
충돌 오브젝트를 추가하는 작업은 동적 오브젝트를 추가하는 작업과 유사하지만 더 간단합니다.
- isKinematic은 true여야 합니다. 이렇게 설정한다고 해서 반드시 충돌 오브젝트가 애니메이션된다는 것은 아니지만 애니메이션되는 경우에는 표준을 앞으로 이동하기 전에 그래프가 해당 변환을 업데이트해야 합니다.
- 질량은 무시됩니다(항상 0임).
- 속도 및 제약 조건이 적용되지 않습니다.
다시, 배열을 사용하여 여러 충돌 오브젝트를 추가할 수 있습니다.
표준 캐시 만들기
마지막 강체를 추가한 후 결과 함수를 사용하여 표준 캐시의 초기 상태를 설정합니다.
표준 캐시 업데이트
이제 각 프레임에서 캐시를 업데이트하는 방법을 정의해야 합니다. 이를 위해 두 단계가 있을 수 있습니다.
- 충돌 오브젝트가 애니메이션되는 경우 새 변환을 사용하여 표준을 업데이트합니다.
- 시간 내에 표준을 앞으로 이동합니다.
충돌 오브젝트 변환 업데이트
충돌 오브젝트의 변환을 업데이트하려면 장면의 INode에서 현재 변환 매트릭을 가져온 다음 표준에서 해당하는 강체의 변환을 인덱스별로 설정합니다. 이전과 마찬가지로 여러 오브젝트의 배열을 사용할 수 있습니다.
시간 내에 앞으로 이동
장면의 현재 시간과 마지막 시뮬레이션 시간 사이의 차이를 기반으로 시뮬레이션을 앞으로 이동합니다. 결과 함수를 CreateCache 노드의 updateFunc 포트에 연결합니다.
업데이트된 변환 가져오기
마지막으로 캐시된 표준에서 시뮬레이션된 변환 값을 인덱스별로 가져와서 사용하면 됩니다.
- 제어기의 경우 단일 변환을 출력합니다.
- 형상과 같은 것들은 변환의 배열에서 메시의 복사본을 인스턴스화할 수 있습니다.