关于 Cubism 4.2 功能的 SDK 兼容性

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

本节介绍 Cubism 4.2 SDK 的变更,以及现有 4 系列 SDK 与 Cubism 4.2 SDK 兼容性的注意事项和变更。

 

关于名字

  • 4 系列 SDK 是指 Cubism 4 SDK R4 或更早版本的 SDK。
  • 4.2 SDK 是指 Cubism 4 SDK R5 beta1 及更高版本的 SDK。

 

4.2 Editor与4.2 SDK新特性对应表

4.2 Editor新功能 SDK支持[支持时间]
正片叠底色/屏幕色 〇 对应[从beta1]
融合变形 〇 对应[从beta1]
对物理模拟的 FPS 支持 ○ 对应[来自beta3]
增强手动编辑网格 由于编辑功能,不支持 SDK
形状的特殊粘贴 由于编辑功能,不支持 SDK
参数书签 由于编辑功能,不支持 SDK
增强的自动生成四角泡沫 由于编辑功能,不支持 SDK
运行时模型轨 由于编辑功能,不支持 SDK
冻结 由于编辑功能,不支持 SDK
改进的快捷方式设定 由于编辑功能,不支持 SDK

 

关于兼容性

向后兼容性和负载

正片叠底色/屏幕色和融合变形

正片叠底色和屏幕色的默认值在RGBA中设定如下,可以得到与4系列SDK相同的绘制结果。

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

常见行为如下表所示,这次没有对该功能进行破坏性变更,并且在重新安装 SDK 时向后兼容。

此处描述了融合变形参数的负载。

Cubism Editor
版本

嵌入式
模型数据
版本

模型正片叠底色/
屏幕色颜色信息

融合变形
参数信息
4.2 SDK行为 加载
4.2 “SDK 4.2 / Cubism 4.2 兼容”

被出口
(MOC3 文件的大小因新功能而增加)

导出为融合变形参数 从模型的 Drawable 数据中获取颜色信息值 计算正片叠底色和屏幕色的负载增加。
4.2 “SDK 4.0 / Cubism 4.0 兼容”

未出口
(MOC3文件大小和4.0一样,不变)

写为没有键的普通参数 获取每个正片叠底色和屏幕色的默认值 没有不同
4.0 “SDK 4.0 / Cubism 4.0 兼容” 未出口 未出口 获取每个正片叠底色和屏幕色的默认值 没有不同

 

关于现有4系列SDK的更新和向前兼容性

从现有的4系列SDK更新到4.2 SDK时,如果您照常替换所有文件,它将没有任何问题。

请注意,现有的4系列SDK无法读取为4.2 SDK编写的模型数据。
尝试使用现有的4系列SDK读取为4.2 SDK编写的模型数据时,调用csmReviveMocInPlace函数时从CubismCore输出以下错误。

[CSM] [E]csmReviveMocInPlace is failed. The Core unsupport later than moc3 ver:[3]. This moc3 ver is [4].

 

正片叠底色、屏幕色

从定制的现有4系列SDK更新

■SDK for Unity

万一客户自定义了SDK,很难像往常一样更新,您也可以用“Cubism  Core”覆盖4.2 SDK,覆盖Framework文件夹中的以下项目来处理。

  • Live2D/Cubism/Rendering/CubismRenderer.cs
  • Live2D/Cubism/Rendering/CubismRenderController.cs
  • Live2D/Cubism/Rendering/CubismShaderVariables.cs
  • Live2D / Cubism / Core 文件夹的内容

查看Github上的compare URL以获取详细的差异内容。


SDK for Native

万一客户自定义了SDK,很难像往常一样更新,您也可以用“Cubism  Core”覆盖4.2 SDK,覆盖Framework文件夹中的以下项目来处理。

  • CubismModel
  • 各平台的CubismRenderer
  • 各平台的CubismShader
  • CubismType_D3D11.hpp(仅限 DirectX 11)
  • MetalShaderTypes.h(仅限Metal)
  • MetalShaders.metal(仅限Metal)

查看Github上的compare URL以获取详细的差异内容。


