モデルとテクスチャを設定する


1.モデルの読み込み

モデルの読み込みには、Live2DModelXXX クラス(iPhoneならLive2DModelIPhone)のloadModel()を利用します。
ほとんどのプラットフォームではファイルのパスから読み込む方法とバイト配列から読み込む方法の2つが提供されています。


ここではまずモデルの読み込みを説明しますが、必要なファイルとアプリケーションの関係は下の図のようになっています。
テクスチャの数はModelerで設定した数だけ必要です。
ファイルの読み込み
図1. 必要なファイルの読み込み





実際の利用は、Androidでの実装の場合は以下の擬似コードのようになります。

  1. Live2DModelAndroid live2DModel;                                 // ・・・[1]
  2.  
  3. String      modelpath   = "haru.moc" ;                     // ・・・[2]
  4.  
  5. InputStream in          = Context.getAssets().open(modelpath) ; // ・・・[3]
  6. live2DModel             = Live2DModelAndroid.loadModel(in) ;    // ・・・[4]
  7. in.close() ;

 [1]: Live2Dのライブラリにある Live2DModelAndroid クラスをインスタンス化します。
        Live2DModel"Android"の、"Android"の部分は、その言語や端末用のSDKによって異なります。

 [2] 使用するモデルのファイル名と、そのファイルまでのパスを指定します。

 [3]: [2]で設定したパスからモデルを取得します。使用する環境によって取得の仕方は違います。

 [4]: ここでモデルをロードします。




2.テクスチャの読み込みと設定

モデルファイルとテクスチャファイルを読み込んだらその関連付けの設定が必要です。
テクスチャの設定には、setTexture() を利用します。
.

下の図はモデルデータとテクスチャデータの関連です。読み込んだ直後は関連のない独立したデータでしかないので
モデルデータからテクスチャとして使用出来るように設定します。
テクスチャ設定
図2. テクスチャの関連付け

実際の利用は、Androidでの実装の場合は以下の擬似コードのようになります。

  1. Live2DModelAndroid live2DModel;
  2.  
  3. public void setupModel( GL10 gl ) throws Exception
  4. {
  5.     String          modelpath   = "haru.moc" ;
  6.  
  7.     InputStream     in          = Context.getAssets().open(modelpath) ;
  8.     live2DModel                 = Live2DModelAndroid.loadModel(in) ;
  9.     in.close() ;
  10.  
  11.     String tex[] =
  12.             {
  13.                 "model.512/texture_00.png" ,
  14.                 "model.512/texture_01.png" ,
  15.                 "model.512/texture_02.png" ,
  16.                 "model.512/texture_03.png" ,
  17.             } ;                                                              // ・・・[1]
  18.  
  19.     for (int i = 0; i < tex.length; i++)
  20.     {
  21.         InputStream tin     = new InputStream(tex[j]) ;                      // ・・・[2]
  22.         int openGLTextureNo = UtOpenGL.loadTexture(gl, tin , true ) ;        // ・・・[3]
  23.  
  24.         live2DModel.setTexture(i, openGLTextureNo) ;                         // ・・・[4]
  25.         tin.close();
  26.     }
  27. }

 [1]: モデルに使用するテクスチャ用の画像ファイルのパスを設定します。

 [2]: 使用するテクスチャ用の画像ファイルを一枚ずつ読み込みます。

 [3]: テクスチャーに割り振られる番号を取得しています。
       これは、OpenGLでテクスチャーをロードした時に決定される名前(番号)になります。
       ※DirectX、PSPなどの環境に応じて、渡すテクスチャーの形式は代わります。

 [4]: ここでモデルとテクスチャーの対応付けを行なっています。
       第2引数の openGLTextureNo は、モデル作成時の使用順に0,1,2,となります。
       但し、モデル書き出し時に不使用のものはスキップされます。

       
       上の画像は、モデルの書き出し時の設定ダイアログです。
       印をつけた部分が、テクスチャーの書き出しに関係する項目です。

       「非表示パーツを書きだし」をチェックすると非表示状態のパーツを全て書きだします。
       Live2D Modelerで表示状態のモデルを必要最低限のテクスチャで表示する場合はチェックを外して出力して下さい。


       モデルを書き出した際のフォルダ階層は以下のようになります。
        ├ model.moc
        ├ model.512
                ├ texture_00.png ........... textureNo = 0
                ├ texture_01.png ........... textureNo = 1
                 texture_02.png ........... textureNo = 2

       openGLTextureNo は、OpenGLでテクスチャをロードした時のglGenTextures( )
       で決定される名前(番号)になります。
       ※DirectX、PSPなどの環境に応じて、渡すテクスチャの形式は代わります。


Live2Dモデルテクスチャ番号について

モデルにテクスチャを関連付けるときは、グラフィックエンジン ( OpenGLなど ) の
テクスチャ管理番号のほかにモデルテクスチャ番号が必要です。

これはLive2DModelerで設定します。
「非表示パーツを書きだし」をONにして書き出す場合は、テクスチャの設定画面でテクスチャ名の前に表示されている数字がモデルテクスチャ番号と一致します。
「非表示パーツを書きだし」をOFFにして書き出す場合は、非表示のテクスチャがスキップされるため、モデルテクスチャ番号とは一致しません。

モデルテクスチャ番号の設定
図3. モデルテクスチャ番号の設定


通常はtexture_00.pngなどのように、書きだした時にファイル名についている数字がモデルテクスチャ番号です。
setTexture( ) で指定するときに、この数字がモデル製作時とあっていないと、正常に表示されません。


※2012/11/20現在のα版をお使いの場合
2012/11/20現在のα版ではテクスチャの出力ファイル名をモデラー側で指定できるようになっております。
 この場合は、モデル書き出し時にファイル名が一致しない状態になっております。
 当面は日付順でソートした場合に先書きだされたものから00 , 01 , 02 ... としてご利用下さい。
 今後は書き出し時にモデルとの対応付けを行うための定義ファイルを出力するなど対応する予定です。

Comments