H-Anim logo

Humanoid animiation (H-Anim)
Part 1: Architecture

Annex F

(informative)

Guidelines for H-Anim character design

--- H-Anim separator bar ---

cubeF.1 General

F.1.1 Introduction

This annex specifies guidelines for creating an H-Anim character model using a general graphics tool.

F.1.2 Topics

Table F.1 lists the topics of this annex.

Table F.1 — Topics

cubeF.2 Structure

The structure of a humanoid character model shall be defined with LOA 1, LOA 2, LOA 3, or LOA4 hierarchy. All joints of an H-Anim figure must be represented as a tree hierarchy starting with the HumanoidRoot joint. For an LOA 1 character, there are 18 joints and 18 segments in the hierarchy. Design guidelines for a humanoid character are as follows:

When designing a humanoid character model, the first step is to determine units. Next, when modeling, each segment and each joint shall be specified with its landmark name. These names must be assigned correctly when designing the H-Anim model. Figure F.1 shows joint names for LOA-1 joints. Each segment has a joint. After modeling each segment with a joint, all segments shall be integrated in a tree hierarchy. The integrated character model shall be positioned in the default posture specified in Figure 4.1 of clause 4. Each segment contains its geometry, material or texture properties, and a joint that is used for rotating the segment. The structure of the humanoid character model is represented as the hierarchy of all joints.

After integrating all segments with joints, all the local coordinates of the segments shall be arranged with global coordinates for the integrated character. This is accomplished by resetting all the coordinates with the global coordinate system. The next step is to determine the center of the joint for each segment. The center of the joint is used to transform the segment according to the joint motion.

If necessary, the H-Anim character can be scaled, at this stage considering real length. If the exact length is required, the real length of each segment can be taken into consideration at the beginning when each segment is modelled. For example, the character can initially be designed considering only the length ratio of each segment then, at this stage, the segments can be scaled according to real length (e.g. the height of the character).

 

Figure F.1 — Joint names

Figure F.2 shows an example H-Anim file with the structure of a character model.

<Scene>
<NavigationInfo speed="1.5" type='"EXAMINE" "ANY"'/>
<Viewpoint centerOfRotation="0 1 0" description="KoreanCharacter01Jin" position="0 1 3"/>
<HAnimHumanoid DEF="hanim_HAnim" info="humanoidVersion=2.0" containerField="skeleton" name="HAnim" scale="0.0225 0.0225 0.0225" version="2.0">

<HAnimJoint DEF="hanim_HumanoidRoot" center="0.000000 30.530001 -0.707600" name="HumanoidRoot" >
<HAnimSegment DEF="hanim_sacrum" name="sacrum" >
<Transform translation="0.000000 30.530001 -0.707600" rotation="0.000000 0.000000 0.000000 0.000000" scale="1.000000 1.000000 1.000000" scaleOrientation="0.000000 0.000000 0.000000 0.000000">
<Shape>
<Appearance>
<Material diffuseColor="0.588000 0.588000 0.588000"/>
<ImageTexture DEF="KoreanCharacter01JinTextureAtlas" url="Jin.png"/>
</Appearance>
<IndexedFaceSet creaseAngle="3.14159" coordIndex="0, 1, 2, -1, 0, 2, 3, -1, 0, ...
texCoordIndex="0, 1, 2, -1, 0, 2, 3, -1, 0, ...
<Coordinate point="0.0000 10.7900 0.1424, 0.0000 10.0600 -2.8250, ...
<TextureCoordinate point="0.6211 0.5754,0.7851 0.5720,0.7614 0.5720, ...
</IndexedFaceSet>
</Shape>
</Transform>
</HAnimSegment>

<HAnimJoint DEF="hanim_l_hip" center="4.207000 32.020000 -0.815500" name="l_hip" >
<HAnimSegment DEF="hanim_l_thigh" name="l_thigh" >
<Transform translation="4.207000 32.020000 -0.815500" rotation="0.000000 0.000000 0.000000 0.000000" scale="1.000000 1.000000 1.000000" scaleOrientation="0.000000 0.000000 0.000000 0.000000">
<Shape>
<Appearance>
<Material diffuseColor="0.588000 0.588000 0.588000"/>
<ImageTexture USE="KoreanCharacter01JinTextureAtlas"/>
</Appearance>
<IndexedFaceSet creaseAngle="3.14159" coordIndex="47, 46, 45, -1, 45, 44, 43, -1, 45, ...
texCoordIndex="5, 4, 3, -1, 3, 2, 0, -1, 3, ...
<Coordinate point="2.9600 3.7380 0.0000, 1.6430 3.7380 3.2090, ...
<TextureCoordinate point="0.7190 0.5576,0.6284 0.5576,0.7414 0.5576, ...
</IndexedFaceSet>
</Shape>
</Transform>
</HAnimSegment>

