Extensible 3D (X3D)
Part 1: Architecture and base components

26 Humanoid Animation (H-Anim) component

人性化动画组件

--- X3D separator bar ---

cube 26.1 介绍

26.1.1 名称

这部分组件的名称是 “HAnim”。当在 COMPONENT 语句中引用这个组件时需要使用这个名称(参见 7.2.3.4 Component 语句)。

26.1.2 概述

本条款描述了 ISO/IEC 19775 标准这部分中的 Humanoid Animation (H-Anim) component (人性化动画组件)。表 26.1 列出了这一条款的主要主题。X3D 的 H-Anim 组件定义了在 X3D 中执行 H-Anim 标准(参见 2.[I19774])的绑定节点和其它规格。

表 26.1 — 本条款的主题

cube 26.2 概念

26.2.1 一般

这个组件映射 2.[I19774] 中功能性的定义到一系列的 X3D 节点。这些节点的语法在 2.[I19774] 中指定。

cube 26.3 节点参考

26.3.1 HAnimDisplacer

HAnimDisplacer : X3DGeometricPropertyNode {
  MFInt32  [in,out] coordIndex    [] [0,∞) or -1
  MFVec3f  [in,out] displacements [] [X3DCoordinateNode]
  SFString [in,out] name          ""
}

应用程序可能需要改变单独的 Segment 段的形状,在大多数的基本层中,这是通过向 HAnimSegment 节点 coord 域中的 X3DCoordinateNode 衍生节点的 point 域写入数据来完成的。

在某些情况下,应用程序可能需要识别 HAnimSegment 中指定的顶点组。例如,应用程序可能需要知道头骨 HAnimSegment 段中的那些节点包含左眼球。也可能需要每个节点移动方向的“提示”。这些信息被存储在称为 HAnimDisplacer 的节点中。特定的 HAnimSegment 的 HAnimDisplacers 存储在这个 HAnimSegment 的 displacers 域中。

每个域的描述在 2.[I19774] 中。

26.3.2 HAnimHumanoid

HAnimHumanoid : X3DChildNode {
  SFVec3f    [in,out] center           0 0 0    (-∞,∞)
  MFNode     [in,out] humanoidBody     []       [HumanoidRoot]
  MFString   [in,out] info             []
  MFNode     [in,out] joints           []       [HAnimJoint]
  SFString   [in,out] name             ""
  SFRotation [in,out] rotation         0 0 1 0  (-∞,∞)|[-1,1]
  SFVec3f    [in,out] scale            1 1 1    (0,∞)
  SFRotation [in,out] scaleOrientation 0 0 1 0  (-∞,∞)|[-1,1]
  MFNode     [in,out] segments         []       [HAnimSegment]
  MFNode     [in,out] sites            []       [HAnimSite]
  MFNode     [in,out] skeleton         []       [HAnimJoint]
  MFNode     [in,out] skin             []       [IndexedFaceSet]
  SFNode     [in,out] skinCoord        NULL     [X3DCoordinateNode]
  SFNode     [in,out] skinNormal       NULL     [X3DNormalNode]
  SFVec3f    [in,out] translation      0 0 0    (-∞,∞)
  SFString   [in,out] version          ""
  MFNode     [in,out] viewpoints       []       [Viewpoint]
  SFVec3f    []       bboxCenter       0 0 0    (-∞,∞)
  SFVec3f    []       bboxSize         -1 -1 -1 (0,∞)|[-1 -1 -1]
}

HAnimHumanoid 节点作为整个人性化对象的容器,用来存储涉及的 HAnimJoint、HAnimSegment、Viewpoint 节点,除此之外还诸如作者和版权信息之类的可读信息。它还提供简便的在环境中移动人性化对象的方法。

每个域的描述在 2.[I19774] 中。

26.3.3 HAnimJoint

HAnimJoint : X3DGroupingNode {
  MFNode     [in]     addChildren               [HAnimJoint,HAnimSegment,HAnimSite]
  MFNode     [in]     removeChildren            [HAnimJoint,HAnimSegment,HAnimSite]
  SFVec3f    [in,out] center           0 0 0    (-∞,∞)
  MFNode     [in,out] children         []       [HAnimJoint,HAnimSegment,HAnimSite]
  SFRotation [in,out] limitOrientation 0 0 1 0  (-∞,∞)|[-1,1]
  MFFloat    [in,out] llimit           []       (-∞,∞)
  SFString   [in,out] name             ""
  SFRotation [in,out] rotation         0 0 1 0  (-∞,∞)|[-1,1]
  SFVec3f    [in,out] scale            1 1 1    (0,∞)
  SFRotation [in,out] scaleOrientation 0 0 1 0  (-∞,∞)|[-1,1]
  MFInt32    [in,out] skinCoordIndex   []
  MFFloat    [in,out] skinCoordWeight  []
  MFFloat    [in,out] stiffness        [0 0 0]  [0,1]
  SFVec3f    [in,out] translation      0 0 0    (-∞,∞)
  MFFloat    [in,out] ulimit           []       (-∞,∞)
  SFVec3f    []       bboxCenter       0 0 0    (-∞,∞)
  SFVec3f    []       bboxSize         -1 -1 -1 (0,∞)|[-1 -1 -1]
}

