애니메이팅할 때, 아웃라이너나 컨트롤 계층구조를 변경하지 않고 엘리먼트를 함께 어태치해야 하는 경우가 있을 수 있습니다. 이러한 종류의 어태치먼트를 컨스트레인트 라고 합니다. 언리얼 엔진에서 컨스트레인트는 위치(Position), 회전(Rotation), 스케일(Scale), 부모(Parent) 및 룩앳(LookAt) 등 다양한 메서드로 나뉩니다. 이러한 메서드를 통해 어태치먼트 오프셋을 제어하고 컨스트레인트를 다시 노멀 키프레임에 굽는 등, 이러한 컨스트레인트 작동 방식을 제어하는 옵션을 설정할 수 있습니다.
이 문서에서는 시퀀서에서의 컨스트레인트 적용과 각 컨스트레인트 메서드의 다양한 워크플로에 대해 간략하게 살펴봅니다.
전제조건
- 컨트롤 릭 에셋(Control Rig Asset) 을 생성한 상태여야 합니다. 자세한 방법은 컨트롤 릭 퀵스타트 페이지를 참조하세요.
- 애니메이팅 시 컨스트레인트는 애니메이션 모드(Animation Mode) 패널을 통해 액세스할 수 있으므로 애니메이션 모드(Animation Mode) 를 활성화해야 합니다.
- 제한은 주로 시퀀서 내의 컨트롤 릭 사용에 의존하므로, 시퀀서에 대한 기본 지식이 있어야 합니다.
컨스트레인트 생성
컨스트레인트 정보와 컨스트레인트를 추가하기 위한 워크플로는 애니메이션 모드가 활성화된 경우 애니메이션 패널에 있습니다.

컨스트레인트는 두 개 이상의 오브젝트 간에 부모 - 자손 관계를 생성함으로써 확립됩니다. 새 컨스트레인트를 생성하려면, 먼저 제한할 컨트롤(자손)을 선택한 다음, 컨스트레인트 추가(+) 를 클릭하고 컨스트레인트 타입을 선택합니다. 커서가 스포이드 툴로 변경되고 이를 사용하여 뷰포트에서 제한할 오브젝트(부모)를 선택할 수 있습니다.

컨트롤 릭 엘리먼트만 제한할 수 있는 것이 아니며, 모든 오브젝트나 액터를 제한할 수 있습니다. 또한, 시퀀서를 열지 않고도 액터를 제한할 수 있습니다.
컨스트레인트를 생성한 다음에는 제한된 컨트롤에 대한 키프레임 정보를 시퀀서에서 확인할 수 있습니다. 대부분의 컨스트레인트는 컨스트레인트 활성화 시 그 자손의 현재 시각적 위치를 유지하는 보정 키프레임도 생성합니다. 이러한 보정 키프레임은 컨스트레인트 키프레임에 연결되며 타이밍을 변경하면 이를 따라갑니다.

컨스트레인트 사용
컨스트레인트는 제한된 컨트롤 선택 시 애니메이션 패널의 컨스트레인트(Constraints) 섹션에서도 확인할 수 있습니다. 이 섹션에서 새 컨스트레인트 키프레임을 생성하고 컨스트레인트의 프로퍼티를 편집하고 컨스트레인트를 다시 노멀 키프레임에 구울 수 있습니다.

오브젝트에 두 개 이상의 컨스트레인트가 적용되어 있으면, 그것도 여기에 표시됩니다. 해당 시퀀스를 재생하거나 스크럽할 때, 각 컨스트레인트는 활성화되거나 비활성화되는 경우 하이라이트되어 그 상태를 나타냅니다.

