ParameterStore (UE)
最終更新: 2024年9月5日
概要
CubismParameterStore を使用することで、CubismModelのパラメータとパーツの値を保存・復元することが出来ます。
CubismParameterStoreを使用しない場合、Expressionなどで値を加工した結果が正しいものにならないことがあります。
Expressionなどの値の操作を復元~保存の間で行った場合、値を操作した結果が保存されるため、復元された操作後の値に加算/乗算してしまい、期待通りの結果になりません。
値の操作を復元~保存の外で行う場合、値を操作する前の状態が復元されるため、その後の加算・乗算による値の操作が適正な結果となります。
挙動
モデルが読み込まれたタイミングで、モデルに含まれる全てのパラメータとパーツの参照を取得し、その値をキャッシュします。
void UCubismParameterStoreComponent::SaveParameters() { for (UCubismParameterComponent* Parameter : Model->Parameters) { parameterValues[Parameter->Index] = Parameter->GetParameterValue(); } for (UCubismPartComponent* Part : Model->Parts) { partOpacities[Part->Index] = Part->Opacity; } }
また、Unreal Editor上で値を操作した時も、その値がパラメータまたはパーツ単位でキャッシュされます。
void UCubismParameterStoreComponent::SaveParameterValue(int32 ParameterIndex) { parameterValues[ParameterIndex] = Model->GetParameter(ParameterIndex)->GetParameterValue(); } void UCubismParameterStoreComponent::SavePartOpacity(int32 PartIndex) { partOpacities[PartIndex] = Model->GetPart(PartIndex)->Opacity; }
キャッシュされたパラメータの値とパーツの不透明度はフレームの開始時に復元されます。
void UCubismParameterStoreComponent::LoadParameters() const { for (UCubismParameterComponent* Parameter : Model->Parameters) { Parameter->SetParameterValue(parameterValues[Parameter->Index]); } for (UCubismPartComponent* Part : Model->Parts) { Part->SetPartOpacity(partOpacities[Part->Index]); } }
値のキャッシュは限られたタイミングのみで行い、パラメータの値とパーツの不透明度の操作に関わるコンポーネントの更新は基本的に復元後に実行されるように設定しています。
これによって、これらの操作が各フレームで蓄積されないようにします。
AddTickPrerequisiteComponent(Model->ParameterStore); // must be updated after parameters loaded
この記事はお役に立ちましたか?
はいいいえ