<HAnimJoint DEF="hanim_l_knee" center="4.116000 17.260000 -0.863900" name="l_knee" >
<HAnimSegment DEF="hanim_l_calf" name="l_calf" >
<Transform translation="4.116000 17.260000 -0.863900" rotation="0.000000 0.000000 0.000000 0.000000" scale="1.000000 1.000000 1.000000" scaleOrientation="0.000000 0.000000 0.000000 0.000000">
<Shape>
<Appearance>
<Material diffuseColor="0.588000 0.588000 0.588000"/>
<ImageTexture USE="KoreanCharacter01JinTextureAtlas"/>
</Appearance>
<IndexedFaceSet creaseAngle="3.14159" coordIndex="4, 3, 2, -1, 5, 4, 2, -1, 2, ...
texCoordIndex="4, 3, 2, -1, 5, 4, 2, -1, 2, ...
<Coordinate point="0.7186 0.9688 0.0234, 0.3632 0.9688 0.9354, ...
<TextureCoordinate point="0.9309 0.5848,0.9190 0.5848,0.8921 0.5848, ...
</IndexedFaceSet>
</Shape>
</Transform>
</HAnimSegment>

<HAnimJoint DEF="hanim_l_ankle" center="3.854000 3.939000 -0.703800" name="l_ankle" >
<HAnimSegment DEF="hanim_l_hindfoot" name="l_hindfoot" >
<Transform translation="3.854000 3.939000 -0.703800" rotation="0.000000 0.000000 0.000000 0.000000" scale="1.000000 1.000000 1.000000" scaleOrientation="0.000000 0.000000 0.000000 0.000000">
<Shape>
<Appearance>
<Material diffuseColor="0.588000 0.588000 0.588000"/>
<ImageTexture USE="KoreanCharacter01JinTextureAtlas"/>
</Appearance>
<IndexedFaceSet creaseAngle="3.14159" coordIndex="1, 11, 14, -1, 3, 4, 5, -1, 5, ...
texCoordIndex="1, 14, 18, -1, 3, 4, 5, -1, 5, ...
<Coordinate point="0.9768 -0.0192 -1.6810, 1.6570 -0.0192 0.4309, ...
<TextureCoordinate point="0.3819 0.1710,0.4216 0.1651,0.3819 0.1710, ...
</IndexedFaceSet>
</Shape>
</Transform>
</HAnimSegment>

<HAnimJoint DEF="hanim_l_midtarsal" center="3.854000 3.640000 0.740200" name="l_midtarsal" >
<HAnimSegment DEF="hanim_l_middistal" name="l_middistal" >
<Transform translation="3.854000 3.640000 0.740200" rotation="0.000000 0.000000 0.000000 0.000000" scale="1.000000 1.000000 1.000000" scaleOrientation="0.000000 0.000000 0.000000 0.000000">
<Shape>
<Appearance>
<Material diffuseColor="0.588000 0.588000 0.588000"/>
<ImageTexture USE="KoreanCharacter01JinTextureAtlas"/>
</Appearance>
<IndexedFaceSet creaseAngle="3.14159" coordIndex="3, 4, 10, -1, 3, 10, 11, -1, 0, ...
texCoordIndex="4, 5, 12, -1, 4, 12, 13, -1, 0, 4, 13, -1, ...
<Coordinate point="2.9270 -1.6270 -1.0130, 2.0890 -3.6480 -1.0130, ...
<TextureCoordinate point="0.4330 0.0595,0.4411 0.0186,0.4637 0.1714, ...
</IndexedFaceSet>
</Shape>
</Transform>
</HAnimSegment>
</HAnimJoint>
</HAnimJoint>
</HAnimJoint>
</HAnimJoint>

