验证.motion3.json的一致性

最終更新: 2025年5月15日

Cubism SDK可以在导入.motion3.json前验证模型是否包含因篡改而导致的无效数据。

如果需要导入未指定的.motion3.json文件,建议在使用CubismMotion生成副本前确认要导入的.motion3.json文件的一致性。
但是,请注意一致性验证可能会影响性能。

为了验证模型一致性,SDK for Unity使用Framework的CubismMotion3Json.HasConsistency(),其他则使用Framework的CubismMotionJson::HasConsistency()

Cubism SDK for Native中的CubismMotion::Parse()仅在启用CSM_DEBUG宏时,才会在导入模型时验证.motion3.json文件的一致性。

// Cubism SDK for Native
void CubismMotion::Parse(const csmByte* motionJson, const csmSizeInt size)
{
    _motionData = CSM_NEW CubismMotionData;

    CubismMotionJson* json = CSM_NEW CubismMotionJson(motionJson, size);

    if (!json->IsValid())
    {
        CSM_DELETE(json);
        return;
    }

#if CSM_DEBUG
    json->HasConsistency();
#endif
…
    CSM_DELETE(json);
}

Cubism SDK for Web中的CubismMotion.parse()仅当CubismMotion._debugMode为true时,才会在导入模型时验证.motion3.json文件的一致性。

// Cubism SDK for Web
public parse(motionJson: ArrayBuffer, size: number): void {
    ...

    if (shouldCheckMotionConsistency) {
      const consistency = json.hasConsistency();
      if (!consistency) {
        json.release();
        CubismLogError('Inconsistent motion3.json.');
        return;
      }
    }

    ...

可以使用CubismMotion.setDebugMode()变更CubismMotion._debugMode。

Cubism SDK for Java中的CubismMotion.parse()仅当CubismFrameworkConfig.CSM_DEBUG为true时,才会在导入模型时验证.motion3.json文件的一致性。

// Cubism SDK for Java
private void parse(byte[] motionJson, boolean shouldCheckMotionConsistency) {
    ...

    if (shouldCheckMotionConsistency) {
        boolean consistency = json.hasConsistency();

        if (!consistency) {
            CubismDebug.cubismLogError("Inconsistent motion3.json.");
            return;
        }
    }

    ...

Cubism SDK for Unity中的CubismMotion3Json.ToAnimationClip()仅在Unity Editor中载入.motion3.json时验证文件的一致性。

// Cubism SDK for Unity
public AnimationClip ToAnimationClip(AnimationClip animationClip, bool shouldImportAsOriginalWorkflow = false, bool shouldClearAnimationCurves = false
                                                                , bool isCallFormModelJson = false, CubismPose3Json poseJson = null)
{
#if UNITY_EDITOR
    HasConsistency();
#endif

    ...
请问这篇文章对您有帮助吗?
关于本报道,敬请提出您的意见及要求。