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;