<HAnimJoint DEF="hanim_r_hip" center="-4.207000 32.020000 -0.815500" name="r_hip" >
<HAnimSegment DEF="hanim_r_thigh" name="r_thigh" >
<Transform translation="-4.207000 32.020000 -0.815500" rotation="0.000000 0.000000 0.000000 0.000000" scale="1.000000 1.000000 1.000000" scaleOrientation="0.000000 0.000000 0.000000 0.000000">
<Shape>
<Appearance>
<Material diffuseColor="0.588000 0.588000 0.588000"/>
<ImageTexture USE="KoreanCharacter01JinTextureAtlas"/>
</Appearance>
<IndexedFaceSet creaseAngle="3.14159" coordIndex="43, 44, 45, -1, 42, 43, 45, -1, 45, ...
texCoordIndex="0, 2, 3, -1, 1, 0, 3, -1, 3, ...
<Coordinate point="-2.9600 3.7380 0.0000, -1.6430 3.7380 3.2090, ...
<TextureCoordinate point="0.7190 0.5576,0.6284 0.5576,0.7414 0.5576, ...
</IndexedFaceSet>
</Shape>
</Transform>
</HAnimSegment>

<HAnimJoint DEF="hanim_r_knee" center="-4.116000 17.260000 -0.863900" name="r_knee" >
<HAnimSegment DEF="hanim_r_calf" name="r_calf" >
<Transform translation="-4.116000 17.260000 -0.863900" rotation="0.000000 0.000000 0.000000 0.000000" scale="1.000000 1.000000 1.000000" scaleOrientation="0.000000 0.000000 0.000000 0.000000">
<Shape>
<Appearance>
<Material diffuseColor="0.588000 0.588000 0.588000"/>
<ImageTexture USE="KoreanCharacter01JinTextureAtlas"/>
</Appearance>
<IndexedFaceSet creaseAngle="3.14159" coordIndex="0, 1, 2, -1, 2, 3, 4, -1, 2, ...
texCoordIndex="0, 1, 2, -1, 2, 3, 4, -1, 2, ...
<Coordinate point="-0.7186 0.9688 0.0234, -0.3632 0.9688 0.9354, ...
<TextureCoordinate point="0.9309 0.5848,0.9190 0.5848,0.8921 0.5848, ...
</IndexedFaceSet>
</Shape>
</Transform>
</HAnimSegment>

<HAnimJoint DEF="hanim_r_ankle" center="-3.854000 3.939000 -0.703800" name="r_ankle" >
<HAnimSegment DEF="hanim_r_hindfoot" name="r_hindfoot" >
<Transform translation="-3.854000 3.939000 -0.703800" rotation="0.000000 0.000000 0.000000 0.000000" scale="1.000000 1.000000 1.000000" scaleOrientation="0.000000 0.000000 0.000000 0.000000">
<Shape>
<Appearance>
<Material diffuseColor="0.588000 0.588000 0.588000"/>
<ImageTexture USE="KoreanCharacter01JinTextureAtlas"/>
</Appearance>
<IndexedFaceSet creaseAngle="3.14159" coordIndex="1, 14, 11, -1, 3, 6, 5, -1, 5, ...
texCoordIndex="1, 18, 14, -1, 3, 6, 5, -1, 5, ...
<Coordinate point="-0.9768 -0.0192 -1.6810, -1.6570 -0.0192 0.4309, ...
<TextureCoordinate point="0.3819 0.1710,0.4216 0.1651,0.3819 0.1710, ...
</IndexedFaceSet>
</Shape>
</Transform>
</HAnimSegment>

