H-Anim (Humanoid Animation) は人体アニメーション記述の標準として策定されたVRML97の拡張規格です。
人体の関節等のネーミングや階層構造などが仕様化されており、EAI + Java や Java3D など外部のプログラムから制御しやすくなっています。
H-Anim 規格に則った人体データは対応した3Dチャットやゲームなどで利用可能です。
Cosmo Player, Cortona VRML Client, blaxxun Contact 3D などのVRMLブラウザーや、Shout3D ならば、H-Anim Ver1.1 に対応しています。
Rok2Worldは読み込んだ六角大王データが
CenterDiamondsを含んでいると、それを関節、股、手足頭の先端の位置などと自動的に解釈します。
また、六角大王データの各グループが体のどの部分に相当するか自動的に判断します。
そして人体情報や著作権などの設定を含めて、H-Animの仕様に沿って出力を行います。
六角大王で編集可能な2足人体のモデルが必要です。
H-Anim仕様書の Modeling the Humanoid人体のモデリングに概ね従っている必要があります。
 |
前後左右ともに中央近辺で背筋を伸ばし、向かってこちら側を向いて起立していること。
- 腕の肘と脚の膝と手首は伸ばした状態で、腕は体の真横、足の裏が地面と平行である状態を推奨します。
肘が折れ曲がって手首が肘より高い位置にあるなど、上下関係が入れ替わった状態は不可です。
- 腕と脚と背筋は地面に対して垂直に伸ばしている状態を推奨します。
ある程度斜めに傾いた状態でも構いませんが、地面と水平に伸ばしている状態は不可です。
- 足のつま先は「ハの字」に開いても構いませんが、平行に並んでいる状態を推奨します。
- 頭は真っ直ぐ正面を向いている状態を推奨します。
|
人体モデルは以下の体の部分が独立したグループである必要があります。
- 頭、首、胸、腰、尻
- 左右の肩、上腕、前肘、手首から先
- 左右の太股、ふくらはぎ、足首から先
顎と顔の表情と手足の指の関節には対応していません。 しっぽなど独自の関節の追加はできません。
体の各部分に複数のグループが使われていても構いませんが、誤判断される場合があります。
「ロングヘア」や「おさげ」などが頭から独立したグループである場合など、そのグループが体の他の部品に重なるようならば、誤判断される可能性が高くなります。
誤判断されたグループは体の別の部分として出力されます。
これを避けるには、あらかじめ人体の同じ部分はグループを統合してください。 |
Rok2Worldは「3角形の面が2枚だけのグループ」をCenterDiamondと判断します。
人体モデルに3角形の面が2枚だけのグループは使わないでください。
|
左図は解り易く人体の部分ごとに色分けしたものです。
左図の人体の場合、胴体の胸と腰と尻は独立していますが、首と肩は胸と一体化しています。 一体化した部分は動かすことができません。
|
以下の手順でCenterDiamondsを六角大王の人体モデルに組み込んでください。
CenterDiamondsのファイルはRok2Worldのダウンロードファイルに同梱されているcenter.rokです。
 |
