モデルの整合性を検証する
最終更新: 2024年3月26日
Cubism SDKは、モデルを読み込む前に、改ざんによってモデルに不正なデータが含められていないかを検証することができます。
不特定のMOC3ファイルが読み込まれることが想定される場合、csmInitializeModelInPlaceでcsmMocのオブジェクトを生成する前に、読み込ませるMOC3ファイルの整合性の確認を行うことを推奨します。
ただし、整合性の検証はパフォーマンスに影響する可能性がありますのでご注意ください。
モデルの整合性の検証には、 Cubism Coreの csmHasMocConsistency()
(SDK for Javaは Live2DCubismCore.hasMocConsistency()
)を使用します。
詳細は「Core API リファレンス」をご覧ください。
Cubism SDK for Nativeの CubismMoc::Create()
、Cubism SDK for Webの CubismMoc.create()
およびCubism SDK for Javaの CubismMoc.create()
では、モデルの読み込み時にMOC3ファイルの整合性を検証します。
// Cubism SDK for Native CubismMoc* CubismMoc::Create(const csmByte* mocBytes, csmSizeInt size, csmBool shouldCheckMocConsistency) { CubismMoc* cubismMoc = NULL; void* alignedBuffer = CSM_MALLOC_ALLIGNED(size, Core::csmAlignofMoc); memcpy(alignedBuffer, mocBytes, size); if (shouldCheckMocConsistency) { // .moc3の整合性を確認 csmBool consistency = HasMocConsistency(alignedBuffer, size); if (!consistency) { CSM_FREE_ALLIGNED(alignedBuffer); // 整合性が確認できなければ処理しない CubismLogError("Inconsistent MOC3."); return cubismMoc; } } ... return cubismMoc; }
// Cubism SDK for Web public static create( mocBytes: ArrayBuffer, shouldCheckMocConsistency: boolean ): CubismMoc { let cubismMoc: CubismMoc = null; if (shouldCheckMocConsistency) { // .moc3の整合性を確認 const consistency = this.hasMocConsistency(mocBytes); if (!consistency) { // 整合性が確認できなければ処理しない CubismLogError(`Inconsistent MOC3.`); return cubismMoc; } } ... return cubismMoc; }
// Cubism SDK for Java public static CubismMoc create(byte[] mocBytes, boolean shouldCheckMocConsistency) { com.live2d.sdk.cubism.core.CubismMoc moc; if (mocBytes == null) { return null; } if (shouldCheckMocConsistency) { // .moc3の整合性を確認する。 boolean consistency = hasMocConsistency(mocBytes); if (!consistency) { CubismDebug.cubismLogError("Inconsistent MOC3."); return null; } } ... return cubismMoc; }
Cubism SDKのサンプルでは、デフォルトで読み込み時に整合性の検証を行っていますが、こちらは任意で無効化することができます。
モデル読込み時の整合性の検証を無効化するには、SDK for Nativeの LAppDefine::MocConsistencyValidationEnable
、SDK for Webの LAppDefine.MOCConsistencyValidationEnable
およびSDK for Javaの LAppDefine.MOC_CONSISTENCY_VALIDATION_ENABLE
の値を変更します。
// Cubism SDK for Native // MOC3の整合性検証オプション const csmBool MocConsistencyValidationEnable = true;
// Cubism SDK for Web // MOC3の一貫性検証オプション export const MOCConsistencyValidationEnable = true;
// Cubism SDK for Java /** * MOC3の整合性を検証するかどうか。有効ならtrue。 */ public static final boolean MOC_CONSISTENCY_VALIDATION_ENABLE = true;
Unityも同様に、デフォルトでは CubismMoc.CreateFrom()
でモデルインポート時に整合性を検証します。
// Cubism SDK for Unity public static CubismMoc CreateFrom(byte[] moc3, bool shouldCheckMocConsistency = true) { if (shouldCheckMocConsistency && !HasMocConsistency(moc3)) { Debug.LogError("This Moc3 is Invalid. This model generation process is aborted and prefab is not created.\n" + $"Please check Model's Moc version. This CubismCore supported latest Moc version is `{LatestVersion}`."); return null; } var moc = CreateInstance<CubismMoc>(); moc.Bytes = moc3; return moc; }