TVML - TVprogram Making Language
TVMLプレイヤーII
TVMLプレイヤーミニ
TVMLとは何か?
TVMLの言語仕様
TVMLの使用例
TVMLの外部制御モード
キャラクター作成講座
TVML番組制作の解説書
そのほかのトピックス
ダウンロード
TV4U (TV for you)
English
キャラクター作成講座

ここでは、TVML Player II で自分のキャラクタを作成する方法について解説します。TVMLスクリプトからのキャラクタのコールは、

character: openmodel ( name = Mito, filename = "ai\ai.bm")

このように.bmという拡張子のついたファイルを指定します。上記の例ではai.bmファイルがTVMLのキャラクタデータファイルです。TVMLのキャラクタは、この「bmファイル」と呼ばれるテキストファイルと、.bmoという拡張子の付いた「bmoファイル」と呼ばれるテキストファイル、そして、CGキャラクタのモデリングデータファイルのOBJデータファイルの3種類のデータファイルから出来ています。OBJファイルに加え、bmファイルとbmoファイルを作成することでTVMLキャラクタが完成します。

注:ここでは、もっとも単純なボブマリタイプのキャラクタ作成についてのみ説明します。モーフィングで表情が変わるような複雑なキャラクタについてはこちらをご覧下さい。

手 順

1 キャラクタの作成
CGモデリングソフト(例えばLightwave3Dや六角大王)で、キャラクタの各部品(頭、胴、手、脚・・)をモデリングします。

2 ファイル変換(OBJ形式へ)
各部品のモデリングデータをOBJ形式へ変換します。

3 bmoファイルの作成
各部品のOBJデータファイル名を、TVMLの中で使われる部品名に割り当てます。テキストエディタで作成することができます。

4 bmファイルの作成
TVMLからコールできるテキストファイル(BMファイル)を作成します。これには、関節の長さや、その他アニメーションに必要な数値を記述してあります。テキストエディタで作成することができます。

5 TVMLからコールする
TVMLスクリプトからopenmodelコマンドを使って作成したBMファイルをコールします。

1. キャラクタの作成

まず、適当なモデリングツールでキャラクタをモデリングします。ボブマリ型キャラクタの骨格構造は次のようになっています。

図1 ボブマリ型キャラクタのスケルトンと各部品

スケルトン1スケルトン2


部品の数は、合計17個あります。17個分の部品を個別にモデリングし、これらを組み上げてキャラクタとしてください。このとき、同じ形状の部品は代用しても構いませんし、いらないときは省略しても構いません。ちなみに元祖BOBと元祖MARYは、足と腕の計8個が同じで首がなくて腰も手もない、という有り様です。
ボブマリ型キャラクタのリセットポジションは(4)で説明するBMファイルの中で指定しますので、モデリングする時点では、図1のスケルトンにおける各関節間の長さを意識してモデリングして下さい(図3参照)。各部品の原点が関節(ピボットポイント)になります。正面を向くように普通に(たとえばLightwave3DではZ軸の負の方向を向く)モデリングして下さい。各部品の原点との関係は次の通りです。

図2 座標原点と各部品の位置関係

足 上脚、下脚 上腕、下腕 手
胸 腰 首 顎 頭

それぞれの部品のデータを、個別にファイルに保存して下さい。これで、部品の数だけのモデリングデータファイルができることになります。

2. ファイル変換(OBJ形式へ)

1.で得られた各部品のモデリングデータを1つ1つOBJフォーマットへ変換します。使っているCGツールにOBJで保存する機能(エクスポートという)がある場合、OBJフォーマットでデータ保存してください。そういった機能が無い場合、PolyTrans(Okino Graphics社)などの変換ソフトでOBJフォーマットに変換してください。ただし、CGツールのエクスポートは簡易版が多いので注意してください。たとえば、六角大王にはOBJエクスポートが付いていますが、テクスチャーの変換はできません。テクスチャーを使った場合は、一度、たとえばLightwave3Dフォーマットに変換し、これをPolyTransでOBJへ変換する、というやり方になります。

3. bmoファイルの作成

bmoファイルは、2.で保存したOBJファイルをTVMLの中で使われる部品の名前に割り当てるために必要なテキストファイルです。次に、もっともシンプルなキャラクタBobでの例を示します。これらそれぞれに相当するOBJファイル名をbmoファイルの中に記述します。

# BOB bmo file
chest body.obj
handL handl.obj
handR handr.obj
footL foot.obj
footR foot.obj
head head.obj
legLU leg.obj
legLD leg.obj
legRU leg.obj
legRD leg.obj
armLU arm.obj
armLD darm.obj
armRU arm.obj
armRD darm.obj
jaw jaw.obj
neck neck.obj

TVMLの内部で使われている部品名は次の17個です。

head(頭)、jaw(顎)、neck(首)、
armLU(左上腕)、armLD(左前腕)、handL(左手)、
armRU(右上腕)、armRD(右前腕)、handR(右手)、
chest(胸)、hip(腰)
legLU(左上脚)、legLD(左下脚)、footL(左脚)
legRU(右上脚)、legRD(右下脚)、footR(右足)

4. bmファイルの作成