- 人体モデルの六角大王ファイルを複製コピー、もしくは別の名前で保存して作業用ファイルを作成してください。
元のファイルは保存用としてとって置いてください。
- 作業用ファイルを六角大王で開き、[ 編集 ] [ すべて選択 ] [ 加工 ] [ 隠す ] を行い、人体モデルを変形出来ないようにしてください。
また、作業用ファイルは [ 加工 ] [ グリッドのプロパティ ] の「グリッドに配置する」のチェックを外してください。
- Rok2Worldに同梱されている center.rok を開き、[ 編集 ] [ すべて選択 ] [ 編集 ] [ コピー ] を行って、作業用ファイルへ [ 編集 ] [ 貼り付け ] を行ってください。
- 22個のCenterDiamond(菱形)をそれぞれドラッグし、人体モデルの各関節の中央、頭頂、股、手足の先端に配置してください。
- 配置が終わりましたら、セーブして六角大王を終了してください。
|
- 各CenterDiamondは一個一個グループ化されています。 グループの解除や他とのグループ化はしないでください。
- 各CenterDiamondに貼られている面の色(パレット)と枚数(2枚)には意味があります。 面の追加削除、色の塗り替えはしないでください。
- CenterDiamondの増減は行わないでください。 22個の場合のみRok2WorldはCenterDiamondsを認識いたします。
|
体の部分が一体化しているモデルのCenterDiamonds配置例
- 頭と首が一体化しているモデルの場合
中央上から2番目の CenterDiamond (頭の付け根用)を首の付け根に設置してください。
中央上から3番目の CenterDiamond (首の付け根用)を2番目のやや下に設置してください。
- 胸と腰が一体化しているモデルの場合
中央下から3番目の CenterDiamond (胸と腰との間の関節用)を
中央下から2番目の CenterDiamond (腰と尻との間の関節用)と同じ位置に設置してください。
|
- r2wb.jse ( Rok2Worldのプログラム本体 ) をテキストエディターで開き、以下の情報を書き加えて上書き保存してください。
日本語など2バイト文字と \ は書き込まないでください。
これらの書き込みは必須ではありません。
これらの情報は出力されたVRMLファイルをテキストエディターで開き、書き足しや書き直しが出来ます。
authorName |
人体モデル制作者の名前 |
authorEmail |
人体モデル制作者のメールアドレス |
copyright |
人体モデルの著作権 |
usageRestrictions |
この人体モデルを扱う際の制限事項 |
(記入例)
var hanim_authorName = "Kekenken";
var hanim_authorEmail = "kekenken@ceres.dti.ne.jp";
var hanim_copyright = "by Kekenken, All rights reserved.";
var hanim_usageRestrictions = "non-profit use only";
|
- r2wb.jse アイコンもしくはそのショートカットアイコンへCenterDiamondsが組み込まれた六角大王ファイルをドラッグ&ドロップしてください。
- ロードが完了したら、オプションを設定してください。
以下のオプションは H-Anim 変換に関わる重要なオプションです。
スケール調整
左のボックスにチェックを入れて、人体モデルの身長を設定してください。 単位は m です。
これは必須ではありませんが、設定することを推奨します。
縦位置調整
左のボックスにチェックを入れて、
0
を設定してください。 この項目は必須です。
この項目にチェックが入っていない、もしくは 0 以外を設定していると、H-Animの変換は行われません。
Humanoid情報
人体モデルの情報を設定してください。
名前は必須ですが、それ以外の設定は必須ではありません。
この設定の情報は出力されたVRMLファイルをテキストエディターで開き、書き足しや書き直しが出来ます。
名前の初期値は六角大王のファイル名から拡張子を除いた部分です。
ファイル名に2バイト文字が入っている場合は
foo chan
となります。
名前に日本語など2バイト文字と \ は設定しないでください。
Version は人体のバージョンを数値で適当に設定してください。
上記以外のオプションも併用できますが、出力されたデータを3Dチャットなど他のデータと協調して使用するならば、なんちゃってアニメ調、環境マッピング、スプライン出力は推奨しません。
- 変換するボタンをクリックしてください。
H-Animを出力できるならば、変換完了後、コンソールに
H-Anim OK! 変換完了
と表示されます。
- セーブするボタンをクリックしてセーブしてください。
セーブが終わったら、終了するボタンをクリックして終了してください。
Rok2World に同梱されている
Simple Humanoid Poser (ファイル名
shp.wrl) を使って、
出力したH-Animの関節位置や体の部位が正しく検出されているかなどを確認できます。
Simple Humanoid Poser の組み込みと実行
- H-AnimのVRMLファイルをテキストエディターで開き、その一番最後に以下の枠内のテキストを追加して、上書きセーブしてください。
EXTERNPROTO SimpleHumanoidPoser [
exposedField SFVec3f translation
exposedField SFRotation rotation
field SFBool light
field SFNode humanoid
] "shp.wrl"
DEF SHP SimpleHumanoidPoser { light FALSE humanoid USE Humanoid }
DEF SHP-PrS ProximitySensor { center 0 0 0 size 1000 1000 1000 }
ROUTE SHP-PrS.position_changed TO SHP.translation
ROUTE SHP-PrS.orientation_changed TO SHP.rotation
「なんちゃってアニメ調」で出力した場合は、枠内7行目の FALSE を TRUE に変えてください。
- shp.wrl をH-Animファイルと同じフォルダにコピーしてください。
shp.wrl をH-Animファイルと違うフォルダに置く場合、上枠内6行目の "shp.wrl"
にパスを加えるなど適当に書き換えてください。
- H-AnimファイルをVRMLブラウザーなどで開いてください。
Simple Humanoid Poser の操作
人体モデルの左に表示されている赤いボールをドラッグすると、モデルの体の各部分が関節を中心に曲がります。
- 膝のボールを左右にドラッグすると、足全体が左右に回転します。
- 腰の下のボールを左右にドラッグすると上体がねじれます。
- 胸の下のボールを左右にドラッグすると上体が左右に傾きます。
- 肩(肩甲骨)がある場合に限り、腕の上下に合わせて肩が上下に傾きます。
- 肩(肩甲骨)がある場合に限り、首(上から2番目)のボールを上下にドラッグすると肩が前後に傾きます。
Simple Humanoid Poser の仕様と使用上の注意
- H-Animの仕様で定義されている全ての関節には対応していません。
- Simple Humanoid Poser で対応している関節であっても、使用する人体モデルに関節がない場合や体の部位が一体化されている場合は、その部分のボールが表示されないこともあります。
- Jointノードの llimit, ulimit フィールド は読み込みません。
各関節の上限下限は Simple Humanoid Poser が定めたものであり、人体モデルによっては関節の動きが変な場合もあります。
- 一度に2体以上の人体モデルを同時に扱うことはできません。
- Simple Humanoid Poser とそれを利用した作品はネットでの公開を含めて営利非営利に関わらず無償にてご利用いただけます。
但し、Simple Humanoid Poser が無改造である場合に限ります。
Rok2World 出力以外の H-Anim を使う場合
Simple Humanoid Poser は H-Anim Ver1.1 に対応していれば Rok2World 出力以外のデータも必ずではありませんが扱えます。
上記に従って Simple Humanoid Poser を組み込み、上記枠内7行目の
Humanoid を Humanoidノードの DEF 定義名に合わせて変更してください。
出力されたH-Animデータについて詳しく知りたい方向けの資料です。
出力されるH-Animのノードとフィールド
ノード |
フィールド |
Humanoid |
humanoidBody, joints, segments, sites, viewpoints, version, name, info |
Joint |
name, center, children |
Segment |
name, children |
Site |
name, translation, children |
- Humanoid ノードの viewpoints フィールドには「正面から」「右から」「真上から」「斜め前から」「斜め後ろから」の5カ所から人体を見る視点が入ります。
- Joint ノードの children フィールドには、Segment ノードとツリーの枝先となる Joint ノードが入ります。
- Segment ノードの children フィールドには、人体の部位 ( USE GROUP_x ) と Site ノード が入ります。
- Site ノードの children には何も入りません。
- Displacer ノードは出力されません。
CenterDiamonds と出力される関節と体の部位の関係
関節に配置された CenterDiamond の中心座標が Joint ノードの center フィールド値となります。
頭頂、股、手足の先端に配置された CenterDiamond の中心座標が Site ノードの translation フィールド値となります。
Rok2Worldは2つのCenterDiamond間を結ぶ直線もしくは半直線とグループの中心座標との距離から、六角大王の各グループが人体のどの部位にあたるかを判断します。
(実際にはもう少し誤判断を避ける工夫がされています。)
 |
