【Unity】 正片叠底色/屏幕色

[最后更新 2020/05/19]

通过将正片叠底色和屏幕色应用于模型,可以实时更改色调。
通过使用 SDK for Unity of Cubism 4.2 或更高版本,无需任何额外编码即可应用 Cubism Editor上设定的正片叠底色和屏幕色。
Cubism Editor 上的正片叠底色和屏幕色的设定,请参阅Editor手册中的“正片叠底色和屏幕色” 

另外,通过根据需要进行编码,可以从SDK中操作正片叠底色和屏幕色,也可以进行如下操作。

  • 交互式应用正片叠底色/屏幕色
  • 应用未在 Cubism Editor 上设定的正片叠底色/屏幕色
  • 禁用Cubism Editor上的正片叠底色/屏幕色设定

以下是该过程的说明。

 

处理程序

按照以下流程处理。

  • 模型放置
  • 正片叠底色/屏幕色覆盖标志设定
  • 正片叠底色/屏幕色设定

 

模型放置

将要设定正片叠底色和屏幕色的模型放置在任何场景中。

 

正片叠底色/屏幕色覆盖标志设定

将正片叠底色/屏幕色覆盖标志设置为true。
默认值为 false,它使用模型中的颜色信息。

覆盖标志有2种类型:[CubismRenderController] 的整个模型的标志和[CubismRenderer] 的每个Drawable 对象的标志。

这是一个示例代码。
假设脚本作为组件附加到模型的根对象。

启用应用于整个模型的覆盖标志时,即使应用于每个 Drawable 的覆盖标志无效,也可以从 SDK 操作正片叠底色和屏幕色。

[CubismRenderController] 作为组件追加到模型的根对象中,可以通过 GetComponent 获取。
[CubismRenderController] 还为模型中的每个Drawable 对象保留了[CubismRenderer] 在一个数组中,并且可以从[CubismRenderController] 中引用每个[CubismRenderer]。

 

正片叠底色/屏幕色设定

定义正片叠底色和屏幕色并在模型中设定它们。
在下面的代码中,它是设定红色为正片叠底色,绿色设定为所有Drawables的屏幕色时的设定值。
设定颜色作为 UnityEngine.Color 类型存储在每个 [CubismRenderer] 中。
在下面的例子中,设定了 RGBA,但 A 不用于计算正片叠底色和屏幕色。

 

在应用正片叠底色/屏幕色之前

应用红色作为正片叠底色和绿色作为屏幕色后

 

当颜色信息发生变更时,模型正片叠底色/屏幕色处理将在所有 Drawable 中更新。

 

Tips

这次为所有Drawable设定了相同的正片叠底色和屏幕色,但也可以为每个Drawable设定不同的正片叠底色和屏幕色。
禁用正片叠底色/屏幕色

正片叠底色(1.0、1.0、1.0、1.0)
屏幕色(0.0、0.0、0.0、1.0)

通过设定可以。

 

其他相关功能/流程

从模型端接收正片叠底色/屏幕色更新的通知

如果模型参数与正片叠底色/屏幕色变更相关联,则可以在模型动画等时从模型端更改正片叠底色/屏幕色,而不是从SDK端操作。

[CubismDynamicDrawableData]中实现了IsBlendColorDirty,这个属性可以接收此时正片叠底色和屏幕色的变更。

该属性是在模型侧变更正片叠底色或屏幕色时设置的标志,它不确定是否更改正片叠底色或屏幕色。

为了处理[CubismDynamicDrawableData]的数据,需要使用[CubismModel]的事件OnDynamicDrawableData。

功能注册

 

注册函数示例

 

 

正片叠底色/屏幕色在着色器中的应用

如果你想使用自定义着色器的正片叠底色/屏幕色,你需要追加一些实现。
在使用[CubismRenderer]和[CubismRenderController]时,可以通过在shader中追加如下属性和处理来轻松实现。

© 2010 - 2022 Live2D Inc.