モデルの計算順序の並び替え機能

最終更新: 2026年4月2日

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 派生クラスのコンストラクタで任意の数値を設定することができます。

この記事はお役に立ちましたか?
はいいいえ
この記事に関するご意見・
ご要望をお聞かせください。