Tree |
Joint |
Segment |
Site |
name |
center |
name |
children |
name |
translation |
◎ |
HumanoidRoot |
(*1) |
sacrum |
仙骨(*6) |
┣● |
sacroiliac |
(*2) |
pelvis |
尻 |
crotch |
#0 |
┃┣● |
l_hip |
l_thigh |
左太股 |
┃┃┗● |
l_knee |
l_calf |
左ふくらはぎ |
┃┃ ┗● |
l_ankle |
l_hindfoot |
左足先 |
l_forefoot_tip |
┃┗● |
r_hip |
r_thigh |
右太股 |
┃ ┗● |
r_knee |
r_calf |
右ふくらはぎ |
┃ ┗● |
r_ankle |
r_hindfoot |
右足先 |
r_forefoot_tip |
┗● |
vl5 |
#9 |
l5 |
腰 |
┗● |
vl1 |
#10 |
l1 |
胸 |
┗● |
vt1 |
(*3) |
t1 |
頸椎(*6) |
┣● |
vc4 |
#11 |
c4 |
首 |
┃┗● |
skullbase |
#12 |
skull |
頭 |
skull_tip |
#13 |
┣● |
l_acromioclavicular |
(*4) |
l_scapula |
左肩 |
┃┗● |
l_shoulder |
#14 |
l_upperarm |
左上腕 |
┃ ┗● |
l_elbow |
#15 |
l_forearm |
左前肘 |
┃ ┗● |
l_wrist |
#16 |
l_hand |
左手 |
l_dactylion |
#17 |
┗● |
r_acromioclavicular |
(*5) |
r_scapula |
右肩 |
┗● |
r_shoulder |
#18 |
r_upperarm |
右上腕 |
┗● |
r_elbow |
#19 |
r_forearm |
右前肘 |
┗● |
r_wrist |
#20 |
r_hand |
右手 |
r_dactylion |
#21 |
基本的に仕様書付録のLOA2(表現レベル2)の省略形です。
l5, l1, t1, c4
に腰、胸、頸椎、首の部位を入れたのは私(けけんけん)の独断です。
(*1) HumanoidRoot の center フィールドには、 crotch(
#0)の translation フィールドと同じ値が出力されます。
(*2) sacroiliac の center フィールドには、 l_hip(
#1)と r_hip(
#5)の中間座標が出力されます。
(*3) vt1 の center フィールドには、 vl1(
#10)と vc4(
#11)の間を 9 : 1 に内分する座標が出力されます。
(*4) l_acromioclavicular の center フィールドには、 vc4(
#11)と l_shoulder(
#14)の間を 1 : 4 に内分する座標が出力されます。
(*5) r_acromioclavicular の center フィールドには、 vc4(
#11)と r_shoulder(
#18)の間を 1 : 4 に内分する座標が出力されます。
(*6) sacrum「仙骨」と t1「頸椎」の children フィールドには 何も出力されません。
人体モデルの情報
Humanoid ノードの info フィールドに以下の人体モデルに関する情報を出力します。
authorName |
人体モデルの製作者 |
r2wb.jse をテキストエディターで開いて設定できます。 |
authorEmail |
人体モデル製作者のメールアドレス |
copyright |
人体モデルの著作権 |
usageRestrictions |
この人体モデルを扱う際の制限事項 |
humanoidVersion |
人体モデルのバージョン |
Rok2Worldオプション設定のHumanoid情報に従います。 |
age |
人体モデルの年齢 |
gender |
人体モデルの性別 |
creationDate |
人体モデルの作成日 |
H-Animを出力した日付が自動的に加えられます。 |
height |
人体モデルの身長 |
Rok2Worldオプション設定のスケール調整に従います。 |
weight |
人体モデルの体重 |
Rok2Worldが身長から理想体重(=22×身長×身長)を計算します。 |
Rok2Worldオプション設定のHumanoid情報で入力した名前は、Humanoid ノードの name フィールドに出力されます。
入力された名前が無い、もしくは2バイト文字や \ が含まれていた場合、name フィールドは foo chan
と出力されます。