Skeletal Controller

AnimTree 에서 에니메이션이 블랜딩 되어진 결과가 Root 노드로 전달된 후, 뼈대를 조절할 수 있는 기회가 생긴다. 이는 SkelController를 이용하여 수행되는데 이때 특정 뼈대를 이동/회전 한다던지, 팔과 다리에 IK(Limb)을 설정한다던지, 발이 지면과 자연스럽게 맞닿도록 하는 등의 처리를 할 수 있다.

종류

SkelControlSingleBone

  • 특정 Bone 을 이동translation하거나 회전rotation시킬 수 있다.
  • 이때 이동/회전을 특정 Bone 으로부터의 상대적인 위치로 놓거나 현재 위치에서부터의 상대적인 값으로써 더할add수도 있다.

SkelControlLimb

  • 팔이나 다리 등과 같이 역운동학(Inverse Kinematics) 을 적용할 수 있는 부위를 설정한다. 이 부위를 Limb 이라 칭하겠다.
  • 이 컨트롤은 제어할 수 있는 부위가 고정되어 있다. 3부위로 나뉘는 데, (1)Limb의 시작부위, (2)Joint부위, (3)Effector부위 가 그것이다. Joint부위는 팔꿈치나 무릅에 해당되며 Effector가 손이나 발에 해당된다. 프로그래머가 코드 내에서 Effector의 위치를 제어하면 그에 알맞게 시작부위나 Joint가 조절된다.
  • 반드시 3개의 Bone 이 Limb 으로써 엮어질 수 있다. 즉, 4개의 Bone 이상은 엮일 수 없다.

SkelControlFootPlacement

  • 발과 지면과 그럴듯하게 접지하도록 해준다.
  • 기본적으로 SkelControlLimb 의 확장형이다. 때문에 SkelControlLimb 의 기능을 포함하고 있다.
  • 다른 점은 Effector 가 항상 발이 되어야 한다는 것이다.

SkelControl_CCDIK

  • SkelControlLimb 보다 더 많은 단계 (3단계 이상) 의 IK Bone 이 있을 경우 사용하는 SkelControl이다.
  • 일반적으로 오징어나 문어의 촉수와 같이 많은 관절이 있는 형태를 표현하기에 적합하다.

SkelControlLookAt

현재 Bone 을 TargetLocation 을 바라보도록 세팅한다.

TargetLocation 을 바라볼 때 다음의 선택을 할 수 있다.

  1. TargetLocation 을 바로 바라보게 하는 방법
    // UnSkelControl.cpp
    void USkelControlLookAt::SetControlTargetLocation( const FVector& InTargetLocation )
    {
        TargetLocation = InTargetLocation;
    }
  2. Interpolation 으로 바라보게 하는 방법
    // UnSkelControl.cpp
    void USkelControlLookAt::InterpolateTargetLocation( FLOAT DeltaTime )
    {
        TargetLocation = VInterpTo( TargetLocation, DesiredTargetLocation, DeltaTime, TargetLocationInterpSpeed );
    }
     
    void USkelControlLookAt::SetTargetLocation( FVecotr NewTargetLocation )
    {
        DesiredTargetLocation = NewTargetLocation;
     
        if ( ControlStrength * LookAtAlpha < 0.00001f )
        {
            TargetLocation = NewTargetLocation;
        }
    }

상기 두가지 중 하나를 택일

참조