<HAnimJoint DEF="hanim_r_midtarsal" center="-3.854000 3.640000 0.740200" name="r_midtarsal" >
<HAnimSegment DEF="hanim_r_middistal" name="r_middistal" >
<Transform translation="-3.854000 3.640000 0.740200" rotation="0.000000 0.000000 0.000000 0.000000" scale="1.000000 1.000000 1.000000" scaleOrientation="0.000000 0.000000 0.000000 0.000000">
<Shape>
<Appearance>
<Material diffuseColor="0.588000 0.588000 0.588000"/>
<ImageTexture USE="KoreanCharacter01JinTextureAtlas"/>
</Appearance>
<IndexedFaceSet creaseAngle="3.14159" coordIndex="10, 4, 3, -1, 11, 10, 3, -1, 0, ...
texCoordIndex="12, 5, 4, -1, 13, 12, 4, -1, 0, ...
<Coordinate point="-2.9270 -1.6270 -1.0130, -2.0890 -3.6480 -1.0130, ...
<TextureCoordinate point="0.4330 0.0595,0.4411 0.0186,0.4637 0.1714, ...
</IndexedFaceSet>
</Shape>
</Transform>
</HAnimSegment>
</HAnimJoint>
</HAnimJoint>
</HAnimJoint>
</HAnimJoint>

<HAnimJoint DEF="hanim_sacroiliac" center="0.000000 35.799999 -0.707600" name="sacroiliac" >
<HAnimSegment DEF="hanim_pelvis" name="pelvis" >
<Transform translation="0.000000 35.799999 -0.707600" rotation="0.000000 0.000000 0.000000 0.000000" scale="1.000000 1.000000 1.000000" scaleOrientation="0.000000 0.000000 0.000000 0.000000">
<Shape>
<Appearance>
<Material diffuseColor="0.588000 0.588000 0.588000"/>
<ImageTexture USE="KoreanCharacter01JinTextureAtlas"/>
</Appearance>
<IndexedFaceSet creaseAngle="3.14159" coordIndex="0, 1, 2, -1, 0, 2, 3, -1, 0, ...
texCoordIndex="0, 1, 2, -1, 0, 2, 3, -1, 0, ...
<Coordinate point="0.0000 1.0530 0.0273, 0.0000 0.9123 -0.5414, ...
<TextureCoordinate point="0.6211 0.5754,0.7851 0.5720,0.7614 0.5720, ...
</IndexedFaceSet>
</Shape>
</Transform>
</HAnimSegment>

<HAnimJoint DEF="hanim_l_shoulder" center="5.975000 52.000000 -0.145200" name="l_shoulder" >
<HAnimSegment DEF="hanim_l_upperarm" name="l_upperarm" >
<Transform translation="5.975000 52.000000 -0.145200" rotation="0.000000 0.000000 0.000000 0.000000" scale="1.000000 1.000000 1.000000" scaleOrientation="0.000000 0.000000 0.000000 0.000000">
<Shape>
<Appearance>
<Material diffuseColor="0.588000 0.588000 0.588000"/>
<ImageTexture USE="KoreanCharacter01JinTextureAtlas"/>
</Appearance>
<IndexedFaceSet creaseAngle="3.14159" coordIndex="2, 1, 0, -1, 3, 2, 0, -1, 4, ...
texCoordIndex="2, 0, 1, -1, 3, 2, 1, -1, 61, ...
<Coordinate point="2.5250 1.2460 -1.6800, 3.6810 1.2360 0.0337, ...
<TextureCoordinate point="0.2986 0.2114,0.2726 0.2114,0.3201 0.2114, ...
</IndexedFaceSet>
</Shape>
</Transform>
</HAnimSegment>

<HAnimJoint DEF="hanim_l_elbow" center="8.093000 40.380001 -0.250200" name="l_elbow" >
<HAnimSegment DEF="hanim_l_forearm" name="l_forearm" >
<Transform translation="8.093000 40.380001 -0.250200" rotation="0.000000 0.000000 0.000000 0.000000" scale="1.000000 1.000000 1.000000" scaleOrientation="0.000000 0.000000 0.000000 0.000000">
<Shape>
<Appearance>
<Material diffuseColor="0.588000 0.588000 0.588000"/>
<ImageTexture USE="KoreanCharacter01JinTextureAtlas"/>
</Appearance>
<IndexedFaceSet creaseAngle="3.14159" coordIndex="2, 1, 0, -1, 3, 2, 0, -1, 4, ...
texCoordIndex="2, 25, 26, -1, 3, 2, 26, -1, 4, ...
<Coordinate point="0.2150 0.3047 -1.1520, 1.1550 0.2966 -0.2588, 0.6199 0.3013 1. ...
<TextureCoordinate point="0.4222 0.6201,0.4327 0.6201,0.3884 0.6201, ...
</IndexedFaceSet>
</Shape>
</Transform>
</HAnimSegment>

