H-Anim logo

ISO/IEC FCD 19774 — Humanoid animation

Annex C

(normative)

VRML binding

VRML 绑定

--- H-Anim separator bar ---

cube C.1 介绍

此条款把此国际标准的功能映射到一个 VRML 原型集中,以使其可以在 VRML 场景中以节点的形式被实例化。VRML 在 ISO/IEC 14772 的 Part 1 中指定(见 2.[I14772-1])。

表 C.1 包含了此条款的内容表。

表 C.1 — 内容标

cube C.2 Humanoid

PROTO Humanoid [
   field           SFVec3f     bboxCenter            0 0 0
   field           SFVec3f     bboxSize              -1 -1 -1
   exposedField    SFVec3f     center                0 0 0
   exposedField    MFString    info                  [ ]
   exposedField    MFNode      joints                [ ]
   exposedField    SFString    name                  ""
   exposedField    SFRotation  rotation              0 0 1 0
   exposedField    SFVec3f     scale                 1 1 1
   exposedField    SFRotation  scaleOrientation      0 0 1 0
   exposedField    MFNode      segments              [ ]
   exposedField    MFNode      sites                 [ ]
   exposedField    MFNode      skeleton              [ ]
   exposedField    MFNode      skin                  [ ]
   exposedField    SFNode      skinCoord             NULL
   exposedField    SFNode      skinNormal            NULL
   exposedField    SFVec3f     translation           0 0 0
   exposedField    SFString    version               "2.0"
   exposedField    MFNode      viewpoints            [ ]
]


name 于为 Humanoid 节点提供了一个名称,以便应用程序实时识别这个节点。此名称也应用于此 Humanoid  节点自身的 DEF 名称,但前面将加上一个用于区别的前缀。此前缀可以为任何前缀,但对于特定某个人性化生物中的所有 Humanoid 节点的前缀应相同。应有此 name 域,以便此 Humanoid 节点能被实时识别。

H-Anim 角色的几何体可以按两种方式描述。第一种方式是在关节层级的场景图中描述,即几何体在 Humanoid 节点的 skeleton 域中描述。在关节层级的 Segment 节点中定义的几何体将把身体描述为分离的几何体块。虽然这种模式计算效率高,但是可能会导致某些破坏人性化角色对象外观的视觉异常(例如撕裂或褶皱)。第二种方式是在 Humanoid 节点的 skin 域中把 H-Anim 角色的几何体描述为一个连续的几何体块。这种模式下,点和法线矢量数据集被预先定义在 skinCoord 域和 skinNormal 域中(分别以 Coordinate 节点和 Normal 节点的形式定义)。以这种方法定义的数据将允许用 Humanoid 节点中定义的两种不同实体方式来引用。这种实体可以是在 skin 域中定义人性化生物几何体表面的一个或多个 IndexedFaceSet 节点。在大多情况下,此表面是一个单一的 IndexedFaceSet 节点。然而此表面也可以定义为多个 IndexedFaceSet 节点。基于 IndexedFaceSet 节点的执行方式以及 H-Anim 角色的构造,使用多个 IndexedFaceSet 节点把连续表面分割为多个局部表面可能会提供更好的性能。

cube C.3 Joint

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     MFInt32      skinCoordIndex      [ ]
    exposedField     MFFloat      skinCoordWeight     [ ]
    exposedField     MFFloat      stiffness           [ 0 0 0 ]
    exposedField     SFVec3f      translation         0 0 0
    exposedField     MFFloat      ulimit              [ ]
]


name 域用于实时识别关节。每个 Joint 对象应有一个匹配此 Joint 对象 name 域但在前面加上了用以区别的前缀的名称。此前缀可以为任何前缀,但对于某个特定人性化生物中的所有 Joint 节点的前缀应相同。用以区别的前缀可以用于区别在同一个呈现系统中多个人性化生物的静态路由。如果在一个 VRML 文件中如果只保存了单一的人性化生物,则前缀应为 “hanim_” (表示 Humanoid Animation 人性化动画)。

范例 左肩的名称此时应为 "hanim_l_shoulder"。 

用于静态路由的名称,一般会把人性化生物呈现系统中的 OrientationInterpolator 节点连接到关节上。应有 name 域以使应用程序可以实时地识别 Joint 节点。

cube C.4 Segment