■SDK for Web

万一客户自定义了SDK,很难像往常一样更新,您也可以用“Cubism Core”覆盖4.2 SDK,覆盖Framework文件夹中的以下项目来处理。

  • cubismmodel.ts
  • cubismrenderer.ts
  • cubismrenderer_webgl.ts

查看Github上的compare URL以获取详细的差异内容。

 

现有4系列SDK的变更

使用Cubism Editor 4.2导出为4.2 SDK的模型数据时,正片叠底色和屏幕色的信息将添加到Drawable的数据中。
上述相应处理被追加到各SDK。

 

■SDK for Unity

在Unlit.shader中,追加了将正片叠底色和屏幕色反映到Fragment shader部分的公式。
除此之外,我们还定义了ColorField,允许您通过Cubism Renderer的检查器在SDK端设定任何正片叠底色和屏幕色的颜色信息。


使SDK中指定的颜色信息可用的功能

SDK基本上是设计成使用从模型数据中获取的颜色信息作为正片叠底色和屏幕色的反映处理,但SDK端直接通过代码对整个模型或单个Drawable进行指定,也可以指定颜色信息。
当使用SDK端的任意颜色信息时,在决定是否从SDK端为整个模型 = 所有 Drawables启用正片叠底色/屏幕色操作时,通过启用CubismRenderController中定义的以下属性中的标志,用户可以设定任何整个模型的正片叠底色/屏幕色。

  • 正片叠底色时为OverwriteFlagForModelMultiplyColors
  • 屏幕色时为OverwriteFlagForModelScreenColors

通过启用CubismRenderer中定义的以下属性中的标志,可以将单个Drawable的标志设定为用户指定的Drawable的任何正片叠底色/屏幕色。

  • 正片叠底色时为OverwriteFlagForMultiplyColors
  • 屏幕色时为OverwriteFlagForScreenColors

启用整个模型的标志后,所有Drawable都被设计为使用来自SDK端的任意颜色信息,而不管单个Drawable的标志状态如何。
如果整个模型的标志被禁用,则应用单个Drawable的标志状态。

SDK端使用的任何正片叠底色/屏幕色都旨在保存,无论标志状态如何。


接收Drawable的正片叠底色/屏幕色已变更的功能

如果正片叠底色/屏幕色变更与模型参数相关联,则在模型动画时可能从模型侧更改正片叠底色/屏幕色。
IsBlendColorDirty在CubismDynamicDrawableData中实现为一个功能,即可以接收此时正片叠底色和屏幕色的变更。

该功能是在模型侧变更正片叠底色或屏幕色时设置的标志,它不判断变更正片叠底色、还是屏幕色。

此外,它不适用于SDK端的正片叠底色/屏幕色信息操作。

为了处理CubismDynamicDrawableData的数据,需要使用CubismModel 的Event OnDynamicDrawableData。

 

■SDK for Native

各平台的着色器部分都追加了反映正片叠底色和屏幕色的公式。
此外,CubismModel类中提供了以下函数,用于设定SDK上任意正片叠底色和屏幕色的颜色信息。

  • SetMultiplyColor
  • SetScreenColor


使SDK中指定的颜色信息可用的功能

SDK基本上是设计成使用从模型数据中获取的颜色信息作为正片叠底色和屏幕色的反映处理,但SDK端直接通过代码对整个模型或单个Drawable进行指定,也可以指定颜色信息。
当使用SDK端的任意颜色信息时,在决定是否从SDK端为整个模型 = 所有 Drawables启用正片叠底色/屏幕色操作时,通过启用CubismModel中定义的以下函数中的标志,用户可以设定任何整个模型的正片叠底色/屏幕色。

  • 正片叠底色时为SetOverwriteFlagForModelMultiplyColors
  • 屏幕色时为SetOverwriteFlagForModelScreenColors

通过启用以下函数中的标志,可以将单个Drawable的标志设定为用户指定的Drawable的任何正片叠底色/屏幕色。

  • 正片叠底色时为SetOverwriteFlagForDrawableMultiplyColors
  • 屏幕色时为SetOverwriteFlagForDrawableScreenColors

