乗算色・スクリーン色 (UE)
最終更新: 2024年9月5日
このページにはアルファ版に関する記述が含まれます。
概要
モデルに乗算色・スクリーン色を適用することで、色合いをリアルタイムに変化させることが出来ます。
Cubism Editor上で設定した乗算色・スクリーン色は Cubism SDK for Unreal Engineを利用することで、特に追加のコーディングをすることなく適用されます。
Cubism Editor上での乗算色・スクリーン色の設定はEditorマニュアルの 「乗算色・スクリーン色」 を参照してください。
また、必要に応じたコーディングを行うことでSDKから乗算色・スクリーン色を操作し、以下のような動作も可能になります。
- インタラクティブに乗算色・スクリーン色を適用する
- Cubism Editor上で設定していない乗算色・スクリーン色を適用する
- Cubism Editor上で設定した乗算色・スクリーン色を無効にする
以降はその手順の説明になります。
乗算色・スクリーン色の操作手順
モデル、パーツ、アートメッシュの3つの単位で乗算色・スクリーン色を操作することができます。
それぞれの階層ごとに乗算色・スクリーン色のプロパティが用意されています。
操作したい対象に対応するプロパティは以下のようになります。
- モデル単位で操作したい場合:CubismModelComponent のプロパティ
- パーツ単位で操作したい場合: CubismPartComponent のプロパティ
- アートメッシュ単位で操作したい場合: CubismDrawableComponent のプロパティ
以下は CubismModelComponent における関連するプロパティを示しています。
UCLASS(Blueprintable) class LIVE2DCUBISM_API UCubismModelComponent : public USceneComponent { GENERATED_BODY() public: ... UPROPERTY(EditAnywhere, Category = "Live2D Cubism") bool OverwriteFlagForModelMultiplyColors; UPROPERTY(EditAnywhere, Category = "Live2D Cubism") FLinearColor MultiplyColor = FLinearColor::White; UPROPERTY(EditAnywhere, Category = "Live2D Cubism") bool OverwriteFlagForModelScreenColors; UPROPERTY(EditAnywhere, Category = "Live2D Cubism") FLinearColor ScreenColor = FLinearColor::Black; ... }
TIPS
デフォルトでは乗算色は白、スクリーン色は黒に設定されています。
上書きフラグにチェックを入れる
SDKを通じて乗算色・スクリーン色を操作するためには、各モデル・パーツ・アートメッシュに用意されている乗算色・スクリーン色の上書きフラグが true に設定されている必要があります。
デフォルトでは false になっていることに注意してください。
それぞれの階層に対応する上書きフラグは以下の通りです。
- モデル(CubismModelComponent)
OverwriteFlagForModelMultiplyColors
OverwriteFlagForModelScreenColors
- パーツ(CubismPartComponent)
OverwriteFlagForPartMultiplyColors
OverwriteFlagForPartScreenColors
- アートメッシュ(CubismDrawableComponent)
OverwriteFlagForDrawableMultiplyColors
OverwriteFlagForDrawableScreenColors
エディタ上からもコード上からも、同じプロパティとしてアクセスすることができます。
値を操作する
上書きフラグにチェックが入っている場合は、各モデル・パーツ・アートメッシュに用意されている MultiplyColor
および ScreenColor
の値を変更することで、各単位で乗算色・スクリーン色を操作することができます。
乗算色を無効にしたい場合は MultiplyColor
に白色を設定し、スクリーン色を無効にしたい場合は ScreenColor
に黒色を設定してください。
変更した値は CubismRendererComponent の内部処理によって、以下の形で描画に反映されます。
MultiplyColor
ScreenColor
はRGB値のみが参照され、アルファ値は描画に使用されません。
for (auto Drawable : Drawables) { UMaterialInstanceDynamic* MaterialInstance = static_cast<UMaterialInstanceDynamic*>(Drawable->GetMaterial(0)); UTexture2D* MainTexture = Drawable->TextureIndex < Model->Textures.Num()? Model->Textures[Drawable->TextureIndex] : nullptr; FLinearColor BaseColor = Drawable->BaseColor; FLinearColor MultiplyColor = Drawable->MultiplyColor; FLinearColor ScreenColor = Drawable->ScreenColor; { if (Model->OverwriteFlagForModelMultiplyColors) { MultiplyColor = Model->MultiplyColor; } if (Model->OverwriteFlagForModelScreenColors) { ScreenColor = Model->ScreenColor; } } if (UCubismPartComponent* ParentPart = Model->GetPart(Drawable->ParentPartIndex)) { if (ParentPart->OverwriteFlagForPartMultiplyColors) { MultiplyColor = ParentPart->MultiplyColor; } if (ParentPart->OverwriteFlagForPartScreenColors) { ScreenColor = ParentPart->ScreenColor; } } BaseColor.A *= Model->Opacity * Drawable->Opacity; MaterialInstance->SetTextureParameterValue("MainTexture", MainTexture); MaterialInstance->SetVectorParameterValue("BaseColor", BaseColor); MaterialInstance->SetVectorParameterValue("MultiplyColor", MultiplyColor); MaterialInstance->SetVectorParameterValue("ScreenColor", ScreenColor); }