UnitySDKとNativeSDKの比較

[最終更新 2019/02/01]

  UnitySDK NativeSDK
マスクの共有 CubismMaskControllerで指定したMaskTextureを共有 モデル内だけで共有したマスクテクスチャを使用
マスクの枚数 デフォルトで64枚のマスクが可能 デフォルトで36枚のマスクが可能
マスクの取り方 マスクサイズは固定
マスクをかける側を内包できる正方形で構成する
自動的なリサイズ
マスクをかけられる側を内包できるの矩形で
マスク形状にいっぱいに構成する
描画の方法 描画順(昇順降順)、Z値(昇順降順) 描画順昇順のみ
OWポーズ機能 あり(R11 beta1~) あり
OW表情機能 あり(R11 beta1~) あり
モーション管理 Unityのmotion3.jsonをAnimationClipに変換し、
Mecanimで行う
Cubism 3 SDK for Nativeで行う
SDK使用言語 C# C++
Live2D配置 GUI上 コード上
出力先プラットホーム Windows, macOS, iOS, Android,
PlayStation 4, PlayStation Vita, Nintendo Switch
Windows, macOS, iOS, Android,
PlayStation 4, PlayStation Vita, Nintendo Switch

 

UnityのOriginal Workflow 対応状況

Cubism 3 SDK for Unityは、2019/01/31に公開したR11からOriginal Workflowに対応しました。
R10までのバージョンでは、一部の機能が非対応となっております。

  R10以前 R11以降
EyeBlink(まばたき)
Expression
HarmonicMotion(呼吸、周期動作)
LookAt(視線追従)
MotionFade
MouthMovement(リップシンク)
Physics
Pose
Raycasting(当たり判定)
UserData

 

マスク特性の違い

Unity

Unityではマスク画像の共有はCubismMaskControllerで指定されるMaskTexture単位で共有されます。
MaskTextureは複数作成することが可能で、同種のモデルであってもMaskTextureの指定が違えば別々に使用されます。
単一のモデルの中で複数のMaskTextureを使用することはできません。

 

テクスチャ一枚あたりのマスクの取り扱い枚数はMaskTextureのSubdivisionsの項目を変えることで変更することができます。
Subdivisionsの値は軸ごとのマスク取り扱い数で、以下の表のように取り扱い数が変化します。

Subdivisions
マスク枚数 16 64 256 1024

標準ではマスクの取り扱い枚数に合わせてSubdivisionsを調整する機能はありません。
細かいマスクを必要とするモデルを扱うときには注意が必要です。

 

上の図はUnityで使用されるGloabalMaskTextureのRenderTextureをモデルと一緒に描画したものです。
右下の黒い部分がRenderTextureを描画したもので、左下から上へ下記の並びとなっています。

Mark1の目、Mark1の目、Mark1の口、名執の眼鏡、
名執の右目、名執の左目、Mark2の目、Mark2の目、
Mark2の口

 

同一のアートメッシュから生成されるマスクは統合されます。
これはマスクに使う番号を見ているわけではなく、インスタンス化したDrawableオブジェクトで比較しています。
そのため同一のモデルデータであっても複数インスタンスが存在した場合、インスタンスの数だけマスクを消費します。

マスクの上限に達した場合は実行時の登録順の遅いほうから、全面にマスクが掛かり表示が消えます。

また、マスクをかける側を内包する正方形で形状を取るため、大きなアートメッシュに小さなアートメッシュでマスクをかけても歪みにくい特性があります。

 

※AssetBundle化の際の注意

AssetBundle化した際にGloabalMaskTextureのRenderTextureが開放されない仕様があります。
メモリリークを起こさないためにチュートリアルの「AssetBundleからモデルを使用するとメモリリークする問題と対策」を確認してください。

 

NativeSDK

NativeSDKでのマスクはモデル単位で冒頭で用意されます。
詳しくは「マスクの前処理方式」を確認してください。

NativeSDKではモデルごとにモデル内の描画順での描画機能しかないため、マスクの共有はモデル単位で行われます。
Unity同様同一マスクは統合されます。比較はDrawableの番号のみで行われます。
マスクの取り扱い枚数は最大36枚で、サイズは枚数によって自動的に調整されます。

 

上の図はNativeのクリッピングテクスチャを横に描画したものです。
Unity側と違って上下が逆転していることと、暗いほうがマスクが描画されていることに注意してみてください。
描かれているのはMarkの右目、左目、口の3枚です。

 

Unity側と違い、隣接するマスクバッファの影響を受けないためにマスクをかけられる側を内包する矩形で生成します。
このため、分割枚数が多い状態で大きなアートメッシュに小さなマスクが掛かるようなモデルでは、マスク領域がつぶれてしまい描画結果に影響が出る場合があります。
小さなマスクを離れた複数のアートメッシュに対してかける場合も同様です。
マスク領域がつぶれてしまう現象が発生した場合、マスクバッファのサイズを大きくすることで改善する場合があります。
(参考:マスクバッファの動的なサイズ変更)

 

描画順管理

UnitySDK

UnitySDKでは描画順の管理をUnity機能とスクリプトによって行っています。

方式は4つ。大分して2つの方法があります。

・Z調整(Back To Front Z、Front To Back Z)

モデル内のDrawableのZ位置をずらしてZソートによって描画順を修正する方法です。
カメラの設定がPerspectiveだったり、モデルのTramsformが回転していたりすると表示が乱れる可能性があります。
180度回転すると描画順は反転します。
描画順はすべてのDrawableに共通して同じ順序が振られます。

・Order調整(Back To Front Order、Front To Back Order)

モデル内のDrawableの描画順自体を一つづつずらして修正する方法です。
カメラの設定やモデルの回転で表示は乱れません。裏面であっても描画順はカメラに向かって同一です。
CubismRenderControllerのOrder In Layerを各モデルで十分に空けない場合、
描画順が混在し、細かく切り替わる状態になります。
DrawCallが増大したり、表示位置が被った状態だとDrawableが混じった表示になることがあります。

逆にUnityのオブジェクトなどをモデルの描画に挟み込むことにより、オブジェクトを持ったように見せかけたりすることもできます。

 

NativeSDK

NativeSDKではモデルに紐づけられたRendererの中身で描画順をソートします。

モデル間で表示が混じることはありません。
モデル間では先に描画したほうが後ろに表示されます。

 

モーションの管理

UnitySDKではモーションの管理をUnity機能であるMecanimを使用して行います。
グラフィカルな環境で視覚的にモーションの組み合わせを設計できます。

NativeSDKではLive2D側のSDKでモーション管理を行います。
OWViewerと直接コードで操作する形になりますが、ポーズ機能など2.1に近い形での運用ができます。

詳しいSDKによるモーション関連の違いについては「SDKによるモーション作成の違いについて」を参照してください。

 

Copyright © 2019 Live2D Inc.