.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._debugMode は CubismMotion.setDebugMode() を利用して変更することが出来ます。

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() では、shouldCheckMotionConsistencyがtrueの時のみ、.motion3.jsonのインポート時にファイルの整合性を検証します。

// Cubism SDK for Unity
public AnimationClip ToAnimationClip(AnimationClip animationClip, bool shouldImportAsOriginalWorkflow = false, bool shouldClearAnimationCurves = false
                                                                , bool isCallFormModelJson = false, CubismPose3Json poseJson = null)
{
    ...
    if (shouldCheckMotionConsistency)
    {
        var consistency = cubismMotion3Json.HasConsistency();
        if (!consistency)
        {
            return null;
        }
    }

    ...
この記事はお役に立ちましたか?
はいいいえ
この記事に関するご意見・
ご要望をお聞かせください。