EyeBlink (UE)
最終更新: 2024年9月5日
このページにはアルファ版に関する記述が含まれます。
概要
EyeBlinkは、まばたき用パラメータの現在の値に対して開閉状態の値を適用する機能です。
モデルにまばたきのパラメータを設定する方法については こちら をご覧ください。
まばたき用のパラメータの指定は、モデル自体に設定しておく他、Unreal Engine上でユーザが任意に指定することができます。
コンポーネントの扱い方
Cubism SDK for Unreal Engine における EyeBlink は CubismEyeBlinkComponent を CubismModel アクタの子コンポーネントに追加することで使用することができます。
.model3.jsonにまばたき用のパラメータが設定されている場合は、デフォルトの自動まばたき動作が反映されるため、ユーザー側での設定は不要です。
対象となるパラメータの追加方法
.model3.json にまばたき用のパラメータが設定されている場合は、インポートの際に自動的に CubismModel アクタに CubismEyeBlinkComponent が子コンポーネントとして追加されますが、手動でEyeBlinkの対象となるパラメータを追加したい場合は「詳細」タブから CubismEyeBlink を選択し、下部に表示されるリストから「Live2D Cubism」→「Ids」を開き、指定されているパラメータの名称を手動で書き換えるか、新たにインデックスを挿入してパラメータの名称を手動で書き加えてください。
パラメータの適用
CubismEyeBlinkComponent は BlendMode
で指定されたブレンド方式に基づき、 Ids
に設定されたIDに該当するすべてのパラメータに対して一律に Value
の値を適用します。
for (FString Id : Ids) { UCubismParameterComponent* Destination = Model->GetParameter(Id); if (!Destination) { continue; } switch (BlendMode) { case ECubismParameterBlendMode::Overwrite: { Destination->SetParameterValue(Value); break; } case ECubismParameterBlendMode::Additive: { Destination->AddParameterValue(Value); break; } case ECubismParameterBlendMode::Multiplicative: { Destination->MultiplyParameterValue(Value); break; } } }
まばたきの対象となるパラメータを追加・削除したい場合は、コンポーネントの Ids
にパラメータのIDを追加・削除します。
手動で値を操作する
AutoEnabled
が false に設定されている場合は、 Value
の値を外部から操作することで、指定したパラメータに対してユーザーの任意の値を一括で適用できます。
自動で値を操作する
AutoEnabled
が true に設定されている場合は、自動でまばたきのように動作する値が適用されます。この動作はCubismEyeBlinkComponentに用意されたパラメータで制御することができます。
- Mean
まばたきを行う平均間隔を指定します。 - MaximumDeviation
まばたきを行う平均間隔時間からの揺らぎ幅を指定します。
StartTime = Mean + FMath::FRandRange(-MaximumDeviation, MaximumDeviation);
- TimeScale
動作の時間スケールを指定します。値を大きくすると動作が素早くなり、小さくすると動作が遅くなります。 - ClosingPeriod
目を閉じるまでにかかる時間を指定します。
const float t = TimeScale * (Time - StartTime) / ClosingPeriod; NewValue = 1.0f - t;
- ClosedPeriod
目を閉じている時間を指定します。
const float t = TimeScale * (Time - StartTime) / ClosedPeriod; NewValue = 0.0f;
- OpeningPeriod
目を開くまでにかかる時間を指定します。
const float t = TimeScale * (Time - StartTime) / OpeningPeriod; NewValue = t;