[Java] 正片叠底色/屏幕色

[最后更新时间:2022/10/06]

Cubism SDK for Java 目前是 alpha 版本。beta 版和正式版的规格可能会有所变化。

通过将正片叠底色和屏幕色应用于模型,可以实时更改色调。
通过使用 Cubism 4.2 或更高版本的 Cubism Java 框架,无需任何额外编码即可应用在 Cubism Editor 上设置的乘法颜色和屏幕颜色。
关于 Cubism Editor 上的正片叠底色和屏幕色的设定,请参阅Editor手册中的“正片叠底色和屏幕色”。
另外,通过根据需要进行编码,可以从SDK中操作正片叠底色和屏幕色,也可以进行如下操作。

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

以下是该过程的说明。

 

处理程序

按照以下流程处理。

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

 

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

首先,将正片叠底色/屏幕色覆盖标志设定为真。默认值为false。

public void setOverwriteFlagForModelMultiplyColors(boolean value) 和 public void setOverwriteFlagForModelScreenColors(boolean value) 在 Framework 的 CubismModel 类中定义。
Cubism SDK for Java(alpha版本)示例项目定义了一个以CubismModel为基类的LAppModel类来操作模型,上述代码中的模型是LAppModel类的一个实例。
中间 getModel() 从 LAppModel 类调用 CubismModel 类的方法。

 

正片叠底色/屏幕色设定

定义正片叠底色和屏幕色并在模型中设定它们。
在下面的代码中,它是设定红色为正片叠底色,绿色设定为所有Drawables的屏幕色时的设定值。
RGBA 可用作设定颜色。

 

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

 

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

 

通过与模型的 DrawableCount 循环,每帧为所有 Drawable 处理乘法颜色和屏幕颜色。

Tips

这次为所有Drawable设定了相同的正片叠底色和屏幕色,但也可以为每个Drawable索引设定不同的正片叠底色和屏幕色。
参数 i 是Drawable 索引。

要使Cubism Editor上设定的正片叠底色/屏幕色无效,请将正片叠底色设定为 0,将屏幕色设定为 1。如果设置,它将是每个的初始值。

 

 

模型图

通过调用Cubism SDK for Java(alpha版本)示例项目中最初执行的模型的draw()函数,由Cubism JavaFramework内部的渲染过程绘制包含乘法颜色和屏幕颜色的模型。

 

其他相关功能

获取正片叠底/屏幕色覆盖标志

设置为true时,优先考虑SDK中设置的颜色信息,设置为false时,优先考虑模型的颜色信息。

 

您还可以为每个 Drawable 获取单独的覆盖标志。

 

 

正片叠底色/屏幕色设定

上面描述了以 CubismRenderer.CubismTextureColor 作为参数的设置方法,但也有一种方法可以让您直接设置 RGBA。(输入值 0.0 ~ 1.0)

 

 

正片叠底色和屏幕色的获取

使用 CubismTextureColor 类型获取每个 Drawable 的正片叠底色和屏幕色。

参数将是 Drawable 的索引。

 

Cubism Java Framework(alpha版)的内部处理

表示正片叠底色和屏幕色是Framework的一个内部过程。
按照以下流程处理。

  1. 从 Cubism Core Java 获取模型的乘法颜色和屏幕颜色
  2. 使用覆盖标志确定获取的正片叠底色/屏幕色
  3. 将获取的乘法颜色/屏幕颜色设置为着色器程序
  4. 计算纹理颜色时将乘法颜色和屏幕颜色添加到片段着色器

Tips

模型的乘法颜色和屏幕颜色是从 Cubism Core Java 中以 RGBA 获得的,但在 Cubism Editor 中没有设置 A(透明度)。
因此,它不用于乘法颜色和屏幕颜色的计算。

 

从 Cubism Core Java 获取模型的乘法颜色和屏幕颜色

使用 Cubism Core Java 中 CubismModel 类的 API,从模型中获取一个包含所有乘法颜色和屏幕颜色的 Drawable 的数组。
它访问数组的指定索引并返回值。

 

在 Core Java 中,所有 Drawable 信息都是在加载 moc3 文件时获取的,并存储在成员数组中。
在 SDK 端设置乘法颜色和屏幕颜色时,将 setOverwriteFlagForModelMultiplyColors() 和 setOverwriteFlagForScreenColors() 设置为 true,然后使用 setMultiplyColor() 和 setScreenColor() 覆盖成员数组。
要为特定的 Drawable 设置多重颜色和屏幕颜色,请将 setOverwriteFlagForDrawableMultiplyColors() 和 setOverwriteFlagForDrawableScreenColors() 设置为 true 并执行相同的操作。

Tips

当进行上述处理时,所有后续的Drawable颜色都被设置为覆盖颜色信息。
如果您想再次使用模型的原始设定颜色,您需要追加一个单独的过程。

© 2010 - 2022 Live2D Inc.