Specification for a Standard Humanoid
標準人体の仕様書
Version 1.1 日本語版
Translated into Japanese Dec 15, 2000
by M.Endo, A.Okamoto, A.Soga, N.Kubota, T.Fukumoto, T.Kobayashi
(MDG Humanoid Action Group, Nagoya University, Japan)
Updated Dec 17, 2000 by Mamoru Endo
この仕様書はWeb3Dコンソーシアム内、ヒューマノイドアニメーションワーキンググループの許可を得て翻訳したものです。
目標
3D インターネットが成長し続けるに連れ、オンラインの仮想環境で人間を表現する必要性が増加していきます。
これを成し遂げるためには、新しい人型を簡単に生み出したり、それらを様々な方法で動画化できる
オーサリングツールと同様に、互換性のある人型のライブラリの生成が要求されます。
この報告文書はVRML97での人体の標準的な表現手法を指定しています。この標準は、
あるベンダからのオーサリング・ツールを使うことから生み出された人体を他のものを使って動画化することを見込んでいます。
H-Animの人体は、キーフレーム、インバース・キネマティクス、パフォーマンス・アニメーション・
システムなどの技術を使って動画化されます。
我々の考案する目標は次のとおりである:
- 互換性:ヒューマノイドはどんなVRML97従順なブラウザでも動作する
- 適応性:ヒューマノイドに使うアプリケーションの型に仮定を設けてはならない
- 単純化:不確かな時は捨てること。詳細は常に後で拡張すべき
これらの3つの目標により、多くの考案が追いやられる。VRML97の詳細が実行するために特定のスクリプト言語は必要としないことから、互換性の要求は我々にスクリプトの使用を避ける。適応性の要求は、スペックを公平に低いレベルに、そこではヒューマノイドの体の関節と個々の体の線分の頂点のランダムアクセスを許可した。単純化により、独断的な関節の形を扱うのではなく、特に人体に焦点を合わせた。
A. 外観
人間の体は関節(肘、手首、足首など)によって互いに結合された多くの区分
(前腕、手、足など)から成る。アプリケーションでヒューマノイドを動画化
するために、関節を呼び出すことを頻繁に行ったり、関節の角度を換えること
が必要である。アプリケーションは関節を制限し、区分を集めるための情報を
取り戻すことも必要である。
それぞれの体の区分は典型的に多角形の網により定義され、アプリケーション
はその網上の点の位置を変えることが必要である。アプリケーションは点が奇
形の集団として扱われる点についての情報を得ることも必要である。
H-Animのファイルは階層構造を形成するために編成された1組のJointノードを
含む。おのおののJointノードは他のJointノードを含むことができ、関節によ
って結合された体の部分を描くセグメント・ノードも含む。お各セグメントは
セグメントに関係がある位置を定義する幾つかのSiteノードも持つ。Siteは服
や宝石を取り付けるために使われ、インバース・キネマティクスのアプリケー
ションを実行する人に使われる。これらは、視点や見解の場所も定義するのに
使われる。
各セグメント・ノードは幾つかのDisplacerノードを持ち、これは区分内のどの
点と特別な特色や点の配置が一致するかを指定する。
ファイルは著者や著作権の情報のようなヒューマノイドに関して、人間と判断
できるデータを供給する一つのHumanoidノードを含む。このノードは全ての
Joint、Segment、Siteノードへの参照を供給し、ヒューマノイドのカバーとし
て供給する。加えて、環境内でのヒューマノイドの配置のために最上級の
Transformを供給する。
B. ノード
ヒューマノイドの生成を簡単にするため、幾つかの新しい型のノードを紹介する。
各ノードはPROTOにより定義される。
全てのノードの基本的な履行は簡単であるが、
より進んだ使用手法を見込んだ仕様を提供している。
1. Joint ノード
体の各関節はJointノードにより表される。
これは体の各部分と直属の親との関係を定義するのに使われる。
Jointは他のJointノードの子のみに、
humanoidRoot Jointの場合はhumanoidBody フィールド内の子のみになることができる。(つまりJointはSegmentの子にはなれない)
Jointノードは他の関節の特定の情報を格納するためにも使われる。
特に、name はアプリケーションの実行中に各Jointノードを見分けるために提供されている。
JointノードはH-Animのフィギュアを抑制するインバース・キネマティクスも指示している。これらは、上部、または下部の関節の制限、関節回転の制限、そして堅さ及び抵抗の値を含む。これらの制限はヒューマノイドのシーングラフ内の仕様により強要されるのではなく、情報目的のみに提供されていることに注意せよ。
Joint PROTOは以下のようなものである:
PROTO Joint [
exposedField SFVec3f center 0 0 0
exposedField MFNode children []
exposedField MFFloat llimit []
exposedField SFRotation limitOrientation 0 0 1 0
exposedField SFString name ""
exposedField SFRotation rotation 0 0 1 0
exposedField SFVec3f scale 1 1 1
exposedField SFRotation scaleOrientation 0 0 1 0
exposedField MFFloat stiffness [ 0 0 0 ]
exposedField SFVec3f translation 0 0 0
exposedField MFFloat ulimit []
]
ほとんどのフィールドはTransformノードのものに対応していることに注意せよ。
これはJoint PROTOの典型的な履行が、以下のように表されるからである:
{
Transform {
center IS center
children IS children
rotation IS rotation
scale IS scale
scaleOrientation IS scaleOrientation
translation IS translation
}
}
他の履行ももちろん可能である。唯一の必要条件は、Jointが上記に列挙したイベントを受け入れられることである。ヒューマノイドの著者やツールはどのように選択してもJointノードを実行するのは自由である。特に、ヒューマノイドを表現するために、それぞれの体の部分に独立したIndexedFaceSetを使用するより、一つの多角形の網を使用することができる。このような場合、Jointは特定の体の区分に相当する頂点を動かすための要因であり、全ての区分はこれより伝わる。
center フィールドはJointの回転の中心の位置、全てのヒューマノイドの体の記述のルートとの関係を与える。
center フィールドはイベントを受け取る意味ではないことに注意せよ。
関節の中心の位置はJointsのcenter フィールドを読むことにより利用できる。
(詳細はヒューマノイドのモデリングを参照のこと)
関節の中心の位置は全て同じ座標構造であるので、
区分の長さは親のJointの中心と子のJointの中心の間の距離を計算することにより決定できる。
指先及び足先は例外であり、セグメント内で効果が及ぶ端のサイトの位置が使用される。
(以下に示すSiteに関する詳細を参照)
Joint PROTOのulimit とllimit フィールドは関節の回転の上限及び下限を指定する。どちらのフィールドもX, Y, Zの独立した回転の限度値を含む3つのMFFloatの要素である。ulimit フィールドはX,Y,Z軸を中心とした回転の上限(つまり最大値)を提供する。llimit は同じく下限(つまり最小値)を提供する。各フィールドのデフォルトの値は[ ]、つまり関節に制限がないと仮定されていることに注意せよ。
limidOrientation フィールドはulimit とllimit の値が解釈される座標構造の方向を与える。limitOrientation は、center のexposedフィールドにより示される関節の中心位置と関係がある局部的な座標構造の方向を示す。