{ "X3D": {
    "encoding":"UTF-8",
    "@profile":"Immersive",
    "@version":"3.3",
    "@xsd:noNamespaceSchemaLocation":"https://www.web3d.org/specifications/x3d-3.3.xsd",
    "JSON schema":"https://www.web3d.org/specifications/x3d-4.0-JSONSchema.autogenerated.json",
    "head": {
        "-children":[
          {
            "#comment":"Originally these fundamental prototypes were defined in InterchangableActorsViaDynamicRoutingPrototypes.x3d"
          }
        ],
        "meta": [
          {
            "@name":"title",
            "@content":"HAnimPrototypes.x3d"
          },
          {
            "@name":"description",
            "@content":"Example implementation of X3D Humanoid Animation (HAnim) nodes using X3D prototypes."
          },
          {
            "@name":"warning",
            "@content":"These are developmental examples that can assist X3D player implementations and support interoperability. They are not intended for author use in regular X3D scenes."
          },
          {
            "@name":"warning",
            "@content":"Developer note: names for these HAnim Prototypes need to be corrected if used internally in an X3D player implementation (e.g. Joint to HAnimJoint)."
          },
          {
            "@name":"warning",
            "@content":"Need support for skin"
          },
          {
            "@name":"creator",
            "@content":"Ozan APAYDIN, Don Brutzman"
          },
          {
            "@name":"translator",
            "@content":"Ozan APAYDIN, Don Brutzman"
          },
          {
            "@name":"created",
            "@content":"15 November 2001"
          },
          {
            "@name":"modified",
            "@content":"23 May 2020"
          },
          {
            "@name":"TODO",
            "@content":"upgrade to match support requirements for HAnim 2.2"
          },
          {
            "@name":"reference",
            "@content":"https://www.web3d.org/files/specifications/19774/V1.0/HAnim/HAnim.html"
          },
          {
            "@name":"reference",
            "@content":"https://www.web3d.org/files/specifications/19775-1/V3.3/Part01/components/hanim.html"
          },
          {
            "@name":"reference",
            "@content":"http://HAnim.org/Models/HAnim2001/boxman/boxman.wrl"
          },
          {
            "@name":"reference",
            "@content":"http://HAnim.org/Specifications/HAnim2001"
          },
          {
            "@name":"reference",
            "@content":"http://www.HAnim.org"
          },
          {
            "@name":"reference",
            "@content":"http://HAnim.org/Models"
          },
          {
            "@name":"reference",
            "@content":"http://HAnim.org/Specifications"
          },
          {
            "@name":"reference",
            "@content":"InterchangableActorsViaDynamicRoutingPrototypes.x3d"
          },
          {
            "@name":"identifier",
            "@content":"https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Prototypes/HAnimPrototypes.x3d"
          },
          {
            "@name":"generator",
            "@content":"X3D-Edit 3.3, https://www.web3d.org/x3d/tools/X3D-Edit"
          },
          {
            "@name":"license",
            "@content":"../license.html"
          },
          {
            "@name":"translated",
            "@content":"15 April 2026"
          },
          {
            "@name":"generator",
            "@content":"X3dToJson.xslt, https://www.web3d.org/x3d/stylesheets/X3dToJson.html"
          },
          {
            "@name":"reference",
            "@content":"X3D JSON encoding: https://www.web3d.org/wiki/index.php/X3D_JSON_Encoding"
          }
        ]
    },
    "Scene": {
        "-children":[
          {
            "#comment":"**********Human Model Protypes*********"
          },
          { "ProtoDeclare":
            {
              "@name":"Humanoid1_1",
              "@appinfo":"The Humanoid node serves as overall container for the Joint Segment Site and Viewpoint nodes which define the skeleton geometry and landmarks of the humanoid figure. Additionally the node provides a means for defining information about the author copyright and usage restrictions of the model.",
              "@documentation":"http://HAnim.org/Specifications/HAnim2001/part1/Humanoid.html",
              "ProtoInterface": {
                  "-children":[
                    {
                      "#comment":"HAnim v1.1 field definitions"
                    }
                  ],
                  "field": [
                    {
                      "@name":"name",
                      "@accessType":"inputOutput",
                      "@type":"SFString"
                    },
                    {
                      "@name":"version",
                      "@accessType":"inputOutput",
                      "@appinfo":"legal values: 1.1 or 2.0",
                      "@type":"SFString",
                      "@value":"1.1"
                    },
                    {
                      "@name":"humanoidVersion",
                      "@accessType":"inputOutput",
                      "@appinfo":"Version of the humanoid being modeled. Hint: HAnim version 2.0",
                      "@type":"SFString"
                    },
                    {
                      "@name":"info",
                      "@accessType":"inputOutput",
                      "@type":"MFString"
                    },
                    {
                      "@name":"translation",
                      "@accessType":"inputOutput",
                      "@type":"SFVec3f",
                      "@value":[0,0,0]
                    },
                    {
                      "@name":"rotation",
                      "@accessType":"inputOutput",
                      "@type":"SFRotation",
                      "@value":[0,0,1,0]
                    },
                    {
                      "@name":"center",
                      "@accessType":"inputOutput",
                      "@type":"SFVec3f",
                      "@value":[0,0,0]
                    },
                    {
                      "@name":"scale",
                      "@accessType":"inputOutput",
                      "@type":"SFVec3f",
                      "@value":[1,1,1]
                    },
                    {
                      "@name":"scaleOrientation",
                      "@accessType":"inputOutput",
                      "@type":"SFRotation",
                      "@value":[0,0,1,0]
                    },
                    {
                      "@name":"bboxCenter",
                      "@accessType":"initializeOnly",
                      "@type":"SFVec3f",
                      "@value":[0,0,0]
                    },
                    {
                      "@name":"bboxSize",
                      "@accessType":"initializeOnly",
                      "@type":"SFVec3f",
                      "@value":[-1,-1,-1]
                    },
                    {
                      "@name":"humanoidBody",
                      "@accessType":"inputOutput",
                      "@appinfo":"HAnim 1.1 field container for body head. Hint: replaced by 2.0 skeleton.",
                      "@documentation":"http://HAnim.org/Specifications/HAnim1.1/#humanoid",
                      "@type":"MFNode"
                    },
                    {
                      "@name":"skeleton",
                      "@accessType":"inputOutput",
                      "@appinfo":"HAnim 2.0 field container for body geometry Hint: replaces 1.1 humanoidBody",
                      "@documentation":"http://HAnim.org/Specifications/HAnim2001/part1/Humanoid.html",
                      "@type":"MFNode"
                    },
                    {
                      "@name":"joints",
                      "@accessType":"inputOutput",
                      "@appinfo":"Container field for Joint nodes",
                      "@type":"MFNode"
                    },
                    {
                      "@name":"segments",
                      "@accessType":"inputOutput",
                      "@appinfo":"Container field for Segment nodes",
                      "@type":"MFNode"
                    },
                    {
                      "@name":"sites",
                      "@accessType":"inputOutput",
                      "@appinfo":"Container field for Site nodes",
                      "@type":"MFNode"
                    },
                    {
                      "@name":"viewpoints",
                      "@accessType":"inputOutput",
                      "@appinfo":"Container field for Viewpoint nodes",
                      "@type":"MFNode"
                    },
                    {
                      "@name":"skinCoord",
                      "@accessType":"inputOutput",
                      "@appinfo":"Hint: HAnim version 2.0",
                      "@type":"SFNode",
                      "-children":[
                        {
                          "#comment":"NULL"
                        }
                      ]
                    },
                    {
                      "@name":"skinNormal",
                      "@accessType":"inputOutput",
                      "@appinfo":"Hint: HAnim version 2.0",
                      "@type":"SFNode",
                      "-children":[
                        {
                          "#comment":"NULL"
                        }
                      ]
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "Transform":
                      {
                        "@DEF":"HumanoidTransform",
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"translation",
                                "@protoField":"translation"
                              },
                              {
                                "@nodeField":"rotation",
                                "@protoField":"rotation"
                              },
                              {
                                "@nodeField":"center",
                                "@protoField":"center"
                              },
                              {
                                "@nodeField":"scale",
                                "@protoField":"scale"
                              },
                              {
                                "@nodeField":"scaleOrientation",
                                "@protoField":"scaleOrientation"
                              },
                              {
                                "@nodeField":"bboxCenter",
                                "@protoField":"bboxCenter"
                              },
                              {
                                "@nodeField":"bboxSize",
                                "@protoField":"bboxSize"
                              }
                            ]
                        },
                        "-children":[
                          { "Group":
                            {
                              "@DEF":"HumanoidGroup1",
                              "IS": {
                                  "connect": [
                                    {
                                      "@nodeField":"children",
                                      "@protoField":"humanoidBody"
                                    }
                                  ]
                              }
                            }
                          },
                          { "Group":
                            {
                              "@DEF":"HumanoidGroup2",
                              "IS": {
                                  "connect": [
                                    {
                                      "@nodeField":"children",
                                      "@protoField":"skeleton"
                                    }
                                  ]
                              }
                            }
                          },
                          { "Group":
                            {
                              "@DEF":"HumanoidGroup3",
                              "IS": {
                                  "connect": [
                                    {
                                      "@nodeField":"children",
                                      "@protoField":"viewpoints"
                                    }
                                  ]
                              }
                            }
                          }
                        ]
                      }
                    }
                  ]
              }
            }
          },
          { "ProtoDeclare":
            {
              "@name":"Joint",
              "@appinfo":"The Joint node is used as a building block to describe the articulations of the humanoid figure. Each articulation of the humanoid figure is represented by a Joint node each of which is organized into a hierarchy that describes the overall skeleton of the humanoid.",
              "@documentation":"http://HAnim.org/Specifications/HAnim2001/part1/Joint.html",
              "ProtoInterface": {
                  "field": [
                    {
                      "@name":"name",
                      "@accessType":"inputOutput",
                      "@type":"SFString"
                    },
                    {
                      "@name":"ulimit",
                      "@accessType":"inputOutput",
                      "@type":"MFFloat"
                    },
                    {
                      "@name":"llimit",
                      "@accessType":"inputOutput",
                      "@type":"MFFloat"
                    },
                    {
                      "@name":"limitOrientation",
                      "@accessType":"inputOutput",
                      "@type":"SFRotation",
                      "@value":[0,0,1,0]
                    },
                    {
                      "@name":"skinCoordIndex",
                      "@accessType":"inputOutput",
                      "@type":"MFInt32"
                    },
                    {
                      "@name":"skinCoordWeight",
                      "@accessType":"inputOutput",
                      "@type":"MFFloat"
                    },
                    {
                      "@name":"stiffness",
                      "@accessType":"inputOutput",
                      "@type":"MFFloat",
                      "@value":[0,0,0]
                    },
                    {
                      "@name":"translation",
                      "@accessType":"inputOutput",
                      "@type":"SFVec3f",
                      "@value":[0,0,0]
                    },
                    {
                      "@name":"rotation",
                      "@accessType":"inputOutput",
                      "@type":"SFRotation",
                      "@value":[0,0,1,0]
                    },
                    {
                      "@name":"scale",
                      "@accessType":"inputOutput",
                      "@type":"SFVec3f",
                      "@value":[1,1,1]
                    },
                    {
                      "@name":"scaleOrientation",
                      "@accessType":"inputOutput",
                      "@type":"SFRotation",
                      "@value":[0,0,1,0]
                    },
                    {
                      "@name":"center",
                      "@accessType":"inputOutput",
                      "@type":"SFVec3f",
                      "@value":[0,0,0]
                    },
                    {
                      "@name":"bboxCenter",
                      "@accessType":"initializeOnly",
                      "@type":"SFVec3f",
                      "@value":[0,0,0]
                    },
                    {
                      "@name":"bboxSize",
                      "@accessType":"initializeOnly",
                      "@type":"SFVec3f",
                      "@value":[-1,-1,-1]
                    },
                    {
                      "@name":"children",
                      "@accessType":"inputOutput",
                      "@type":"MFNode"
                    },
                    {
                      "@name":"addChildren",
                      "@accessType":"inputOnly",
                      "@type":"MFNode"
                    },
                    {
                      "@name":"removeChildren",
                      "@accessType":"inputOnly",
                      "@type":"MFNode"
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "Transform":
                      {
                        "@DEF":"JointTransform",
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"translation",
                                "@protoField":"translation"
                              },
                              {
                                "@nodeField":"rotation",
                                "@protoField":"rotation"
                              },
                              {
                                "@nodeField":"center",
                                "@protoField":"center"
                              },
                              {
                                "@nodeField":"scale",
                                "@protoField":"scale"
                              },
                              {
                                "@nodeField":"scaleOrientation",
                                "@protoField":"scaleOrientation"
                              },
                              {
                                "@nodeField":"bboxCenter",
                                "@protoField":"bboxCenter"
                              },
                              {
                                "@nodeField":"bboxSize",
                                "@protoField":"bboxSize"
                              },
                              {
                                "@nodeField":"children",
                                "@protoField":"children"
                              },
                              {
                                "@nodeField":"addChildren",
                                "@protoField":"addChildren"
                              },
                              {
                                "@nodeField":"removeChildren",
                                "@protoField":"removeChildren"
                              }
                            ]
                        }
                      }
                    }
                  ]
              }
            }
          },
          { "ProtoDeclare":
            {
              "@name":"Segment",
              "@appinfo":"The Segment node is used describe the attributes of the physical links between the joints of the humanoid figure. Each body part (pelvis thigh calf etc.) of the humanoid figure is represented by a Segment node.",
              "@documentation":"http://HAnim.org/Specifications/HAnim2001/part1/Segment.html",
              "ProtoInterface": {
                  "field": [
                    {
                      "@name":"name",
                      "@accessType":"inputOutput",
                      "@type":"SFString"
                    },
                    {
                      "@name":"mass",
                      "@accessType":"inputOutput",
                      "@type":"SFFloat",
                      "@value":0
                    },
                    {
                      "@name":"centerOfMass",
                      "@accessType":"inputOutput",
                      "@type":"SFVec3f",
                      "@value":[0,0,0]
                    },
                    {
                      "@name":"momentsOfInertia",
                      "@accessType":"inputOutput",
                      "@type":"MFFloat",
                      "@value":[0,0,0,0,0,0,0,0,0]
                    },
                    {
                      "@name":"bboxCenter",
                      "@accessType":"initializeOnly",
                      "@type":"SFVec3f",
                      "@value":[0,0,0]
                    },
                    {
                      "@name":"bboxSize",
                      "@accessType":"initializeOnly",
                      "@type":"SFVec3f",
                      "@value":[-1,-1,-1]
                    },
                    {
                      "@name":"children",
                      "@accessType":"inputOutput",
                      "@type":"MFNode"
                    },
                    {
                      "@name":"addChildren",
                      "@accessType":"inputOnly",
                      "@type":"MFNode"
                    },
                    {
                      "@name":"removeChildren",
                      "@accessType":"inputOnly",
                      "@type":"MFNode"
                    },
                    {
                      "@name":"coord",
                      "@accessType":"inputOutput",
                      "@appinfo":"contains Coordinate nodes",
                      "@type":"SFNode",
                      "-children":[
                        {
                          "#comment":"NULL"
                        }
                      ]
                    },
                    {
                      "@name":"displacers",
                      "@accessType":"inputOutput",
                      "@appinfo":"contains Displacer nodes",
                      "@type":"MFNode"
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "Group":
                      {
                        "@DEF":"SegmentGroup",
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"bboxCenter",
                                "@protoField":"bboxCenter"
                              },
                              {
                                "@nodeField":"bboxSize",
                                "@protoField":"bboxSize"
                              },
                              {
                                "@nodeField":"children",
                                "@protoField":"children"
                              },
                              {
                                "@nodeField":"addChildren",
                                "@protoField":"addChildren"
                              },
                              {
                                "@nodeField":"removeChildren",
                                "@protoField":"removeChildren"
                              }
                            ]
                        }
                      }
                    }
                  ]
              }
            }
          },
          { "ProtoDeclare":
            {
              "@name":"Site",
              "@appinfo":"The Site node can be used for three purposes: (a) to define an \"end effector\" location which can be used by an inverse kinematics system (b) to define an attachment point for accessories such as jewelry and clothing and (c) to define a location for a virtual camera in the reference frame of a Segment node (such as a view \"through the eyes\" of the humanoid for use in multi-user worlds).",
              "@documentation":"http://HAnim.org/Specifications/HAnim2001/part1/Site.html",
              "ProtoInterface": {
                  "field": [
                    {
                      "@name":"name",
                      "@accessType":"inputOutput",
                      "@type":"SFString"
                    },
                    {
                      "@name":"translation",
                      "@accessType":"inputOutput",
                      "@type":"SFVec3f",
                      "@value":[0,0,0]
                    },
                    {
                      "@name":"rotation",
                      "@accessType":"inputOutput",
                      "@type":"SFRotation",
                      "@value":[0,0,1,0]
                    },
                    {
                      "@name":"scale",
                      "@accessType":"inputOutput",
                      "@type":"SFVec3f",
                      "@value":[1,1,1]
                    },
                    {
                      "@name":"scaleOrientation",
                      "@accessType":"inputOutput",
                      "@type":"SFRotation",
                      "@value":[0,0,1,0]
                    },
                    {
                      "@name":"center",
                      "@accessType":"inputOutput",
                      "@type":"SFVec3f",
                      "@value":[0,0,0]
                    },
                    {
                      "@name":"bboxCenter",
                      "@accessType":"initializeOnly",
                      "@type":"SFVec3f",
                      "@value":[0,0,0]
                    },
                    {
                      "@name":"bboxSize",
                      "@accessType":"initializeOnly",
                      "@type":"SFVec3f",
                      "@value":[-1,-1,-1]
                    },
                    {
                      "@name":"children",
                      "@accessType":"inputOutput",
                      "@type":"MFNode"
                    },
                    {
                      "@name":"addChildren",
                      "@accessType":"inputOnly",
                      "@type":"MFNode"
                    },
                    {
                      "@name":"removeChildren",
                      "@accessType":"inputOnly",
                      "@type":"MFNode"
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "Transform":
                      {
                        "@DEF":"SiteTransform",
                        "IS": {
                            "connect": [
                              {
                                "@nodeField":"translation",
                                "@protoField":"translation"
                              },
                              {
                                "@nodeField":"rotation",
                                "@protoField":"rotation"
                              },
                              {
                                "@nodeField":"center",
                                "@protoField":"center"
                              },
                              {
                                "@nodeField":"scale",
                                "@protoField":"scale"
                              },
                              {
                                "@nodeField":"scaleOrientation",
                                "@protoField":"scaleOrientation"
                              },
                              {
                                "@nodeField":"bboxCenter",
                                "@protoField":"bboxCenter"
                              },
                              {
                                "@nodeField":"bboxSize",
                                "@protoField":"bboxSize"
                              },
                              {
                                "@nodeField":"children",
                                "@protoField":"children"
                              },
                              {
                                "@nodeField":"addChildren",
                                "@protoField":"addChildren"
                              },
                              {
                                "@nodeField":"removeChildren",
                                "@protoField":"removeChildren"
                              }
                            ]
                        }
                      }
                    }
                  ]
              }
            }
          },
          { "ProtoDeclare":
            {
              "@name":"Displacer",
              "@appinfo":"A Displacer can be used in three different ways: (a) identify the vertices corresponding to a particular feature on a Segment (b) represent a particular muscular action which displaces the vertices in various directions (linearly or radially) and (c) represent a complete configuration of the vertices in a Segment.",
              "@documentation":"http://HAnim.org/Specifications/HAnim2001/part1/Displacer.html",
              "ProtoInterface": {
                  "field": [
                    {
                      "@name":"name",
                      "@accessType":"inputOutput",
                      "@type":"SFString"
                    },
                    {
                      "@name":"coordIndex",
                      "@accessType":"inputOutput",
                      "@type":"MFInt32"
                    },
                    {
                      "@name":"displacements",
                      "@accessType":"inputOutput",
                      "@type":"MFVec3f"
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "WorldInfo":
                      {
                        "@info":["null body node"]
                      }
                    }
                  ]
              }
            }
          },
          { "Shape":
            {
              "-geometry":
                { "Text":
                  {
                    "@string":["Humanoid Animation","(HAnim) prototype","implementations"],
                    "-fontStyle":
                      { "FontStyle":
                        {
                          "@justify":["MIDDLE","MIDDLE"]
                        }
                      }
                  }
                },
              "-appearance":
                { "Appearance":
                  {
                    "-material":
                      { "Material":
                        {
                          "@ambientIntensity":0.25,
                          "@diffuseColor":[0.7959,0.5059,0.0933],
                          "@shininess":0.39,
                          "@specularColor":[0.9235,0.4289,0.0064],
                          "-children":[
                            {
                              "#comment":"Universal Media Library: Autumn 9"
                            }
                          ]
                        }
                      }
                  }
                }
            }
          }
        ]
    }
  }
}