Galatea のキャラクタをTVMLで用いる

 

Galateaで用いていたキャラクタをTVMLでも利用できるよう作業をしてみました.

 

作業に用いたもの:

Galatea Toolkit

TVML2

Polytrans ver 4.3.1

LightWave v9

 

他に2Dのグラフィックエディタも必要です.

なお,下記では,

(1)画像を角度を変えて連続で保存するプログラム

(2)(1)の画像を連結してテクスチャ画像を作成するプログラム

(3)galateaのファイルからstl形式を作成するプログラム

を作って利用しています.

 

■■■準備■■■

ここでは,流し目の実験で用いていた「woman02」というマスク名の女性キャラクタを用いているとします.

 

 

 

 

 

 

 

 


■■■テクスチャ用連続画像の生成■■■

テクスチャ用の画像を作成するために,Galatea FSMのみを用いて少しずつ角度を変えた連続画像を保存し,それを連結します.

 

(1)標準のFSMにも,SaveImageというイメージ保存機能がありますが,実行するとエラーしてしまいます.原因はよくわかりませんが(αチャンネル部分の配列オーバー??),一時的な対処をしてコンパイルしたものを用います.(申し訳ありませんが,変更箇所はこのページには載せません)

 

もし表示サイズを変更するときは,リソース「Resources.h」中の下記を変更してコンパイルします.大きめにすると便利です.

 

変更例

-----Resources.h----------------------------------------

 

// Face

const int DEF_WINDOW_WIDTH = 512;

const int DEF_WINDOW_HEIGHT = 512;

 

---------------------------------------------------------

 

(2)少しずつ角度を変えた画像を保存します.

 

(抜粋)

 

 

 

 

 

 

 

 


(3)連番の画像から,テクスチャ用の画像を作成します.

例:

 

(顔の右側がちょっと変,,もともとのポイントが変だったかも…)

 

2D用のグラフィックエディタ等を用いて,適切な形に編集してください.ここでは,下記の図を作成したとします.(どんな髪型を用意すればよいかまだわからないので,下記のように茶色で埋めてあります)

 

例:

 

 

 

 

 

 

 

 

 

 

 

 

 


■■■pntファイルのコンバート■■■

 

(1)Galateaで用いるpntファイル,lnkファイルから,フォーマットが簡単なstlファイルを作成します.(LightWaveで用いるlwoファイルやTVMLで用いるobjファイルへの直接の変換は難しいため)

 

ここのpntファイルとlnkファイルのフォーマットについては,ヨナタン君のページを参考にしました.

http://www.imlab.sie.dendai.ac.jp/~yonathan/pukiwiki/index.php?yonathan_galateaFSM

 

pntファイルは,マスク名woman02のキャラクタを作成したときのpntファイルです.

lnkファイルは,「fheadv2.lnk」というファイル名です(windowsの場合は,ショートカットのアイコンとして表示されてしまっていますが,これを用います).

 

woman02.stlに以下の内容のようなファイルが作成されます.

 

----- woman02.stl ----------------------------------------

solid abcdefg

facet normal -0.26309 -0.27019 0.92616

outer loop

vertex -0.00756 -0.45281 0.63047

vertex -0.02346 -0.44899 0.62707

vertex -0.00607 -0.47510 0.62439

endloop

endfacet

facet normal -0.18897 -0.22390 0.95612

outer loop

vertex -0.02346 -0.44899 0.62707

vertex -0.02857 -0.46989 0.62116

vertex -0.00607 -0.47510 0.62439

endloop

endfacet

facet normal -0.17844 -0.22685 0.95744

………………………….

…………………………

---------------------------------------------------------------

 

(2)Polytransを用いて,stl形式からlwoに変換します.Exportするときに,オプション設定で,Ena-1タブの「Output a Lightwave “Scene” file」のオプションは付けないようにします.これで,たとえばwoman02.lwoのファイルが作成されます.

 