身体中的每个关节由一个 HAnimJoint 节点表现,HAnimJoint 节点用来定义身体每一段和其相连的父一层的关系。

一个 HAnimJoint 可能只是另一个 HAnimJoint 节点的子节点或n在用 HAnimJoint 节点作为人性化对象的根节点的情况下为其中 skeleton 域的子节点(例如一个 HAnimJoint 可能不是一个 HAnimSegment 的子节点)。

HAnimJoint 节点也被用来存储其它关节特有的信息。特别是提供了关节名 name 以使应用程序在运行时能识别每个 HAnimJoint 节点。HAnimJoint 节点可能包括 IK 反向动力学系统计算和控制 H-Anim 的提示。这些提示可能包括关节的上下限,关节的旋转限制,刚度/阻尼值。注意这些限制并不要求在人性化场景图中用某个机制来强制实行,其目的只在于提供信息。是否使用这些信息或是否强制限制关节的应用取决于应用程序。

人性化对象的创作及其工具并不受限于 HAnimJoint 节点的执行模式,但是作者和工具可以选择执行模式。能选择使用特殊的单一多边形网格来描述一个人性化对象,而不是用分开的单个的 IndexedFaceSet 来描述每一个身体段。这种情况下,HAnimJoint 将描述对应特定身体段及其下一层部分顶点的移动。

每个域的描述在 2.[I19774] 中。

26.3.4 HAnimSegment

HAnimSegment : X3DGroupingNode {
  MFNode   [in]     addChildren               [X3DChildNode]
  MFNode   [in]     removeChildren            [X3DChildNode]
  SFVec3f  [in,out] centerOfMass     0 0 0    (-∞,∞)
  MFNode   [in,out] children         []       [X3DChildNode]
  SFNode   [in,out] coord            NULL     [X3DCoordinateNode]
  MFNode   [in,out] displacers       []       [HAnimDisplacer]
  SFFloat  [in,out] mass             0        (0,∞)
  MFFloat  [in,out] momentsOfInertia [0 0 0 0 0 0 0 0 0] [0,∞)
  SFString [in,out] name             ""
  SFVec3f  []       bboxCenter       0 0 0    (-∞,∞)
  SFVec3f  []       bboxSize         -1 -1 -1 (0,∞) | -1 -1 -1
}

每个身体段都被存储在一个相应的 HAnimSegment 节点中。HAnimSegment 节点是一个组节点,一般包括一系列的 Shape 节点,也可能是包括按照 ISO/IEC 19774(参见 2.[I19774])中定义的坐标系中的身体位置相关的 Transform 节点。HAnimSegment 的几何体比较复杂时,推荐使用 LOD 节点。

每个域的描述在 2.[I19774] 中。

26.3.5 HAnimSite

HAnimSite : X3DGroupingNode {
  MFNode     [in]     addChildren               [X3DChildNode]
  MFNode     [in]     removeChildren            [X3DChildNode]
  SFVec3f    [in,out] center           0 0 0    (-∞,∞)
  MFNode     [in,out] children         []       [X3DChildNode]
  SFString   [in,out] name             ""
  SFRotation [in,out] rotation         0 0 1 0  (-∞,∞)|[-1,1]
  SFVec3f    [in,out] scale            1 1 1    (0,∞)
  SFRotation [in,out] scaleOrientation 0 0 1 0  (-∞,∞)|[-1,1]
  SFVec3f    [in,out] translation      0 0 0    (-∞,∞)|[-1,1]
  SFVec3f    []       bboxCenter       0 0 0    (-∞,∞)
  SFVec3f    []       bboxSize         -1 -1 -1 (0,∞)|[-1 -1 -1]
}

HAnimSite 节点服务于以下三个目标第一是定义一个 IK 反向动力学系统使用的“最终受动器(end effector)”的位置。第二是定义首饰或服装之类的附件的附着点。第三是定义 HAnimSegment 参考系中的虚拟摄像机位置 (比如 在多用户环境中使用的人性化替身的眼睛(“through the eyes”)视点)。

每个域的描述在 2.[I19774] 中。

cube 26.4 支持级别

H-Anim 组件提供了 表 26.3 中规定的一个支持级别(levels)。

表 26.3Humanoid animation (H-Anim) 组件支持级别

级别 Level 必备条件 节点 支持
1 Core 1;
Grouping 1;
Geometry 2;
Geometric properties 1;
Texturing 1;
Navigation 2.
HAnimDisplacer 所有域
HAnimHumanoid 所有域
HAnimJoint 所有域
HAnimSegment 所有域
HAnimSite 所有域
--- X3D separator bar --- Site Meter