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からobj(Wavefront file)に変換します.変換後のファイル名をhead.obj, hair.objとします.
■■■TVMLデータへの結合■■■
ここでは,TVMLのキャラクタのmicheleを基にして,頭部のみのデータを書き換えてみます.
micheleのフォルダをコピーして,my_testというフォルダを作ります(中身はmicheleと同じデータ).
my_test内のmichele.bmのファイルはmy_test.bmにリネームします.
上記で作成したhead.obj, hair.objをmy_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.obj,eye_R.mtl,eye_L.obj,eye_L.mtl,manA_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集

テクスチャを間違えた

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

大きさを間違えた