(3)woman02.lwoのファイルをLightwaveで読み込んで正しく表示されるか確認します.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


(正面と背面が逆???)

 

 

■■■縮小■■■

TVMLに比べて大きいので縮小します.ポイントの全部を選択したあと,「変形」タブ,「拡大縮小」のあと,下の「数値入力」を選択し,数値で倍率を入力します.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


■■■テクスチャの貼り付け■■■

Lightwaveの操作に慣れていないため,下記は,少し変な方法かもしれません.他の方法(新規テクスチャ,UV作成など)もやってみたのですが,うまくいきませんでした…,下記がとりあえずできた方法です.右側の色・質感編集を選択します.すると下記のウィンドウが表示されます.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


「基本タブ」の項目「色」の右側の「T」をクリックすると,下記のウィンドウがあらわれます.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


ここでは,

投影:「円柱状」

画像:(上記で作成したテクスチャ画像)

Height Tile:「Reset

とします.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


「スケール」タブと「位置」タブを用いて,形にテクスチャ画像を合わせます.

張ったテクスチャが暗いときは,「基本」タブの「自己発光度」などを調整します.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


■■■部品分割■■■

(head)と髪(hair)の部分で分割します.(分割しないでTVMLで読み込むと,なぜかTVMLが落ちてしまいます.分割すればいいことに気がつくのに苦労しました…)

分割する点に注意します(前後でうまく含めるようにしないと隙間ができます).

 

 

 

 

 

 

 

 

 

 

 

 

 

 


できたlwoファイルをPolytransで,lwoからobjWavefront file)に変換します.変換後のファイル名をhead.obj, hair.objとします.

 

■■■TVMLデータへの結合■■■

 

ここでは,TVMLのキャラクタのmicheleを基にして,頭部のみのデータを書き換えてみます.

 

micheleのフォルダをコピーして,my_testというフォルダを作ります(中身はmicheleと同じデータ).

my_test内のmichele.bmのファイルはmy_test.bmにリネームします.

上記で作成したhead.obj, hair.objmy_testにコピーします(上書き).

また,作成したテクスチャ画像は,Polytransを起動して,「Translate!」の「Convert One Image File」でpicに変換します.

 

次に,head.mtl, hair.mtl の中身をテキストエディタで編集します.

head.mtl内のmap_Kd woman_kaoFB.picを作成したテクスチャ画像にします.

hair.mtl内のmap_Kd woman_hairC.pic を作成したテクスチャ画像にします.

head.obj, hair.obj, の中身をテキストエディタで編集します.

 

■■■目の位置を合わせる■■■

micheleは,両目が同じ設定になっているため,片目ずつに位置合わせができません.

他のキャラクタから,

 

eye_R.objeye_R.mtleye_L.objeye_L.mtlmanA_eyeA.pic

 

のファイルをmy_testフォルダにコピーします.

 

my_testフォルダ内のfcaster3.bmo内を以下のように変更します.
(数値は環境によって違います.今回試したのは下記です)

 

 

-----------------------fcaster3.bmo 変更点-------------------------------------

……………………………

# eye                eye.obj

 

eyeR                 eye_R.obj

eyeL                 eye_L.obj

 

eyeR_translate  -0.033 -0.0092 0.0830

eyeL_translate   0.034  -0.0085 0.0835

 

…………………………….

# head_translate           0.00000              0.00000              -0.00800

head_translate              0.00000              0.0100 0.01800

……………………………………………

-------------------------------------------------------------------------------------

 

 

これで,どうにかTVML上でgalateaのデータを用いることができました.

 

目の位置を合わせるのはちょっと難しいです.

 

下記は,パラメータをさらに修正したものです.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


NG

 

 

 

 

 

 

 

 

 

 

 

 


テクスチャを間違えた

 

 

 

 

 

 

 

 

 

 

 

 

 


顔面データの前後を間違えた

 

 

 

 

 

 

 

 

 

 

 

 

 

 


大きさを間違えた