AnyPortrait > 메뉴얼 > 의도한 대로 IK가 동작하도록 만들기

의도한 대로 IK가 동작하도록 만들기


1.5.0

IK 체인이 IK 컨트롤러 등에 의해서 움직일 때, 캐릭터가 작업자의 의도에 맞지 않는 자세를 취하는 경우가 있을 것입니다.
IK는 자동으로 움직이는 본들을 제어하기 어렵다는 단점을 가집니다.
이 페이지에서는 작업자의 의도대로 IK가 동작하도록 유도하는 몇가지 방법들을 소개합니다.




로봇 팔이 보석을 잡는 것을 표현한 예제입니다.
1개의 End 본을 포함한 5개의 본들로 구성된 IK 체인이 있으며, 보석("Bone Gem")을 대상으로 "Position" 타입의 IK 컨트롤러가 설정되어 있습니다.




(1) Transform 모디파이어를 이용하여 보석("Bone Gem")을 움직입니다.
(2) IK 컨트롤러에 의해서 로봇 팔이 움직여서 보석을 잡는 것을 볼 수 있습니다.


그런데, IK의 결과는 저희가 기대한 것과 다릅니다.
IK 연산은 성공적이지만 그 결과는 마음에 들지 않습니다.




IK 기법은 그 특성상 명확한 답을 가지지 않습니다.
알고리즘이나 제약, 속성에 따라서 IK의 결과가 달라지게 됩니다.
동일한 위치의 Effector Bone에 대해서 로봇 팔이 다양한 자세를 취할 수 있음을 볼 수 있습니다.


IK 연산 과정에서 사용자의 의도가 반영되므로, 이를 이용하여 본들이 의도한 형태로 자세를 취하도록 만들 수 있습니다.
다음의 방법들을 확인하여 적절히 활용하면 되겠습니다.






회전 각도를 제한하기




첫번째 방법은 본의 회전 각도를 제한하는 것입니다.
사람의 팔이나 다리처럼 특정 방향으로만 회전하게 만들기 위해서는 이 방법이 필수적입니다.
(1) Bone 탭을 선택합니다.
(2) 속성을 변경하고자 하는 IK 체인 내의 본을 선택합니다.
(3) "IK Angle Constraint" 항목의 Constraint 버튼을 눌러서 속성을 활성화합니다.




(1) 회전 각도를 제한할 수 있는 UI가 나타납니다. 슬라이더나 "Min, Max" 항목을 조절합니다. "Soft Limit" 속성도 확인해둡시다.
(2) 작업 공간에서 선택된 본의 회전 범위를 볼 수 있습니다.
(3) 본의 회전 각도가 제한되면서 IK의 결과가 달라지는 것을 볼 수 있습니다.


참고
IK 컨트롤러의 결과를 보기 위해서는 "본 편집 모드"가 비활성화된 상태여야 합니다.




"Range, Min, Max" 항목의 아래에 위치한 "Soft Limit" 속성은 회전 제한을 어떻게 적용할지를 결정합니다.
"Soft Limit"를 켜면 설정된 범위를 조금 넘어가더라도 움직임이 부드럽게 보이도록 만듭니다.
반면, "Soft Limit"을 비활성화하면 각도 제한을 엄격하게 적용하는 것을 볼 수 있습니다.
(이 옵션은 IK 방식이 FABRIK인 경우에만 동작합니다.)




초기 자세를 설정하기




"초기 자세(Initial Pose)"를 설정하는 방법도 IK를 제어하는데 효과적입니다.
AnyPortrait의 IK 연산은 위의 과정을 거쳐서 수행됩니다.
먼저, "기본 자세(Base Pose)"에서 "초기 자세"로 본들을 움직입니다.
그리고 "초기 자세"를 기준으로 IK 연산을 수행합니다.
IK 알고리즘은 본들을 조금씩 움직이면서 목표를 달성하기 때문에, "초기 자세"에 따라 그 결과가 크게 바뀌게 됩니다.


사용자가 초기 자세를 설정하는 것은 IK를 제어하는 가장 효과적인 방법입니다.
다음은 초기 자세를 설정하는 옵션들에 대한 설명입니다.




초기 자세 옵션 1. Preferred Angle


초기 자세를 설정하는 첫번째 옵션은 "Preferred Angle" 입니다.
설정된 각도로 본을 회전한 상태가 "초기 자세"가 됩니다.
이 옵션은 모디파이어나 애니메이션에 무관하게 항상 일정한 자세로부터 IK 연산이 수행됩니다.




(1) 본을 선택합니다.
(2) 회전 각도 제한(IK Angle Constraint)을 활성화합니다.
(3) Initial Pose의 값을 "Preferred Angle"로 설정합니다.