컨스트레인트 항목에 대한 버튼은 다음과 같은 기능을 제공합니다.
버튼 | 설명 |
---|---|
![]() |
시퀀서에서 현재 시간의 컨스트레인트에 대한 활성 키프레임을 생성합니다. 해당 컨스트레인트가 이미 활성화된 경우, 대신 비활성화 키프레임을 생성합니다. 제한된 오브젝트에서 같은 월드 포지션을 유지하기 위해 보정 키프레임도 생성됩니다. ![]() |
![]() |
같은 오브젝트에 여러 개의 컨스트레인트가 있는 경우, 이러한 버튼으로 목록에서 컨스트레인트를 위아래로 이동할 수 있습니다. 언리얼 엔진의 컨스트레인트는 계층형이며, 해당 컨스트레인트가 같은 채널을 애니메이팅하는 경우에 한해 목록에서 더 위에 있는 다른 컨스트레인트를 오버라이드합니다. 새 컨스트레인트는 항상 예전 컨스트레인트보다 우선순위가 높고 목록에서 더 아래쪽에 위치합니다. ![]() 컨스트레인트는 오버라이드될 수 있으므로 다른 컨스트레인트를 항상 비활성화할 필요는 없습니다. 예를 들어, 부모 컨스트레인트는 컨트롤의 모든 트랜스폼 채널을 애니메이팅하므로, 우선순위가 높은 컨스트레인트 하나만 활성화하면 기본적으로 다른 모든 컨스트레인트가 비활성화됩니다. 이 예시에서는 두 컨스트레인트가 모두 활성화되어 있지만, 루트 컨스트레인트가 목록에서 더 아래에 있고 우선순위가 높으므로 루트 컨스트레인트만 컨스트레인트 이펙트를 제공합니다. ![]() |
![]() |
이 컨스트레인트를 제거합니다. |
컨스트레인트 항목을 우클릭하면 컨텍스트 메뉴가 표시되며, 이 메뉴를 사용하여 해당 컨스트레인트 타입과 관련된 프로퍼티를 편집하고, 컨스트레인트를 굽고, 키프레임 보정을 설정할 수 있습니다.

컨스트레인트 굽기
컨스트레인트가 있는 애니메이팅을 완료한 다음에는 키프레임에 최종 결과를 구울 수 있습니다. 이는 노멀 키프레임 애니메이션으로 되돌려 컨스트레인트를 고려하지 않고 추가로 편집하려는 경우에 유용할 수 있습니다.
선택한 컨트롤을 구우려면, 컨스트레인트 항목을 우클릭하고 굽기(Bake) 를 선택합니다.

키프레임 보정
애니메이팅 시, 컨스트레인트가 활성화되거나 비활성화될 때 눈에 띄는 팝이 나타나는 경우가 있을 수 있습니다. 이러한 현상은 보통 컨스트레인트를 생성한 이후 부모의 포즈를 조정하면 원래의 보정 키프레임이 제공하는 시각적 매칭이 깨져서 발생합니다.

이 문제를 해결하려면, 문제가 되는 컨트롤을 선택하고 해당 컨스트레인트를 우클릭한 다음 키 보정(Compensate Key) 을 선택합니다. 또한, 시퀀서 플레이헤드 가 수정하려는 컨스트레인트 키프레임과 같은 시간에 있는지도 확인해야 합니다. 이렇게 하면 부모 오브젝트의 새 위치에 대한 새로운 보정 키프레임이 다시 생성됩니다.

키 보정 을 사용하여 단일 컨스트레인트 오류를 해결할 수도 있지만, 모든 키 보정(Compensate All Keys) 을 사용하여 선택 또는 플레이헤드 위치에 상관없이 시퀀스의 모든 제한된 컨트롤에 대한 모든 보정 키프레임을 다시 생성할 수도 있습니다.
다이내믹 오프셋
기본적으로, 영향을 미치는 컨스트레인트 외에도 제한된 오브젝트를 키프레이밍할 수 있습니다. 이 옵션을 비활성화하고 자손 오브젝트의 애니메이팅을 허용하지 않으려면, 컨스트레인트를 우클릭하고 다이내믹 오프셋(Dynamic Offset) 을 비활성화합니다. 이렇게 하면 제한된 오브젝트의 위치가 현재 트랜스폼에 고정되며, 이제부터는 부모 오브젝트가 이동하는 경우에만 이동됩니다.

