모델 계산 순서 정렬 기능
업데이트: 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 파생 클래스의 생성자에서 임의의 숫자를 설정할 수 있습니다.