正片叠底色/屏幕色(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)
OverwriteFlagForModelMultiplyColorsOverwriteFlagForModelScreenColors
- 部件(CubismPartComponent)
OverwriteFlagForPartMultiplyColorsOverwriteFlagForPartScreenColors
- 图形网格(CubismDrawableComponent)
OverwriteFlagForDrawableMultiplyColorsOverwriteFlagForDrawableScreenColors
可以在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);
}
请问这篇文章对您有帮助吗?
是否