UDN
Search public documentation:

PhysicsConstraintReferenceKR
English Translation
日本語訳
中国翻译

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 홈 > 피직스 > PhysX 컨스트레인트 참고서
UE3 홈 > 레벨 디자이너 > PhysX 컨스트레인트 참고서

PhysX 컨스트레인트 참고서


문서 변경내역: James Golding 작성. 홍성진 번역.

개요


Constraint(제약, 컨스트레인트)란 기본적으로 Joint(관절, 조인트)의 다른 이름입니다. 이를 통해 두 Rigid Body(강체, 리짓 바디)를 하나로 연결시키고, 제한이나 힘을 가하거나 할 수 있습니다. 언리얼 엔진 3는 매우 유연한 데이터-주도 컨스트레인트 시스템을 통해, 디자이너도 다양한 유형의 조인트를 옵션 변경만을 통해 쉽게 만들어 낼 수 있습니다. 엔진에 다양한 조인트 유형이 (볼-앤-소켓, 힌지(경첩), 프리즈매틱(직선축)) 내장되어 있기는 합니다만, 근본적인 차이점은 세팅 뿐입니다. 고로 아무 조인트 유형으로든 시작해서 자체 환경설정을 통해 만들어 가면 됩니다.

공용 설정과 인스턴스별 설정

설정은 두 부분으로 나뉩니다. 어떤 조인트의 모든 인스턴스에 공유되는 것과 각 인스턴스에 고유한 것입니다. 예를 들어 조인트의 제한같은 것은 조인트의 모든 인스턴스에 똑같이 설정할 수 있지만, 다양한 모터의 설정은 각기 다를 수 있습니다. 공용 속성은 RB_ConstraintSetup 오브젝트에, 인스턴스별 속성은 RB_ConstraintInstance 오브젝트에 보관되어 있습니다. PhAT에서 'I' 키( 또는 툴바 버튼 'i')를 눌러 선택된 조인트에 대한 이 설정간의 토글이 가능합니다.

강성 및 감쇠

컨스트레인트의 여러 곳에서 스프링의 작동 방식을 제어하는 'stiffness'(강성) 및 'damping'(감쇠) 파라미터를 설정할 수 있습니다. 이는 자동차 서스펜션(완충장치)의 스프링과 오일 피스톤 사이의 관계를 떠올려 보시면 되겠습니다. 스프링(강성)은 자동차가 기본 및 평형 상태로 되돌아가기 위해 필요한 힘의 크기를 제어하며, 오일(감쇠)은 어떠한 동작을 약해지게 하는 역할을 합니다. 강성은 조금 있는데 감쇠가 전혀 없다면 계속 위아래로 진동할 뿐 결코 진정되지 않습니다. 감쇠를 아주 높이 설정하면, 평형 상태가 되는데 시간이 아주 오래 걸리게 됩니다.

RB_ConstraintSetup


일반 설정

  • ConstraintBone1 (컨스트레인트 본1) - 피직스 애셋에서 조인트가 연결해야할 첫째 본 이름.
  • ConstraintBone2 (컨스트레인트 본2) - 피직스 애셋에서 조인트가 연결해야할 둘째 본 이름.

선형 세팅

LinearSetup 구조체는 하나마다 X, Y, Z 세 가지 방향으로 구성되어 있습니다. 각각에는 다음과 같은 세팅이 있습니다:

  • bLimited (제한됐는지) - 자유도에 제한이 있는지를 정합니다. 거짓일 경우 이동이 전혀 제한되지 않습니다.
  • LimitSize (크기 제한) - bLimited 가 참인 경우, 해당 방향으로의 이동이 허용되는 정도입니다. 이 값을 0으로 설정하면 자유도가 완전 '잠긴' 상태가 됩니다.

알아둘 점은 선형 제한이래도 실제로는 구체이므로, 방향이 0으로 제한되지('잠기지') 않으면 세 LimitSize 값 가운데 최대치를 사용하게 됩니다. 즉 X가 0, Y가 10, Z가 20인 경우 YZ면 상의 반경 20의 원 범위에 제한됩니다. X와 Y는 0이고 Z가 20인 경우, Z축을 따라 +20에서 -20을 오가는 선으로 제한됩니다.

  • bLinearLimitSoft (선형 제한 소프트인지) - 기본적으로 선형 제한은 '하드'입니다. 이 옵션을 참으로 설정하면 '밀리지' 않고 스프링처럼 작동하게 됩니다.
  • LinearLimitStiffness (선형 제한 강성) - bLinearLimitSoft 값이 참이면 이 옵션을 통해 제한 스프링의 강성을 제어합니다.
  • LinearLimitDamping (선형 제한 감쇠) - bLinearLimitSoft 값이 참이면 이 옵션을 통해 제한 스프링의 감쇠를 제어합니다.
  • bLinearBreakable (선형 파괴가능여부) - 참이면 이 조인트는 직선 방향의 힘을 가해 부술 수 있습니다. (즉 관절을 잡아 뽑는겁니다!)
  • LinearBreakThreshold (선형 파괴 한계점) - bLinearBreakable 값이 참이면, 이 값 이상의 힘이 가해질 때 조인트가 부서지게 됩니다.