启用整个模型的标志后,所有Drawable都被设计为使用来自SDK端的任意颜色信息,而不管单个Drawable的标志状态如何。
如果整个模型的标志被禁用,则应用单个Drawable的标志状态。

SDK端使用的任何正片叠底色/屏幕色都旨在保存,无论标志状态如何。


接收Drawable的正片叠底色/屏幕色已变更的功能

如果正片叠底色/屏幕色变更与模型参数相关联,则在模型动画时可能从模型侧更改正片叠底色/屏幕色。

这时候GetDrawableDynamicFlagBlendColorDidChange在CubismModel中实现为一个功能,即可以接收Drawable的正片叠底色和屏幕色的变更。

该功能是在模型侧变更正片叠底色或屏幕色时设置的标志,它不判断变更正片叠底色、还是屏幕色。
此外,它不适用于SDK端的正片叠底色/屏幕色信息操作。

 

■SDK for Web

在cubismrenderer_webgl.ts的着色器部分追加了反映正片叠底色和屏幕色的公式。
此外,CubismModel类中提供了以下函数,用于设定SDK上任意正片叠底色和屏幕色的颜色信息。

  • setMultiplyColorByTextureColor
  • setScreenColorByTextureColor
  • setMultiplyColorByRGBA
  • setScreenColorByRGBA

使SDK中指定的颜色信息可用的功能

SDK基本上是设计成使用从模型数据中获取的颜色信息作为正片叠底色和屏幕色的反映处理,但SDK端直接通过代码对整个模型或单个Drawable进行指定,也可以指定颜色信息。
当使用SDK端的任意颜色信息时,在决定是否从SDK端为整个模型 = 所有 Drawables启用正片叠底色/屏幕色操作时,通过启用CubismModel中定义的以下函数中的标志,用户可以设定任何整个模型的正片叠底色/屏幕色。

  • 正片叠底色时为setOverwriteFlagForModelMultiplyColors
  • 屏幕色时为setOverwriteFlagForModelScreenColors

通过启用以下函数中的标志,可以将单个Drawable的标志设定为用户指定的Drawable的任何正片叠底色/屏幕色。

  • 正片叠底色时为setOverwriteFlagForDrawableMultiplyColors
  • 屏幕色时为setOverwriteFlagForDrawableScreenColors

启用整个模型的标志后,所有Drawable都被设计为使用来自SDK端的任意颜色信息,而不管单个Drawable的标志状态如何。
如果整个模型的标志被禁用,则应用单个Drawable的标志状态。

SDK端使用的任何正片叠底色/屏幕色都旨在保存,无论标志状态如何。


接收Drawable的正片叠底色/屏幕色已变更的功能

如果正片叠底色/屏幕色变更与模型参数相关联,则在模型动画时可能从模型侧更改正片叠底色/屏幕色。

这时候getDrawableDynamicFlagBlendColorDidChange在CubismModel中实现为一个功能,即可以接收Drawable的正片叠底色和屏幕色的变更。

该功能是在模型侧变更正片叠底色或屏幕色时设置的标志,它不判断变更正片叠底色、还是屏幕色。
此外,它不适用于SDK端的正片叠底色/屏幕色信息操作。

为了处理CubismDynamicDrawableData的数据,需要使用CubismModel的Event OnDynamicDrawableData。

 

融合变形函数

现有 4 系列 SDK 的变更和加载

没有变更的特征,可以通过与常规参数相同的方式获得融合变形参数。
无需特殊操作,但正常参数组合和融合变形组合的计算成本不同。

 

正常参数倾向于以指数方式增加数据和计算成本,而融合变形倾向于线性增加。
融合变形参数的特点是可以在SDK中使用,成本比常规参数低。

 

Cubism Core API 变更

对现有 4 系列 SDK Cubism Core 的变更

在 4.2 SDK 的 Cubism Core 中,追加了一些功能,并根据上述功能追加变更了一些行为。
以下是每个追加的功能和行为变更的简要说明。

 