PROTO Segment [
    field            SFVec3f      bboxCenter        0 0 0
    field            SFVec3f      bboxSize          -1 -1 -1
    exposedField     SFVec3f      centerOfMass      0 0 0
    exposedField     MFNode       children          [ ]
    exposedField     SFNode       coord             NULL
    exposedField     MFNode       displacers        [ ]
    exposedField     SFFloat      mass              -1
    exposedField     MFFloat      momentsOfInertia  [ 0 0 0
                                                      0 0 0
                                                      0 0 0 ]

    exposedField     SFString     name              ""
    eventIn          MFNode       addChildren
    eventIn          MFNode       removeChildren
]


应有 name 域以便能实时识别 Segment 节点。此 name 域将用于实时识别 Segment 对象。每个 Segment 对象应有一个匹配此 Segment 对象 name 域但在前面加上了用以区别的前缀的名称。此前缀可以为任何前缀,但对于某个特定人性化生物中的所有 Segment 节点的前缀应相同。用以区别的前缀可以用于区别在同一个呈现系统中多个人性化生物的 Segment 节点的静态路由。如果在一个 VRML 文件中如果只保存了单一的人性化生物,则前缀应为 “hanim_” (表示 Humanoid Animation 人性化动画)。

范例 对应左大腿的名称此时应为 “hanim_l_thigh”。

静态路由和 name 域应有一个名称,应用程序可以用它来实时识别 Segment 节点。

cube C.5 Site

PROTO Site [
    exposedField     SFVec3f      center            0 0 0
    exposedField     MFNode       children          [ ]
    exposedField     SFString     name              ""
    exposedField     SFRotation   rotation          0 0 1 0
    exposedField     SFVec3f      scale             1 1 1
    exposedField     SFRotation   scaleOrientation  0 0 1 0
    exposedField     SFVec3f      translation       0 0 0
    eventIn          MFNode       addChildren
    eventIn          MFNode       removeChildren
]

应有 name 域以便能实时识别 Site 节点。此 name 域将用于实时识别 Site 对象。如果用于最终受动器,Site 节点应有一个由 Segment 节点的名称附加上 “_tip” 后缀构成的名称。

范例 右手食指的最终受动器 Site 节点应被命名为 “r_index_distal_tip”,且此 Site 节点应为 “r_index_distal” Segment 对象的一个子。

用于定义摄像机位置的 Site 节点附加一个 “_view” 后缀。既不用作定义最终受动器也不用于定义摄像机位置的 Site 节点应有一个 “_pt” 后缀。应用程序需要的但在此国际标准中没有被定义的 Site 节点应有一个 “x_” 前缀。每个 Site 节点应应有一个匹配此 Site 节点 name 域但在前面加上了用以区别的前缀的名称。此前缀可以为任何前缀,但对于特定某个人性化生物中的所有 Site 节点的前缀应相同。用以区别的前缀可以用于区别在同一个呈现系统中多个人性化生物的 Site 节点的静态路由。如果在一个 VRML 文件中如果只保存了单一的人性化生物,则前缀应为 “hanim_” (表示 Humanoid Animation 人性化动画)。

范例 对应右食指的名称此时应为 "hanim_r_index_distal_tip"。  

The name is used for static routing and the name field, which shall be present, is used by applications to identify the Site node at runtime.

cube C.6 Displacer

PROTO displacer [
    exposedField MFInt32  coordIndex     [ ]
    exposedField MFVec3f  displacements  [ ]
    exposedField SFString name           ""
    exposedField SFFloat  weight         0.0
]

name 域为 Displacer 节点提供了名称,应用程序可以实时识别此名称。此名称也应用于此 Displacer 节点自身的 DEF 名称,但前面将加上一个用于区别的前缀。此前缀可以为任何前缀,但对于特定某个人性化生物中的所有 Displacer 节点的前缀应相同。应有此 name 域,以便此 Displacer 节点能被实时识别。用于指示特征的 Displacer n节点应有一个带 “_feature” 后缀的名称。用于改变特征的 Displacer 节点应应被给定一个带 “_action” 后缀的名称,而且一般还在此后缀前预先附加一个预后缀以指示动作的类型(例如 “l_eyebrow_raiser_action”)。对应特定顶点外形设置的 Displacer 节点应有一个 “_config” 后缀。

--- H-Anim separator bar ---