Cubism SDK‎ > ‎プラットフォーム‎ > ‎Unity‎ > ‎Cs版‎ > ‎

描画モードの設定について

描画モードについて:

Live2D Cubism SDK for Unityでの描画モードには以下の2種類があります。
・Live2D.L2D_RENDER_DRAW_MESH_NOW (デフォルトで設定されている値)
・Live2D.L2D_RENDER_DRAW_MESH



各描画モードの特徴:

L2D_RENDER_DRAW_MESH_NOW 
メリット
  • カメラの設定に制限がない。
デメリット
  • 描画したモデルよりもカメラ側に半透明のオブジェクトが置かれた場合、半透明のオブジェクトの上に
    Live2Dモデルが描画されてしまう。
  • 描画されるモデルにレイヤーを設定できない。
    (ただし、draw()をカメラのOnPostRender()から呼び出せば、呼び出したカメラにしか映らない)
  • 照明の影響を受けない。

L2D_RENDER_DRAW_MESH
メリット
  • 半透明のオブジェクトをカメラとの間に配置しても不具合が発生しない。
  • 描画するモデルにレイヤーを設定することができる。
  • 照明の影響を反映させられる。
デメリット
  • カメラのPerspectiveの値をOrthographicにする必要があり、また、カメラに対して垂直に配置しなくてはならない。
    (各描画オブジェクトのZ値を少しずつずらしているため)
    ただし行列計算のZの設定によっては最小限にすることができる。
  • 同様の理由により、Sceneビューを3D画面で編集すると描画が崩れる。


描画モードの設定方法:

描画モードを設定する際、以下の3つを設定する必要があります。
1.setRenderMode()の引数に渡す描画モードの値
2.UnityのCameraのProjection
3.Live2Dモデルの描画命令を呼び出すタイミング(=関数)

1.
Live2DModelUnity.setRenderMode() を、モデルのロード直後、テクスチャーのロード直前までに呼び出します。
その際、以下の設定したい方の値を引数として渡してください。
  • Live2D.L2D_RENDER_DRAW_MESH_NOW (デフォルトで設定している値)
  • Live2D.L2D_RENDER_DRAW_MESH
実際のコードは以下のようになります。
  1. // モデルのロード
  2. live2DModel = Live2DModelUnity.loadModel(mocFile.bytes);
  3.  
  4. // 描画モードの設定
  5. live2DModel.setRenderMode(Live2D.L2D_RENDER_DRAW_MESH);
  6.  
  7. // テクスチャのロード
  8. for(int i = 0; i<textures.Length; i++){
  9.     live2DModel.setTexture(i,textures[i]);
  10. }


2.
Unityのエディタから、カメラを選択し、InspectorのCamera>Projectionの値を変更します。
設定したい描画モードがL2D_RENDER_DRAW_MESHの場合、必ずOrthographicに設定してください。
L2D_RENDER_DRAW_MESH_NOWの場合はどちらでも構いません。


3.
それぞれの描画モードは DrawMeshNow() 、 DrawMesh() を利用しています。
これらの関数の仕様により、Live2Dの描画命令は、それぞれの描画モードで描画命令を呼ぶタイミングを変える必要があります。
L2D_RENDER_DRAW_MESH_NOW (DrawMeshNow() を利用)の場合は OnRenderObject() もしくは OnPostRenderer() から、
L2D_RENDER_DRAW_MESH(DrawMesh() を利用)の場合は Update() から呼び出してください。

  1. void Update()
  2. {
  3.         // 描画モードがL2D_RENDER_DRAW_MESHの場合
  4.         if(live2DModel.getRenderMode()==Live2D.L2D_RENDER_DRAW_MESH) Render();
  5. }
  6.  
  7. void OnRenderObject()
  8. {
  9.         // 描画モードがL2D_RENDER_DRAW_MESH_NOWの場合
  10.         if(live2DModel.getRenderMode()==Live2D.L2D_RENDER_DRAW_MESH_NOW) Render();
  11. }
  12.  
  13. void Render()
  14. {
  15.         // Live2Dモデルの描画
  16.         live2DModel.draw();
  17. }




レイヤーの設定方法:

上記の通り、レイヤーの設定はL2D_RENDER_DRAW_MESHの時だけ設定できます。
Live2DModelUnity.setLayer() の引数に、設定したいLayerの値(デフォルトでは0)を渡してください。
レイヤーの値は、InspectorタブのLayer>Add Layer... で設定することができます。







Comments