컨스트레인트 매니저
레벨 시퀀스에서 많은 오브젝트를 제한하다 보면 컨스트레인트를 관리하고 확인하기 어려워질 수 있습니다. 레벨 안의 모든 컨스트레인트를 확인하고 관리하는 데 컨스트레인트 매니저 액터(Constraints Manager Actor) 를 사용할 수 있습니다.
처음으로 컨스트레인트를 생성하는 경우, 레벨 안에 컨스트레인트 매니저 액터 가 자동으로 생성되며, 이 액터를 선택하면 사용된 컨스트레인트가 모두 하나의 목록에 통합됩니다. 이를 통해 여러 오브젝트에 대한 다량의 컨스트레인트를 동시에 더 쉽게 확인하고 관리할 수 있습니다.

컨스트레인트 타입
컨스트레인트 추가(+) 를 클릭하면 다음과 같은 컨스트레인트 타입을 생성할 수 있습니다.

- 이동 컨스트레인트(Translation Constraints)
- 회전 컨스트레인트(Rotation Constraint)
- 스케일 컨스트레인트(Scale Constraint)
- 부모 컨스트레인트(Parent Constraint)
- 룩앳 컨스트레인트(LookAt Constraint)
이동 컨스트레인트
이동 컨스트레인트 는 이동 축을 따라서만 오브젝트를 제한합니다. 부모 위치를 따르지만, 회전이나 스케일은 따르지 않습니다.

컨스트레인트 컨텍스트 메뉴에서 오프셋 유지(Maintain Offset) 가 비활성화된 경우, 제한된 오브젝트는 컨스트레인트가 생성된 시점을 기준으로 하는 대신 절대 좌표로 부모 오브젝트 위치를 따릅니다.

회전 컨스트레인트
회전 컨스트레인트 는 회전축을 따라서만 오브젝트를 제한합니다. 부모 회전을 따르지만, 이동이나 스케일은 따르지 않습니다.

컨스트레인트 컨텍스트 메뉴에서 오프셋 유지(Maintain Offset) 가 비활성화된 경우, 제한된 오브젝트는 컨스트레인트가 생성된 시점을 기준으로 하는 대신 절대 좌표로 부모 오브젝트 회전을 따릅니다.

스케일 컨스트레인트
스케일 컨스트레인트 는 스케일 축을 따라서만 오브젝트를 제한합니다. 부모 스케일을 따르지만, 이동이나 회전은 따르지 않습니다.

컨스트레인트 컨텍스트 메뉴에서 오프셋 유지(Maintain Offset) 가 비활성화된 경우, 제한된 오브젝트는 컨스트레인트가 생성된 시점을 기준으로 하는 대신 절대 좌표로 부모 오브젝트 스케일을 따릅니다.

부모 컨스트레인트
부모 컨스트레인트 는 계층형으로 어태치된 것처럼 모든 축과 채널을 따라 부모에 오브젝트를 제한합니다.

기본적으로, 스케일은 부모 컨스트레인트에 포함되지 않습니다. 스케일을 포함하려면 컨스트레인트 항목을 우클릭하고 스케일링(Scaling) 을 활성화합니다.

다른 컨스트레인트 타입과 유사하게, 오프셋 유지 를 비활성화하면 제한된 오브젝트는 컨스트레인트가 생성된 시점을 기준으로 하는 대신 절대 좌표로 부모 트랜스폼을 따릅니다.
룩앳 컨스트레인트
룩앳 컨스트레인트 는 부모 위치 조준을 통해서만 회전축을 따라 오브젝트를 제한합니다.

컨스트레인트 항목을 우클릭하고 축(Axis) 프로퍼티를 편집하여 자손 오브젝트에 대한 조준 방향을 설정할 수 있습니다.

다른 조준 타입 어태치먼트와 달리, 룩앳 컨스트레인트는 업 벡터를 사용하지 않습니다. 대신, 롤 축을 애니메이팅하여 원하는 롤의 행동 방식을 수동으로 제어할 수 있습니다. 이러한 방식은 다른 조준 타입 어태치먼트에 흔하게 발생하는 회전 플립 문제 제거에도 유용할 수 있습니다.