<HAnimJoint DEF="hanim_l_wrist" center="7.808000 31.459999 -0.058490" name="l_wrist" >
<HAnimSegment DEF="hanim_l_hand" name="l_hand" >
<Transform translation="7.808000 31.459999 -0.058490" rotation="0.000000 0.000000 0.000000 0.000000" scale="1.000000 1.000000 1.000000" scaleOrientation="0.000000 0.000000 0.000000 0.000000">
<Shape>
<Appearance>
<Material diffuseColor="0.588000 0.588000 0.588000"/>
<ImageTexture USE="KoreanCharacter01JinTextureAtlas"/>
</Appearance>
<IndexedFaceSet creaseAngle="3.14159" coordIndex="4, 5, 0, -1, 0, 2, 4, -1, 6, ...
texCoordIndex="4, 6, 5, -1, 5, 7, 4, -1, 2, ...
<Coordinate point="1.2470 0.0700 0.7975, 1.2090 0.0872 -1.3490, ...
<TextureCoordinate point="0.8107 0.9924,0.8122 0.9033,0.7694 0.9912, ...
</IndexedFaceSet>
</Shape>
</Transform>
</HAnimSegment>
</HAnimJoint>
</HAnimJoint>
</HAnimJoint>

<HAnimJoint DEF="hanim_r_shoulder" center="-5.975000 52.000000 -0.145200" name="r_shoulder" >
<HAnimSegment DEF="hanim_r_upperarm" name="r_upperarm" >
<Transform translation="-5.975000 52.000000 -0.145200" rotation="0.000000 0.000000 0.000000 0.000000" scale="1.000000 1.000000 1.000000" scaleOrientation="0.000000 0.000000 0.000000 0.000000">
<Shape>
<Appearance>
<Material diffuseColor="0.588000 0.588000 0.588000"/>
<ImageTexture USE="KoreanCharacter01JinTextureAtlas"/>
</Appearance>
<IndexedFaceSet creaseAngle="3.14159" coordIndex="0, 1, 2, -1, 0, 2, 3, -1, 4, ...
texCoordIndex="1, 0, 2, -1, 1, 2, 3, -1, 61, ...
<Coordinate point="-2.5250 1.2460 -1.6800, -3.6810 1.2360 0.0337, ...
<TextureCoordinate point="0.2986 0.2114,0.2726 0.2114,0.3201 0.2114, ...
</IndexedFaceSet>
</Shape>
</Transform>
</HAnimSegment>

<HAnimJoint DEF="hanim_r_elbow" center="-8.093000 40.380001 -0.250200" name="r_elbow" >
<HAnimSegment DEF="hanim_r_forearm" name="r_forearm" >
<Transform translation="-8.093000 40.380001 -0.250200" rotation="0.000000 0.000000 0.000000 0.000000" scale="1.000000 1.000000 1.000000" scaleOrientation="0.000000 0.000000 0.000000 0.000000">
<Shape>
<Appearance>
<Material diffuseColor="0.588000 0.588000 0.588000"/>
<ImageTexture USE="KoreanCharacter01JinTextureAtlas"/>
</Appearance>
<IndexedFaceSet creaseAngle="3.14159" coordIndex="0, 1, 2, -1, 0, 2, 3, -1, 4, ...
texCoordIndex="26, 25, 2, -1, 26, 2, ...
<Coordinate point="-0.2150 0.3047 -1.1520, -1.1550 0.2966 -0.2588, ...
<TextureCoordinate point="0.4222 0.6201,0.4327 0.6201,0.3884 0.6201,...
</IndexedFaceSet>
</Shape>
</Transform>
</HAnimSegment>