Angular (각형) 세팅

조인트의 각형 부분은 'swing'(흔들기) 및 'twist'(뒤틀기)라는 용어로 지정할 수 있습니다. 흔들기는 X축을 중심으로 한 원뿔형을, 뒤틀기는 해당 축으로의 회전을 생각해 보시면 되겠습니다. UE3에서의 원뿔형 제한은 타원형 원뿔이 될 수 있도록 두 각도로 지정됩니다.

  • bSwingLimited (흔들기 제한여부) - 참이면 두 바디간의 각은 원뿔 범위 내로 제한됩니다. |
  • bTwistLimited (뒤틀기 제한여부) - 참이면 두 바디간의 뒤틀기는 제한됩니다.
  • bSwingLimitSoft (흔들기 제한 소프트인지) - 기본값으로 흔들기 원뿔 제한은 '하드'입니다. 이 값이 참으로 설정되면 밀리기 보다는 스프링처럼 작동합니다.
  • bTwistLimitSoft (뒤틀기 제한 소프트인지) - 기본값으로 뒤틀기 제한은 '하드'입니다. 이 값이 참으로 설정되면 밀리기 보다는 스프링처럼 작동합니다.
  • Swing1LimitAngle (흔들기 제한각 1) - 흔들기 제한 원뿔의 한 쪽을 각도로 정의합니다.
  • Swing2LimitAngle (흔들기 제한각 2) - 흔들기 제한 원뿔의 다른 쪽을 각도로 정의합니다.
  • TwistLimitAngle (뒤틀기 제한각) - 두 제약된 바디간에 허용되는 뒤틀기 양을 정의합니다.
  • SwingLimitStiffness (흔들기 제한 강성) - bSwingLimitSoft 값이 참이면 이 값을 통해 원뿔의 강성을 제어합니다.
  • SwingLimitDamping (흔들기 제한 감쇠) - bSwingLimitSoft 값이 참이면 이 값을 통해 원뿔의 감쇠를 제어합니다.
  • TwistLimitStiffness (뒤틀기 제한 강성) - bTwistLimitSoft 값이 참이면 이 값을 통해 뒤틀기 제한의 강성을 제어합니다. |
  • TwistLimitDamping (뒤틀기 제한 감쇠) - bTwistLimitSoft 값이 참이면 이 값을 통해 뒤틀기 제한의 감쇠를 제어합니다. |
  • bAngularBreakable (각형 파괴가능여부) - 참이면 이 조인트는 회전력을 가해 부술 수 있습니다. (즉 관절을 비틀어 꺾는겁니다!)
  • AngularBreakThreshold (각형 파괴 한계점) - bAngularBreakable 값이 참이면 이 값 이상의 회전력이 가해질 때 조인트가 부서지게 됩니다.

Pulley (도르래) 세팅

도르래는 밧줄로 연결된 바디상의 한 점이 다른 점에 연결되어서 해당 밧줄이 공간상의 두 점을 통해 전달하기도 하는 특수한 조인트입니다. 이 조인트 유형이 사용되면 대부분의 다른 조인트 세팅은 효과를 잃게 됩니다.

  • bIsPulley (도르래인지) - 참이면 이 조인트는 도르래 유형으로 간주됩니다. |
  • bMaintainMinDistance (최소 거리 유지여부) - 참이면 '밧줄'이 '여유 공간'을 허용치 않는 막대같은 식으로 간주되어, 한 오브젝트를 밀어올리면 다른 쪽을 밀어내리게 됩니다. |
  • PulleyRatio (도르래 비율) - 도르래의 기어비입니다. 1.0 값이 아닌 경우 한 쪽은 다른 쪽보다 덜 움직이는 대신 힘은 더 세지게 됩니다. |

RB_ConstraintInstance


속도 및 위치 드라이브

언리얼 엔진 3에는 Position(위치) 드라이브와 Velocity(속도) 드라이브, 두 가지 조인트 드라이브 방법이 제공됩니다. 위치 드라이브는 스프링 식으로, 강성 및 감쇠 속성을 지정하여 조인트가 특정 위치에 도달하게 만드는 것입니다. 속도 드라이브는 모터같은 식이며, 마찬가지로 지정된 최대 힘을 적용하여 바라는 속도로 도달하게 하는 것입니다.

