posted by 나무꾼! 2014. 12. 12. 11:44

제약 시스템 Constraint System

강체를 Constraint로 연결하는 것은 C++ 코드를 통해서 구현하거나 3dsMax 에서 Havok Contents Tool 플러그인을 통해서도 설정이 가능하지만 여기서는 가장 쉬운 방법으로 vForge 에디터 에서 설정하는 방법을 설명하도록 하겠다.

Note : 하복에서 제공하는 제약 조건들은 공통적으로 제약조건의 개수에 비례하게 일정하게 성능 부하가 증가된다. 예를 들어 100개의 제약 조건을 사용할 경우 10개의 제약 조건을 사용했을 때 보다 약 10배의 시간이 더 소요가 되게 된다. 그리고 일반적으로 한 제약조건 안에서 더 많은 자유도를 제약할수록 성능 부하가 더 증가하게 된다.

1. vForge 에서 Constraint 연결하기

vForge 에서는 Havok Rigid Body 컴포넌트를 가진 엔티티를 제약 조건으로 쉽게 연결 할 수 있다. 간단한 Constraint 를 연결하는 과정은 다음과 같다. 만약 Constraint 의 종류가 다르더라도 기본적인 설정 과정은 동일하고 Constraint Type 만 변경하면 원하는 타입의 Constraint로 설정이 가능하다.

  • 장면에 한 개의 Constraint 와 두 개의 Anchor 를 추가 한다. 여기서 적어도 한 개의 Anchor 는 Havok Rigid Body 컴포넌트를 가지고 있는 Entity 의 자식으로 추가되어야 한다.

  • 링크모드를 통해 Constraint 를 Anchor 에 연결 한다

  • 연결 부위가 떨어지지 않도록 Anchor 와 Constraint 의 위치가 일치 되도록 설정 해야한다

  • Align to parent 기능을 이용하면 쉽게 위치를 정렬할 수 있다

  • 정렬을 위해 임시로 자식 노드로 설정했던 Anchor 와 Constraint 를 다시 원위치 한다.

    Constraint 를 선택한 후 속성 패널에서 세부 설정을 마무리한다. Constraint 의 종류별 세부적인설정 방법은 다음 절에서 설명하도록 하겠다.

2. Constraints 들의 공통적인 속성

Constraint의 종류에 관계 없이 Breakable 및 Malleable 설정은 모든 동일한 속성을 가진다

Breakable Settings:

  • Is Breakable: 이 속성을 True로 설정하면, Threshold 이상의 힘에 의해 제약 조건과 강체의 연결이 깨지도록 설정 할 수 있다
  • Threshold: Is Breakable 속성이 True 인 경우, Threshold 이상의 힘에 의해 제약 조건과 강체 와의 연결이 깨지면서 강체가 제약조건으로부터 자유로워 진다. 이 속성에 대한 범위는 0과 무한대 사이이다.
  • Revert Velocity On Break: Is Breakable 속성이 True 인 경우, 이 속성을 통해 제약조건과 강체와의 연결이 깨질 때 영향 받는 강체의 속도가 초기화 되도록 설정할 수 있다. 기본값은 True 이다

Malleable Settings:

  • Is Malleable: 이 값을 True 로 지정 하면, 강체와 연결된 제약조건에 약간의 유격을 허용해서 유연하게 움직이도록 만들 수 있다.
  • Strength: 이 속성을 0.0 으로 지정하면 적은 힘으로도 더 유연하게 움직이게 되며, 1.0 으로 지정하면 유연성이 사라지게 된다.

3. Ball-and-Socket Constraints

Ball and Socket 으로 연결된 두 개의 강체중에서 Ball 에 해당되는 강체가 Socket에 해당되는 강체 와의 연결 지점 인 Pivot Point 를 기준으로 회전이 가능하도록 한다.

이 제약 조건에는 공통 속성 외에 따로 추가적인 속성은 없다

문의 경첩과 같이 동작하기 때문에 Hinge Constraints 라고 부른다. 속성을 통해 회전 각도를 제한 할 수도 있고 이를 Limited Hinge 라고 부른다. 연결된 강체가 서로 관통되는 현상을 방지하기 위해 Limited Hinge 가 유용하게 사용된다.

Hinge Constraint 의 속성

연결된 강체 의 회전운동에 대한 각도를 제한해서

사람과 동물의 관절을 연출하거나 가방이나 악세서리 등의 장착물을 위해 자주 활용 된다

개별 Ragdoll Constraint 의 설정이 아닌 캐릭터 전체를 위해 특화된 Ragdoll 에 대해서는 다음 절에서 곧 이어서 설명하도록 하겠다.

Ragdoll Constraint 의 속성

Stiff Spring에서는 Rigid Body가 지정된 거리만큼 떨어진채 연결 한다

Stiff Spring은 각 강체 내 특정 지점에서 작동되고, 강체는 자유롭게 지점 주위를 이동하고 회전하지만, 서로에 대한 일정한 상대 거리를 유지하게 된다

 

Constraint Chain Shape은 직렬로 연결된 여러 개의 Constraint를 대신할 수 있는 특별한 유형의 Constraint 이다. 개별 Constraint 를 여러 개를 사용해서 수동으로 연결하는 방식보다, Constraint Chain은 훨씬 더 안정된 방식으로 관련 Constraint를 시뮬레이션 하기 때문에 연속적으로 길게 연결된 Rigid Body 들을 표현할 때 아주 유용 하다.

설정 방법은 다른 Constraint 와 같다. Constraint Chain Shape도 한 쌍의 Rigid Body에 각각 Anchor 를 붙이고 Constraint Chain Shape 을 두 Anchor에 연결하는 방식으로 설정이 가능 하다.


Constraint Chain 의 속성

Constraint Chain Shape 자체는 Scene에서 시각적 표현이 없지만. Constraint Chain에 Path Renderer 컴포넌트를 추가하면 시각화가 가능하다. Path Renderer 컴포넌트 에는 다음 두 가지 유형이 있다.

Path Renderer (Cable) 컴포넌트 속성

Cable Renderer 컴포넌트는 Chain을 실린더 세그먼트의 인접 집합으로 렌더링 한다

Path Renderer (Debug) 컴포넌트 속성