<HAnimJoint DEF="hanim_r_wrist" center="-7.808000 31.459999 -0.058490" name="r_wrist" >
<HAnimSegment DEF="hanim_r_hand" name="r_hand" >
<Transform translation="-7.808000 31.459999 -0.058490" rotation="0.000000 0.000000 0.000000 0.000000" scale="1.000000 1.000000 1.000000" scaleOrientation="0.000000 0.000000 0.000000 0.000000">
<Shape>
<Appearance>
<Material diffuseColor="0.588000 0.588000 0.588000"/>
<ImageTexture USE="KoreanCharacter01JinTextureAtlas"/>
</Appearance>
<IndexedFaceSet creaseAngle="3.14159" coordIndex="4, 2, 0, -1, 0, 5, 4, -1, 6, ...
texCoordIndex="4, 7, 5, -1, 5, 6, 4, -1, 2, ...
<Coordinate point="-1.2470 0.0700 0.7975, -1.2090 0.0872 -1.3490, ...
<TextureCoordinate point="0.8107 0.9924,0.8122 0.9033,0.7694 0.9912, ...
</IndexedFaceSet>
</Shape>
</Transform>
</HAnimSegment>
</HAnimJoint>
</HAnimJoint>
</HAnimJoint>

<HAnimJoint DEF="hanim_vl5" center="0.000000 40.230000 -0.852700" name="vl5" >
<HAnimSegment DEF="hanim_l5" name="l5" >
<Transform translation="0.000000 40.230000 -0.852700" rotation="0.000000 0.000000 0.000000 0.000000" scale="1.000000 1.000000 1.000000" scaleOrientation="0.000000 0.000000 0.000000 0.000000">
<Shape>
<Appearance>
<Material diffuseColor="0.588000 0.588000 0.588000"/>
<ImageTexture USE="KoreanCharacter01JinTextureAtlas"/>
</Appearance>
<IndexedFaceSet creaseAngle="3.14159" coordIndex="3, 4, 7, -1, 7, 5, 3, -1, 4, ...
texCoordIndex="2, 3, 0, -1, 0, 1, 2, -1, 3, ...
<Coordinate point="0.6928 14.5600 -1.2630, 0.0000 14.6100 -1.3550,
<TextureCoordinate point="0.4756 0.6180,0.4724 0.6293,0.4618 0.6351, ...
</IndexedFaceSet>
</Shape>
</Transform>
</HAnimSegment>

<HAnimJoint DEF="hanim_skullbase" center="0.000000 57.430000 -0.686300" name="skullbase" >
<HAnimSegment DEF="hanim_skull" name="skull" >
<Transform translation="0.000000 57.430000 -0.686300" rotation="0.000000 0.000000 0.000000 0.000000" scale="1.000000 1.000000 1.000000" scaleOrientation="0.000000 0.000000 0.000000 0.000000">
<Shape>
<Appearance>
<Material diffuseColor="0.588000 0.588000 0.588000"/>
<ImageTexture USE="KoreanCharacter01JinTextureAtlas"/>
</Appearance>
<IndexedFaceSet creaseAngle="3.14159" coordIndex="58, 44, 47, -1, 47, 49, 58, -1, 49, ...
texCoordIndex="0, 3, 2, -1, 2, 1, 0, -1, 1, ...
<Coordinate point="4.7340 2.2950 -0.4780, 0.0000 7.9250 -7.3470, ...
<TextureCoordinate point="0.9175 0.8974,0.9509 0.8981,0.9421 0.8701, ...
</IndexedFaceSet>
</Shape>
</Transform>
</HAnimSegment>
</HAnimJoint>
</HAnimJoint>
</HAnimJoint>
</HAnimJoint>
</HAnimHumanoid>
</Scene>
</X3D>

Figure F.2 — An example H-Anim file with the structure of a character

 

cubeF.3 Skin

In this example, the skin of the character is represented by the geometry of the segments such as mesh or polygon data sets. Properties of the skin are represented with material or texture properties. In Figure F.1, skin is represented by the Shape component including Appearance and IndexedFaceSet.

cubeF.4 Articulation

When designing an H-Anim character, three levels of articulation can be used depending on the complexity of joints. All joints of an H-Anim model are represented as a tree with the HumanoidRoot joint at its root. Each joint may or may not have a segment that includes geometry data. Table F.1 shows the composition of joints for segments at each level of articulation.

 

Table F.1 — Joints composition for each LOA (No. of joints)

  LOA 1 LOA 2 LOA 3 LOA 4
Head 1 1 8 8
Waist 2 2 2 2
Backbone 1 8 24 24
Arm 6 8 8 8
Leg 4 4 4 4
Hands 2 40 40 46
Feet 2 8 8 52
Total 18 71 94 144

 

 

 

 

 

 

 


 

 

--- H-Anim separator bar ---