TVMLのキャラクタとして登録するために、TVMLで認識できるファイルを作成します。このファイルは拡張子.bmの付いたテキストファイルで、これをBMファイルと呼びます。ここには、関節の長さや、その他アニメーションに必要な数値が記述されています。BMファイルは次のようなものです。ここでは、プレイヤーに付属しているもっとも単純なキャラクタ「ボブ」のbob.bmを例にとって、赤茶文字でパラメータの説明をします。

BMファイルの例(bob.bm)

# BOB bm file  ←#始まりの行はコメントです

Version 1.2  ←フォーマットのバージョン番号、1.2としてください

ModelFile bob.bmo  ←bmoファイル名を指定して下さい

# 各部品の長さなどの指定 ←単位はメートル(図3参照)
thickness_foot 0.033
length_legLower 0.18
length_legUpper 0.18
length_thigh 0.051
length_chest 0.225
length_shoulder 0.108
length_armUpper 0.18
length_armLower 0.105
length_neck 0.045
ypos_eye 0.38 →目のhead原点からのy座標(lookで使用される目の位置)
zpos_eye 0.12 →目のhead原点からのz座標(lookで使用される目の位置)

# リセットポジションの姿勢の指定

initpose_hiplevel 0.348
 →リセットポジションにおける腰の高さ。この値は重要です。通常は、
initpose_hiplevel = length_legLower + length_legUpper - 微小遊び)
とします(注:thickness_footは含みません) ここで(微小遊び)を大きくすると、デフォルトのポーズでひざが曲がったような形になります。BobやMaryがこのタイプです。また、これをゼロにすると、ひざが一直線になります。ただ、いくらか値を持たせたほうが、walkやstepなどの終わりで止まり方がきれいになります。

initpose_LeftLowerArm_rotz 70.0
initpose_RightLowerArm_rotz 70.0
→リセットポジションにおける腕の角度(単位:度)を指定します。使える値は以下です
initpose_LeftUpperArm_rotx, initpose_RightUpperArm_rotx
initpose_LeftUpperArm_roty, initpose_RightUpperArm_roty
initpose_LeftUpperArm_rotz, initpose_RightUpperArm_rotz
initpose_LeftLowerArm_rotx, initpose_RightLowerArm_rotx
initpose_LeftLowerArm_roty, initpose_RightLowerArm_roty

# 歩き方のパラメータの指定
walkstopsit_speed 0.2 →歩きの速度。明確な単位がないのでカット&トライしてください
walkstopsit_stroke 0.402 →歩きの歩幅(m)
walkstopsit_waistline 0.3204 →歩いているときの腰の高さ(m) この値はinitpose_hiplevelより小さくします。walkstopsit_strokとも関係するのでカット&トライで決めます。この値が大きすぎると、歩いている時に足が宙に浮きます。小さすぎると、ひざを曲げて歩きます
walkstopsit_raise 0.081 →歩きの時の足の振り上げ高さ(m)

# 座るときのパラメータの指定
hiplevel_sit 0.18 →座ったときのおしりの高さ(m)
hipzpos_sit -0.15 →座ったときのおしりのz方向の位置(m)

# しゃべりのリップシンクのパラメータの指定
talk_mouth_degree 0.7 ←しゃべり音量に対する口開けのていど
talk_upjaw_degree 10.0 ←上顎の動きのていど
talk_elast_normal -0.002 ←しゃべりにおける体の上下のていど
talk_elast_excite -0.02 ←talkコマンドでemotion=exciteにしたときのしゃべりにおける体の上下のていど

# openmouthのパラメータの指定
openmouth_degree 1.0 ←openmouthにおける口開けのていど
openmouth_upjaw_degree 2.5 ←openmouthにおけるhead(あご以外の頭全体)の回転ていど

# shiverのパラメータの指定
shiver_degree 1.8 ←shiverにおける震えのていど

# 各種動作のスピード ←明確な単位がないのでカット&トライしてください
watch_speed 0.3 ←look、gazeにおける首回しスピード
turn_speed 0.3 ←turnにおける体回しスピード
pose_speed 0.4 ←poseにおける体回しスピード
bow_speed 1.0 ←bowにおける体回しスピード

以上がBMファイルの説明です。これら数値については、既存のファイルを参考にして、適当にモディファイして下さい。パラメータの値が変だったり、パラメータ数が足りなかったりすると、変な動きをしたり動かなかったりします。

各関節間の長さと、キャラクタのスケルトンの関係は以下の通りです。

図3 各関節間の長さと、キャラクタのスケルトンの関係

5. TVMLからコールする

以上すべての作業が終わったら、実際にスクリプトから自分のキャラクタをコールし、表示してチェックします。キャラクタのデータファイルはどこに格納しても構いませんが、TVMLプレイヤーのインストールフォルダの下のDatafiles\characterの下に新キャラクタのフォルダを作り、そこにすべて保存するようにすると、TVMLからのコールが簡単です。このようにコールします。

character: casting ( name = Rin )
character: openmodel ( modelname = myone, filename = myone\myone.bm )
character: bindmodel ( name = Rin, modelname = myone )

あとは普通に使って下さい。

character: talk ( name = Rin, text = "ボブマリ型だよ〜ん" )

プレイヤーでチェックした後、bmファイルをエディットして修正し、またプレイヤーでチェックする、というとき、再生ボタンを押すだけでは、bmファイルを再読み込みしません。プレイヤーは2度読みを防ぐため、同じファイルのbmファイルを再読み込みしないのです。そのため、面倒でも一回プレイヤーを終了して、再度起動してチェックしてください。