모델 계산 순서 정렬 기능

업데이트: 2026/04/02

Cubism 5.3 SDK for Native R5 정식 버전과 for Web R5 정식 버전에서 모델의 계산 순서를 쉽게 변경할 수 있습니다.

주된 수정 내용으로서, Sample 내의 LAppModel 클래스 내 SetupModel() 함수와 Update() 함수로 실시하던 처리를 Framework의 Motion 계층에 클래스별로 이전했습니다.

Sample 내의 LAppModel 클래스 내 SetupModel() 함수로 Framework/Motion 내의 각 클래스를 호출해 Update() 함수 내에서 일괄적으로 업데이트 처리를 호출함으로써 기존 처리를 실행합니다.

처리 순서는 Framework/Motion/ICubismUpdater 클래스의 CubismUpdateOrder에서 정의됩니다.

또 Drag 조작에 의한 파라미터 업데이트 기능에 대해서는 Framework에 이전함에 있어서, 입력값 및 대상 파라미터를 가변으로 변경해 명칭을 Drag에서 Look으로 변경했습니다.

Cubism Framework의 내부 처리

모델의 계산 순서를 결정하기 위한 Framework의 내부 처리입니다.
이하의 흐름으로 처리를 실시합니다.

모델 초기화 시 각 기능(EyeBlink, Expression, Breath, Physics, LipSync, Pose, Look)에 해당하는 ICybismUpdater 파생 클래스의 인스턴스를 생성하고 CubismUpdateScheduler::AddUpdatableList()에서 등록합니다.
등록이 완료되면 CubismUpdateScheduler::SortUpdatableList()를 호출하여 목록을 실행 순서대로 정렬합니다.

void CubismUpdateScheduler::AddUpdatableList(ICubismUpdater* updatable)
{
    _cubismUpdatableList.PushBack(updatable);
    _needsSort = true;
}

void CubismUpdateScheduler::SortUpdatableList()
{
    csmVectorSort::MergeSort(_cubismUpdatableList.Begin(), _cubismUpdatableList.End(), ICubismUpdater::SortFunction);
    _needsSort = false;
}

프레임 업데이트 시에 CubismUpdateScheduler::OnLateUpdate()를 호출합니다. 스케줄러는 등록된 업데이트 클래스를 등록된 계산 순서의 오름차순으로 정렬하고 각 OnLateUpdate()를 순차적으로 실행하여 모델의 파라미터를 업데이트합니다.

void CubismUpdateScheduler::OnLateUpdate(CubismModel* model, const csmFloat32 deltaTimeSeconds)
{
    if (_needsSort)
    {
        SortUpdatableList();
    }


    for (csmUint32 i = 0; i < _cubismUpdatableList.GetSize(); ++i)
    {
        _cubismUpdatableList[i]->OnLateUpdate(model, deltaTimeSeconds);
    }
}

계산 순서는 CubismUpdateOrder 열거형으로 정의됩니다. 숫자가 작을수록 먼저 실행됩니다.

enum CubismUpdateOrder
{
    CubismUpdateOrder_EyeBlink = 200,
    CubismUpdateOrder_Expression = 300,
    CubismUpdateOrder_Look = 400,
    CubismUpdateOrder_Breath = 500,
    CubismUpdateOrder_Physics = 600,
    CubismUpdateOrder_LipSync = 700,
    CubismUpdateOrder_Pose = 800,
    CubismUpdateOrder_Max = INT_MAX
};

또한 ICybismUpdater 파생 클래스의 생성자에서 임의의 숫자를 설정할 수 있습니다.

이 기사가 도움이 되었나요?
아니요
이 기사에 관한 의견 및 요청사항을 보내 주시기 바랍니다.