结构

csmVector4

这个结构里面有4个浮点成员变量。
4.2 SDK的Cubism Core API用于存档和检索正片叠底色和屏幕色数据。

 

正片叠底色/屏幕色相关

csmGetDrawableMultiplyColors

此函数将地址返回到一组正片叠底色图形网格。

 

csmGetDrawableScreenColors

此函数将地址返回到图形网格的屏幕色数组。

 

csmBlendColorDidChange

这是一个动态标志,当在 Cubism Core 侧变更正片叠底色或屏幕色时有效。

 

融合变形相关

行为变更

作用于参数数据的函数,例如 csmGetParameterCount 函数,现在支持融合变形的参数。
它的实现使得可以在不区分融合变形参数和正常参数的情况下获得它。

Cubism Core API 本身没有变更。

4.2 SDK Cubism Core追加的功能和功能详情请参考Cubism Core API参考

 

对物理模拟的 FPS 支持

在 Cubism SDK R5 beta2 之前的物理模拟中,由于 SDK 的渲染 FPS,物理行为与Editor不匹配。
从 Cubism SDK R5 beta3 开始,物理模拟的计算方法已更改,因此无论 SDK 的渲染 FPS 如何,都可以再现Editor中设置的物理模拟行为。

由于物理模拟的计算方式发生变化,需要从Editor通知SDK端物理模拟的FPS设置。
因此,在 Cubism 4.2.00 及更高版本中,导出嵌入数据时,FPS 设置会导出为 .physics3.json。

通过使用导出到 .physics3.json 的 FPS 设置,并由于渲染 FPS 随时间的差异而线性插值事件之间的状态,行为结果现在尽可能接近Editor。

如果 .physics3.json 中没有 FPS 设置项,物理模拟的行为会按照渲染 FPS 和之前一样,保证常规 SDK 中的行为。

 

将 FPS 设置从Editor导出到 .physics3.json

要使用的编辑器版本
要使用的 CMO 3 文件的状态 .physics3.json FPS 描述
4.2.00 beta2 或更早版本 全部
4.2.00 正式版或更高版本 保存为 4.1.01 或更早版本且未打开物理模拟
4.2.00  正式版或更高版本 4.1.02 beta1 或更高版本中加工物理模拟 有(※)

*:根据导出MOC3时的设置,也可以选择不在.physics3.json中描述FPS。

 

与 .physics3.json 中的 FPS 设置的行为兼容性

使用的 SDK 版本
行为兼容性
R5 beta 2 或更早版本 FPS 设置的有无不影响读取操作。
没有 FPS 设置没有任何影响。(照常)
该操作与 R5 beta2 之前的操作相同,并且没有改变。
R5 beta 3 或更高版本 如果存在 FPS 设置,请使用 FPS 设置将物理模拟行为与Editor相匹配。

如果 FPS 设置不存在,计算将与 R5 beta2 之前相同。
* 作为尽可能保持行为的错误,当与 R5 beta2 比较行为时,物理模拟的行为延迟了一帧。

 

.physics3.json 的 FPS 设置和 SDK 行为的存在/不存在

json FPS 设置状态
使用的 SDK 版本 物理模拟的行为细微差别 每次更新的计算成本 单位时间计算成本
R5 beta2 或更早版本 与渲染 FPS 相同 持续的 与渲染 FPS 成比例
R5 beta2 或更早版本 与渲染 FPS 相同 持续的 与渲染 FPS 成比例
R5 beta3 或更高版本 与渲染 FPS 相同 恒定(与 R4 相比略有增加) 与渲染 FPS 成比例
R5 beta3 或更高版本 .physics3.json FPS 设置 在 .physics3.json 中设置 FPS
因渲染 FPS 而异
(小幅减少或小幅增加)
与 .physics3.json 中设置的 FPS 成比例

 

关于 OWViewer 和 Editor 的更改

对于 Cubism Viewer(用于 OW)和 Cubism Viewer for Unity,物理模拟行为与 Cubism SDK R5 beta3 相同。

 

© 2010 - 2022 Live2D Inc.