Linear (선형) 세팅

  • bLinearXPositionDrive (선형 X 위치 드라이브여부) - 선형 X축상의 위치 드라이브를 켭니다.
  • bLinearXVelocityDrive (선형 X 속도 드라이브여부) - 선형 X축상의 속도 드라이브를 켭니다.
  • bLinearYPositionDrive (선형 Y 위치 드라이브여부) - 선형 Y축상의 위치 드라이브를 켭니다.
  • bLinearYVelocityDrive (선형 Y 속도 드라이브여부) - 선형 Y축상의 속도 드라이브를 켭니다.
  • bLinearZPositionDrive (선형 Z 위치 드라이브여부) - 선형 Z축상의 위치 드라이브를 켭니다.
  • bLinearZVelocityDrive (선형 Z 속도 드라이브여부) - 선형 Z축상의 속도 드라이브를 켭니다.
  • LinearPositionTarget (선형 위치 목표) - 선형 위치 드라이브를 켰을 때, 조인트가 도달하려는 상대적 선형 위치입니다.
  • LinearVelocityTarget (선형 속도 목표) - 선형 속도 드라이브를 켰을 때, 조인트가 도달하려는 상대적 선형 속도입니다.
  • LinearDriveSpring (선형 드라이브 스프링) - 선형 위치 드라이브를 켰을 때, 드라이브 스프링의 강성입니다.
  • LinearDriveDamping (선형 드라이브 감쇠) - 선형 위치 드라이브를 켰을 때, 드라이브 스프링의 감쇠입니다.
  • LinearDriveForceLimit (선형 드라이브 힘 제한) - 선형 속도 드라이브를 켰을 때, LinearVelocityTarget 값 도달을 위해 적용할 최대 힘입니다.

Angular (각형) 세팅

  • bSwingPositionDrive (흔들기 위치 드라이브여부) - 흔들기 축의 위치 드라이브를 켭니다.
  • bSwingVelocityDrive (흔들기 속도 드라이브여부) - 흔들기 축의 속도 드라이브를 켭니다.
  • bTwistPositionDrive (뒤틀기 위치 드라이브여부) - 뒤틀기 축의 위치 드라이브를 켭니다.
  • bTwistVelocityDrive (뒤틀기 위치 드라이브여부) - 뒤틀기 축의 속도 드라이브를 켭니다.
  • bAngularSlerpDrive (각형 선형보간 드라이브여부) - 고급 옵션. 조인트에 드라이브를 적용할 때 사용되는 방법을 지정합니다.
  • AngularPositionTarget (각형 위치 목표) - 각형 위치 드라이브를 켰을 때, 조인트가 도달하려는 상대적 쿼터니언입니다.
  • AngularVelocityTarget (각형 속도 목표) - 각형 속도 드라이브를 켰을 때, 조인트가 도달하려는 상대적 각형 속도입니다.
  • AngularDriveSpring (각형 드라이브 스프링) - 각형 위치 드라이브를 켰을 때, 드라이브 스프링의 강성입니다.
  • AngularDriveDamping (각형 드라이브 감쇠) - 각형 위치 드라이브를 켰을 때, 드라이브 스프링의 감쇠입니다.
  • AngularDriveForceLimit (각형 드라이브 힘 제한) - 각형 속도 드라이브를 켰을 때, AngularVelocityTarget 값 도달을 위해 적용할 최대 회전력입니다.

예제


볼-앤-소켓

볼-앤-소켓 조인트는 단순히 선형 부분은 고정되어 있고 각형 부분만 자유로이 돌아다니는 조인트입니다.

힌지

Hinge(경첩, 힌지)는 잠긴 선형 부분은 볼-앤-소켓과 같으나 흔들리는 부분 또한 잠겨 있으며, 뒤틀리는 축을 통한 회전만 가능한 것입니다.

프리즈매틱

prismatic joint(직선축, 프리즈매틱 조인트)는 선형 부분의 2/3 정도가 잠겨 있으며, 각형 부분도 잠겨 있습니다. '철길'같은 식으로 쭈욱 내려보낼 수는 있으나 회전시킬 수는 없습니다.

조인트 마찰

드라이브 세팅을 통해 조인트 마찰(friction)을 흉내낼 수 있습니다. 목표 속도를 0으로 설정한 속도 드라이브를 켜고, LinearDriveForceLimit (선형 드라이브 힘 제한) 및 AngularDriveForceLimit (각형 드라이브 힘 제한) 세팅을 사용하여 조인트가 이동에 저항하는 정도를 조절하면 됩니다.

'펀치백'

펀치백(쳐서 넘어뜨릴 수 있는 수직 막대 위에 달린 공 모양)같은 것을 흉내낼 수도 있습니다. 먼저 볼-앤-소켓 조인트를 만듭니다. 흔들기 위치 드라이브를 켜고서 쳐서 넘어뜨렸을 때 멋지게 튀어올라올 때까지 AngularDriveSpring (각형 드라이브 스프링) 및 AngularDriveDamping (각형 드라이브 감쇠)를 조절합니다. 흔들기 제한을 켜서 너무 크게 굽어지지 않게 할 수도 있겠습니다.

내려받기