참고
초기 자세는 회전 각도를 제한하는 연산과 병행하여 수행됩니다.
따라서 회전 각도 제한을 활성화해야 합니다.




(1) Preferred 슬라이더를 조절합니다.
(2) 작업 공간의 녹색 선을 통해서 Preferred Angle을 볼 수 있습니다.
(3) Preferred Angle 값에 따라서 로봇 팔의 자세가 바뀝니다.




Preferred Angle에 따라서 IK 결과가 어떻게 바뀌는지 볼 수 있습니다.




초기 자세 옵션 2. Keep Current


"Preferred Angle" 방식은 직관적이고 편리하지만, 항상 고정된 자세를 기준으로 한다는 단점이 있습니다.
만약 애니메이션에 따라서 관절의 특성이 바뀐다면, "초기 자세"를 변경할 수 있어야 합니다.
"Keep Current (FK)" 방식은 IK가 연산되기 직전의 "기본 자세(Base Pose)"를 "초기 자세"로 간주합니다.
즉, 모디파이어나 애니메이션에서 직접 본의 "초기 자세"를 설정할 수 있습니다.
(FK를 이용하는 옵션은 FABRIK 방식에서만 허용됩니다.)


참고
FK는 "Forward Kinematics"로서 "IK (Inverse Kinematics)"의 반대입니다.
키프레임 애니메이션에서 본들을 하나씩 회전시키면서 애니메이션을 만드는 기법을 의미하며, AnyPortrait의 기본적인 작업 방식은 모두 FK입니다.




(1) 본을 선택합니다.
(2) 이번에는 Initial Pose의 값을 "Keep Current (FK)"로 설정합니다.




"Keep Current (FK)" 방식을 활용하기 위해서는 IK 체인의 본들을 모디파이어나 애니메이션를 이용해서 직접 움직여야 합니다.
(1) 애니메이션을 추가하거나 선택합니다.
(2) Transform (Animation) 타임라인을 추가하거나 선택합니다.
(3) IK 체인 내의 본을 선택합니다.
(4) 해당 본을 타임라인에 등록합니다.




(1) 애니메이션의 편집 모드를 켭니다.
(2) 본을 선택한 상태로 키프레임을 추가합니다.
(3) 본을 회전시켜서 "초기 자세"를 만듭니다.




(1) 애니메이션 편집 모드를 해제합니다.
(2) 키프레임을 통해서 설정된 "초기 자세"에 맞게 IK 컨트롤러의 결과가 위와 같이 바뀐 것을 볼 수 있습니다.






초기 자세 옵션 3. Average


마지막 옵션은 "Preferred Angle"과 "Keep Current (FK)"의 중간값을 "초기 자세"로서 이용하는 "Average (Preferred+FK)" 옵션입니다.
이것은 Preferred Angle을 설정하되, 일반 본들처럼 IK 체인의 본들에 대한 애니메이션도 만들어서 IK에 반영하는 옵션입니다.




(1) 본을 선택합니다.
(2) Initial Pose의 값을 "Average (Preferred+FK)"로 설정합니다.




애니메이션 편집 화면에서 본을 회전시켜봅시다.
위와 같이 키프레임 애니메이션에서는 본이 오른쪽 위를 향합니다. (FK)
반면, 설정된 "Preferred Angle"은 오른쪽 아래를 향합니다.




IK 컨트롤러의 결과는 두개의 방향의 평균을 기준으로 연산이 되는 것을 볼 수 있습니다.




중간 본에 IK 컨트롤러를 설정하기


이 방법은 앞의 방법들과 완전히 다른 접근법을 가집니다.
IK 체인에 2개 이상에 IK 컨트롤러를 지정할 수 있는 특성을 이용하여 IK의 결과를 조절하는 것입니다. (관련 페이지)




(1) 새로운 본("Bone Helper")을 IK 체인의 중간 즈음에 추가합니다.
새 본은 IK 체인과 별개로 두어 자유롭게 움직이도록 만듭니다.




(1) IK 체인의 중간에 위치한 본을 선택합니다.
(2) 추가된 본("Bone Helper")을 대상으로 Position 타입의 IK 컨트롤러를 설정합니다. 가중치를 0보다 큰 값으로 설정합니다. 가중치 값에 따라 전체 IK 컨트롤러에 미치는 영향이 조절됩니다.




(1) 애니메이션을 선택합니다.
(2) 추가했던 본("Bone Helper")을 선택하고 타임라인에 등록합니다.
(3) 키프레임을 추가합니다.
(4) "Bone Helper"의 위치를 변경합니다.




"Bone Helper"에 따라 로봇 팔이 다르게 움직이는 것을 볼 수 있습니다.