正片叠底色/屏幕色(UE)
最終更新: 2024年9月5日
此页面包含有关Alpha版的描述。
概述
通过将正片叠底色和屏幕色应用于模型,可以实时更改色调。
通过使用Cubism SDK for Unreal Engine,无需任何追加编码即可应用在Cubism Editor上设置的正片叠底色和屏幕色。
关于Cubism Editor上的正片叠底色和屏幕色的设置,请参考Editor手册中的“正片叠底色/屏幕色”。
另外,根据需要进行编码,可以从SDK中操作正片叠底色和屏幕色,也可以进行如下操作。
- 交互式应用正片叠底色/屏幕色
- 应用未在Cubism Editor上设置的正片叠底色/屏幕色
- 禁用Cubism Editor上设置的正片叠底色/屏幕色
以下是该步骤的说明。
正片叠底色/屏幕色的操作步骤
您可以按模型、部件、图形网格三种单位操作正片叠底色和屏幕色。
为每个层提供了正片叠底色和屏幕色属性。
与要操作的对象对应的属性如下。
- 按模型单位操作时: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
可以在Editor和代码中作为相同的属性进行访问。
操作值
如果选中覆盖标志,则可以通过变更为各模型、部件和图形网格提供的MultiplyColor
及ScreenColor
值来操作各单元中的正片叠底色和屏幕色。
如果要禁用正片叠底色,请将MultiplyColor
设置为白色,如果要禁用屏幕色,请将ScreenColor
设置为黑色。
变更后的值将通过CubismRendererComponent的内部处理以如下形式应用在绘制中。
MultiplyColor
及ScreenColor
仅参考RGB值,Alpha值不用于绘制。
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); }
请问这篇文章对您有帮助吗?
是否