表示補助ファイルについて

最終更新: 2022年12月8日

概要

Cubism Editor 3.3.02(2019/04/23公開) から、Cubismエディタからモデルを書き出す際に.cdi3.jsonを書き出せるようになりました。
.cdi3.jsonは、パラメータやパラメータグループ、パーツのIDと名前を紐付ける情報が記述された表示補助ファイルです。

Editor上で設定したパラメータ名やパラメータグループ名、パーツ名はSDK上でモデルを扱う際に不要な項目なためmoc3に書き出されません。
ですが、ユーザがモデルのパラメータを直接操作できるようなアプリケーションのようにパラメータの名前を表示させたい場合、.cdi3.jsonを利用することで名前を取得することが可能です。

.cdi3.jsonに記述されている内容

・Parameters
 ・パラメータID、パラメータ名(エディタで表示される名前)、所属しているパラメータグループのID
・ParameterGroups
 ・グループID、グループ名(エディタで表示される名前)、所属しているパラメータグループのID
・Parts
 ・パーツID、パーツ名(エディタで表示される名前)

※所属しているパラメータグループのID:
 パラメータグループはエディタ上では木構造として表現されますが、cdi内の構造はList構造でデータが格納されています。
 SDK上でパラメータグループの木構造を扱う場合、この情報を用いて配置を復元する必要があります。
 所属しているパラメータグループが無い(エディタ上では木構造のルート)場合、この項目は空欄になります。

.cdi3.jsonの仕様の詳細については、GitHubの CubismSpecs を参照してください。

.cdi3.jsonをパースするには、NativeではCubismCdiJson.hppから、JavaではCubismCdiJson.javaから、CubismCdiJsonクラスを使用します。
Cubism SDK for Webは自前でJSONパーサを持っているため、.cdi3.jsonを扱う実装をおこなう場合はそちらを使用してユーザ側で対応することができます。

CubismCdiJson

インスタンスの生成

    CubismCdiJson* cdiJson = new CubismCdiJson(cdi3Json, size);
    CubismCdiJson cdiJson = CubismCdiJson.create();

パラメータ(Parameters)

パラメータ関連の情報を取得するAPIは以下になります。

  • Native
    • パラメータ数:CubismCdiJson::GetParametersCount()
    • パラメータID:CubismCdiJson::GetParametersId()
    • 所属しているパラメータグループのID:CubismCdiJson::GetParametersGroupId()
    • パラメータ名:csmChar* CubismCdiJson::GetParametersName()
    // 総パラメータ数
    csmInt32 parametersCount = cdiJson->GetParametersCount();
    
    for(int i = 0; i < parametersCount; i++)
    {
        // パラメータID
        csmChar* parameterId = cdiJson->GetParametersId(i);
 
        // 所属パラメータグループID
        csmChar* parentParameterGroupId = cdiJson->GetParametersGroupId(i);
 
        // パラメータ名
        csmChar* parameterName = cdiJson->GetParametersName(i);
    }
  • Java
    • パラメータ数:CubismCdiJson.getParametersCount()
    • パラメータID:CubismCdiJson.getParametersId()
    • 所属しているパラメータグループのID:CubismCdiJson.getParametersGroupId()
    • パラメータ名:String CubismCdiJson.getParametersName()
    // 総パラメータ数
    int parametersCount = cdiJson.getParametersCount();
 
    for (int i = 0; i < parametersCount; i++) {
        // パラメータID
        String parameterId = cdiJson.getParametersId(i);
        // 所属パラメータグループID
        String parentParameterGroupId = cdiJson.getParametersGroupId(i);
        // パラメータ名
        String parameterName = cdiJson.getParametersName(i);
    }

パラメータグループ(ParameterGroups)

パラメータグループ関連の情報を取得するAPIは以下になります。

  • Native
    • パラメータグループ数:CubismCdiJson::GetParameterGroupsCount()
    • パラメータグループID:CubismCdiJson::GetParameterGroupsId()
    • そのパラメータグループの親のパラメータグループID:CubismCdiJson::GetParameterGroupsGroupId()
    • パラメータグループ名:CubismCdiJson::GetParameterGroupsName()
    // 総パラメータグループ数
    csmInt32 parameterGroupsCount = cdiJson->GetParameterGroupsCount();
    
    for(int i = 0; i < parameterGroupsCount; i++)
    {
        // パラメータグループID
        csmChar* parameterGroupId = cdiJson->GetParameterGroupsId(i);
 
        // 所属パラメータグループID
        csmChar* parentParameterGroupId = cdiJson->GetParameterGroupsGroupId(i);
 
        // パラメータグループ名
        csmChar* parameterGroupName = cdiJson->GetParameterGroupsName(i);
    }
  • Java
    • パラメータグループ数:CubismCdiJson.getParameterGroupsCount()
    • パラメータグループID:CubismCdiJson.getParameterGroupsId()
    • そのパラメータグループの親のパラメータグループID:CubismCdiJson.getParameterGroupsGroupId()
    • パラメータグループ名:CubismCdiJson.getParameterGroupsName()
    int parameterGroupsCount = cdiJson.getParameterGroupsCount();
 
    for (int i = 0; i < parameterGroupsCount; i++) {
        // パラメータグループID
        String parameterGroupId = cdiJson.getParameterGroupsId(i);
        // 所属パラメータグループID
        String parentParameterGroupId = cdiJson.getParameterGroupsGroupId(i);
        // パラメータグループ名
        String parameterGroupName = cdiJson.getParameterGroupsName(i);
    }

パーツ(Parts)

パーツ関連の情報を取得するAPIは以下になります。

  • Native
    • パーツ数:CubismCdiJson::GetPartsCount()
    • パーツID:CubismCdiJson::GetPartsId()
    • パーツ名:CubismCdiJson::GetPartsName()
    // 総パーツ数
    csmInt32 partsCount = cdiJson->GetPartsCount();
    
    for(int i = 0; i < partsCount; i++)
    {
        // パーツID
        csmChar* partId = cdiJson->GetPartsId(i);
 
        // パーツ名
        csmChar* partName = cdiJson->GetPartsName(i);
    }
  • Java
    • パーツ数:CubismCdiJson.getPartsCount()
    • パーツID:CubismCdiJson.getPartsId()
    • パーツ名:CubismCdiJson.getPartsName()
    // 総パーツ数
    int partsCount = cdiJson.getPartsCount();
 
    for (int i = 0; i < partsCount; i++) {
        // パーツID
        String partId = cdiJson.getPartsId(i);
        // パーツ名
        String partName = cdiJson.getPartsName(i);
    }

この記事に関するご意見・
ご要望をお聞かせください。