<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.3//EN" "https://www.web3d.org/specifications/x3d-3.3.dtd">
<X3D profile='Immersive'  version='3.3 xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation =' https://www.web3d.org/specifications/x3d-3.3.xsd ' >
<head>
<meta name='titlecontent=' LOA1_WalkAnimation.x3d '/>
<meta name='descriptioncontent='Humanoid animation prototype reusable by any Humanoid.'/>
<meta name='creatorcontent='Cindy Ballreich cindy@ballreich.net 3Name3D'/>
<meta name='rightscontent='1997 3Name3D / Yglesias, Wallock, Divekar, Inc., all rights reserved.'/>
<meta name='translatorcontent='Don Brutzman'/>
<meta name='translatedcontent='1 October 2001'/>
<meta name='modifiedcontent='23 May 2020'/>
<meta name='referencecontent=' http://www.ballreich.net/vrml/HAnim/nancy_HAnim.wrl '/>
<meta name='referencecontent=' http://HAnim.org/Specifications/HAnim2001 '/>
<meta name='referencecontent=' http://HAnim.org/Models '/>
<meta name='referencecontent=' http://HAnim.org/Nodes '/>
<meta name='subjectcontent='Nancy Walk Animation HAnim 2001'/>
<meta name='identifiercontent=' https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Prototypes/LOA1_WalkAnimation.x3d '/>
<meta name='generatorcontent='X3D-Edit 3.3, https://savage.nps.edu/X3D-Edit'/>
<meta name='licensecontent=' ../license.html'/>
</head>
<!-- -->
<Scene>
<WorldInfo title='LOA1_WalkAnimation.x3d'/>
<ProtoDeclare name='LOA1_WalkAnimation'>
<ProtoInterface>
<field name='cycleIntervaltype='SFTimevalue='2accessType='inputOutput'/>
<field name='enabledtype='SFBoolvalue='trueaccessType='inputOutput'/>
<field name='looptype='SFBoolvalue='trueaccessType='inputOutput'/>
<field name='startTimetype='SFTimevalue='0accessType='inputOutput'/>
<field name='stopTimetype='SFTimevalue='-1accessType='inputOutput'/>
<field name='fraction_changedtype='SFFloataccessType='outputOnly'/>
<field name='isActivetype='SFBoolaccessType='outputOnly'/>
<field name='HumanoidRoot_translation_changedtype='SFVec3faccessType='outputOnly'/>
<field name='HumanoidRoot_rotation_changedtype='SFRotationaccessType='outputOnly'/>
<field name='lower_body_rotation_changedtype='SFRotationaccessType='outputOnly'/>
<field name='l_hip_rotation_changedtype='SFRotationaccessType='outputOnly'/>
<field name='l_knee_rotation_changedtype='SFRotationaccessType='outputOnly'/>
<field name='l_ankle_rotation_changedtype='SFRotationaccessType='outputOnly'/>
<field name='l_midtarsal_rotation_changedtype='SFRotationaccessType='outputOnly'/>
<field name='r_hip_rotation_changedtype='SFRotationaccessType='outputOnly'/>
<field name='r_knee_rotation_changedtype='SFRotationaccessType='outputOnly'/>
<field name='r_ankle_rotation_changedtype='SFRotationaccessType='outputOnly'/>
<field name='r_midtarsal_rotation_changedtype='SFRotationaccessType='outputOnly'/>
<field name='vl5_rotation_changedtype='SFRotationaccessType='outputOnly'/>
<field name='skullbase_rotation_changedtype='SFRotationaccessType='outputOnly'/>
<field name='l_shoulder_rotation_changedtype='SFRotationaccessType='outputOnly'/>
<field name='l_elbow_rotation_changedtype='SFRotationaccessType='outputOnly'/>
<field name='l_wrist_rotation_changedtype='SFRotationaccessType='outputOnly'/>
<field name='r_shoulder_rotation_changedtype='SFRotationaccessType='outputOnly'/>
<field name='r_elbow_rotation_changedtype='SFRotationaccessType='outputOnly'/>
<field name='r_wrist_rotation_changedtype='SFRotationaccessType='outputOnly'/>
</ProtoInterface>
<ProtoBody>
<Group>
<IS>
<connect nodeField='cycleIntervalprotoField='cycleInterval'/>
<connect nodeField='enabledprotoField='enabled'/>
<connect nodeField='loopprotoField='loop'/>
<connect nodeField='startTimeprotoField='startTime'/>
<connect nodeField='stopTimeprotoField='stopTime'/>
<connect nodeField='fraction_changedprotoField='fraction_changed'/>
<connect nodeField='isActiveprotoField='isActive'/>
</IS>
</TimeSensor>
<!-- ROUTE information for HUMANOIDROOT_POSITION_ANIMATOR node:  [from TIMER.fraction_changed to set_fraction ] -->
<PositionInterpolator DEF='HUMANOIDROOT_POSITION_ANIMATORkey='0 0.04167 0.125 0.1667 0.2083 0.25 0.2917 0.375 0.4583 0.5 0.5417 0.5833 0.625 0.7083 0.75 0.7917 0.875 0.9167 1keyValue='0 -0.00928 0 0 -0.003858 0 0 -0.008847 0 0 -0.01486 0 0 -0.02641 0 0 -0.03934 0 0 -0.0502 0 0 -0.07469 0 0 -0.02732 0 0 -0.01608 0 0 -0.01129 0 0 -0.005819 0 0 -0.002004 0 0 -0.002579 0 0 -0.0143 0 0 -0.03799 0 0 -0.05648 0 0 -0.045 0 0 -0.00928 0'>
<IS>
<connect nodeField='value_changedprotoField='HumanoidRoot_translation_changed'/>
</IS>
</PositionInterpolator>
<!-- ROUTE information for HUMANOIDROOT_ANIMATOR node:  [from TIMER.fraction_changed to set_fraction ] -->
<OrientationInterpolator DEF='HUMANOIDROOT_ANIMATORkey='0 1keyValue='0 1 0 0 0 1 0 0'>
<IS>
<connect nodeField='value_changedprotoField='HumanoidRoot_rotation_changed'/>
</IS>
</OrientationInterpolator>
<!-- ROUTE information for SACROILIAC_ANIMATOR node:  [from TIMER.fraction_changed to set_fraction ] -->
<OrientationInterpolator DEF='SACROILIAC_ANIMATORkey='0 0.5 1.0keyValue='0.0 0.0 -1.0 0.1056 0.0 0.0 1.0 0.09018 0.0 0.0 -1.0 0.1056'>
<IS>
<connect nodeField='value_changedprotoField='lower_body_rotation_changed'/>
</IS>
</OrientationInterpolator>
<!-- ROUTE information for L_HIP_ANIMATOR node:  [from TIMER.fraction_changed to set_fraction ] -->
<OrientationInterpolator DEF='L_HIP_ANIMATORkey='0 0.25 0.375 0.5 0.6667 0.7917 0.9167 1keyValue='-0.873 0.06094 0.484 0.2865 0.9963 -0.01057 0.08481 0.2488 0.9965 0.01591 -0.08222 0.3836 -0.7018 -0.03223 -0.7117 0.1289 -1 0 0 0.5518 -0.9964 0.02231 0.0817 0.5351 -0.9809 0.04912 0.1881 0.5204 -0.873 0.06094 0.484 0.2865'>
<IS>
<connect nodeField='value_changedprotoField='l_hip_rotation_changed'/>
</IS>
</OrientationInterpolator>
<!-- ROUTE information for L_KNEE_ANIMATOR node:  [from TIMER.fraction_changed to set_fraction ] -->
<OrientationInterpolator DEF='L_KNEE_ANIMATORkey='0 0.2083 0.375 0.5 0.6667 0.7917 0.9167 1keyValue='1 0 0 0.3226 1 0 0 0.1556 1 0 0 0.08678 1 0 0 0.8751 1 0 0 1.131 1 0 0 0.09961 1 0 0 0.3942 1 0 0 0.3226'>
<IS>
<connect nodeField='value_changedprotoField='l_knee_rotation_changed'/>
</IS>
</OrientationInterpolator>
<!-- ROUTE information for L_ANKLE_ANIMATOR node:  [from TIMER.fraction_changed to set_fraction ] -->
<OrientationInterpolator DEF='L_ANKLE_ANIMATORkey='0 0.125 0.2083 0.375 0.6667 0.9167 1keyValue='-1 0 0 0.06714 -1 0 0 0.2152 -1 0 0 0.3184 -1 0 0 0.4717 -1 0 0 0.2912 1 0 0 0.1222 -1 0 0 0.06714'>
<IS>
<connect nodeField='value_changedprotoField='l_ankle_rotation_changed'/>
</IS>
</OrientationInterpolator>
<!-- ROUTE information for L_MIDTARSAL_ANIMATOR node:  [from TIMER.fraction_changed to set_fraction ] -->
<OrientationInterpolator DEF='L_MIDTARSAL_ANIMATORkey='0 0.5 1keyValue='1 0 0 0 1 0 0 -0.2 1 0 0 0'>
<IS>
<connect nodeField='value_changedprotoField='l_midtarsal_rotation_changed'/>
</IS>
</OrientationInterpolator>
<!-- ROUTE information for R_HIP_ANIMATOR node:  [from TIMER.fraction_changed to set_fraction ] -->
<OrientationInterpolator DEF='R_HIP_ANIMATORkey='0 0.125 0.2083 0.2917 0.375 0.5 0.6667 0.7917 0.9167 1keyValue='-0.5831 0.03511 0.8116 0.1481 -0.995 0.02296 0.09674 0.4683 -1 0.00192 0.007964 0.4732 -0.998 -0.0158 -0.06102 0.5079 -0.9911 -0.03541 -0.1286 0.5419 -0.9131 -0.06243 -0.403 0.3361 -0.4306 -0.07962 -0.899 0.07038 1 0 0 0.2571 0.9891 -0.02805 0.1444 0.3879 -0.5831 0.03511 0.8116 0.1481'>
<IS>
<connect nodeField='value_changedprotoField='r_hip_rotation_changed'/>
</IS>
</OrientationInterpolator>
<!-- ROUTE information for R_KNEE_ANIMATOR node:  [from TIMER.fraction_changed to set_fraction ] -->
<OrientationInterpolator DEF='R_KNEE_ANIMATORkey='0 0.125 0.2083 0.2917 0.375 0.5 0.6667 0.7917 0.9167 1keyValue='1 0 0 0.8573 1 0 0 0.8926 1 0 0 0.5351 1 0 0 0.1756 1 0 0 0.1194 1 0 0 0.3153 1 -1.176e-08 -4.971e-09 0.09354 1 0 0 0.08558 1 0 0 0.2475 1 0 0 0.8573'>
<IS>
<connect nodeField='value_changedprotoField='r_knee_rotation_changed'/>
</IS>
</OrientationInterpolator>
<!-- ROUTE information for R_ANKLE_ANIMATOR node:  [from TIMER.fraction_changed to set_fraction ] -->
<OrientationInterpolator DEF='R_ANKLE_ANIMATORkey='0 0.125 0.2083 0.375 0.4583 0.5 0.6667 0.75 0.7917 0.9167 1keyValue='0 0 1 0 -1 0 0 0.3533 -1 0 0 0.1072 1 0 0 0.2612 1 -1.641e-07 1.827e-08 0.1268 -1 0 0 0.01793 -1 0 0 0.05824 -1 0 0 0.2398 -1 0 0 0.35 -1 0 0 0.3322 0 0 1 0'>
<IS>
<connect nodeField='value_changedprotoField='r_ankle_rotation_changed'/>
</IS>
</OrientationInterpolator>
<!-- ROUTE information for R_MIDTARSAL_ANIMATOR node:  [from TIMER.fraction_changed to set_fraction ] -->
<OrientationInterpolator DEF='R_MIDTARSAL_ANIMATORkey='0 0.5 1keyValue='1 0 0 -0.2 1 0 0 0 1 0 0 -0.2'>
<IS>
<connect nodeField='value_changedprotoField='r_midtarsal_rotation_changed'/>
</IS>
</OrientationInterpolator>
<!-- ROUTE information for VL5_ANIMATOR node:  [from TIMER.fraction_changed to set_fraction ] -->
<OrientationInterpolator DEF='VL5_ANIMATORkey='0 0.2083 0.375 0.75 0.8333 1keyValue='0 1 0 0.0826 -0.01972 -0.5974 0.8017 0.08231 0.009296 -0.9648 0.2627 0.1734 -0.01238 0.9549 -0.2968 0.08732 -0.008125 0.9691 -0.2463 0.158 0 1 0 0.0826'>
<IS>
<connect nodeField='value_changedprotoField='vl5_rotation_changed'/>
</IS>
</OrientationInterpolator>
<!-- ROUTE information for SKULLBASE_ANIMATOR node:  [from TIMER.fraction_changed to set_fraction ] -->
<OrientationInterpolator DEF='SKULLBASE_ANIMATORkey='0.0 0.375 0.4167 0.5 0.5833 0.6667 0.75 0.8333 0.9167 1.0keyValue='0.0 -1.0 0.0 0.08642 0.0 1.0 0.0 0.1825 0.0 1.0 0.0 0.1505 0.0 1.0 0.0 0.1053 0.0 1.0 0.0 0.04391 0.0 -1.0 0.0 0.03119 0.0 -1.0 0.0 0.07936 0.0 -1.0 0.0 0.1616 0.0 -1.0 0.0 0.155 0.0 -1.0 0.0 0.08642'>
<IS>
<connect nodeField='value_changedprotoField='skullbase_rotation_changed'/>
</IS>
</OrientationInterpolator>
<!-- ROUTE information for L_SHOULDER_ANIMATOR node:  [from TIMER.fraction_changed to set_fraction ] -->
<OrientationInterpolator DEF='L_SHOULDER_ANIMATORkey='0 0.375 0.9167 1keyValue='1 0 0 0.1189 -1 -5.928e-07 1.525e-07 0.1861 1 -2.038e-07 -1.257e-07 0.3357 1 0 0 0.1189'>
<IS>
<connect nodeField='value_changedprotoField='l_shoulder_rotation_changed'/>
</IS>
</OrientationInterpolator>
<!-- ROUTE information for L_ELBOW_ANIMATOR node:  [from TIMER.fraction_changed to set_fraction ] -->
<OrientationInterpolator DEF='L_ELBOW_ANIMATORkey='0 0.375 0.9167 1keyValue='-1 -1.58298e-07 8.15967e-08 0.0659878 -1 -3.28826e-08 -2.31665e-08 0.488383 -1 3.06462e-06 -3.11947e-06 0.0177536 -1 -1.58298e-07 8.15967e-08 0.0659878'>
<IS>
<connect nodeField='value_changedprotoField='l_elbow_rotation_changed'/>
</IS>
</OrientationInterpolator>
<!-- ROUTE information for L_WRIST_ANIMATOR node:  [from TIMER.fraction_changed to set_fraction ] -->
<OrientationInterpolator DEF='L_WRIST_ANIMATORkey='0 0.375 0.9167 1keyValue='1.51276e-06 -1 1.7724e-06 0.461076 -0.330195 -0.927451 0.175516 0.538852 0.0327774 -0.999314 -0.0172185 0.492033 1.51276e-06 -1 1.7724e-06 0.461076'>
<IS>
<connect nodeField='value_changedprotoField='l_wrist_rotation_changed'/>
</IS>
</OrientationInterpolator>
<!-- ROUTE information for R_SHOULDER_ANIMATOR node:  [from TIMER.fraction_changed to set_fraction ] -->
<OrientationInterpolator DEF='R_SHOULDER_ANIMATORkey='0 0.375 0.9167 1keyValue='-1 -7.689e-07 -1.48e-07 0.09346 1 5.004e-08 2.254e-08 0.3197 -1 -1.104e-07 5.267e-10 0.1564 -1 -7.689e-07 -1.48e-07 0.09346'>
<IS>
<connect nodeField='value_changedprotoField='r_shoulder_rotation_changed'/>
</IS>
</OrientationInterpolator>
<!-- ROUTE information for R_ELBOW_ANIMATOR node:  [from TIMER.fraction_changed to set_fraction ] -->
<OrientationInterpolator DEF='R_ELBOW_ANIMATORkey='0 0.375 0.9167 1keyValue='-1 -4.45619e-08 2.70318e-08 0.411508 -1 8.16742e-07 -1.09556e-07 0.0925011 -1 -2.47628e-08 -7.02862e-09 0.572568 -1 -4.45619e-08 2.70318e-08 0.411508'>
<IS>
<connect nodeField='value_changedprotoField='r_elbow_rotation_changed'/>
</IS>
</OrientationInterpolator>
<!-- ROUTE information for R_WRIST_ANIMATOR node:  [from TIMER.fraction_changed to set_fraction ] -->
<OrientationInterpolator DEF='R_WRIST_ANIMATORkey='0 0.375 0.9167 1keyValue='-0.8129 0.4759 -0.3357 0.1346 0.1533 -0.9878 0.02582 0.3902 -0.5701 0.7604 -0.311 0.366 -0.8129 0.4759 -0.3357 0.1346'>
<IS>
<connect nodeField='value_changedprotoField='r_wrist_rotation_changed'/>
</IS>
</OrientationInterpolator>
</Group>
< ROUTE  fromNode=' TIMER' fromField='fraction_changed' toNode=' HUMANOIDROOT_POSITION_ANIMATOR' toField='set_fraction'/>
< ROUTE  fromNode=' TIMER' fromField='fraction_changed' toNode=' HUMANOIDROOT_ANIMATOR' toField='set_fraction'/>
< ROUTE  fromNode=' TIMER' fromField='fraction_changed' toNode=' SACROILIAC_ANIMATOR' toField='set_fraction'/>
< ROUTE  fromNode=' TIMER' fromField='fraction_changed' toNode=' L_HIP_ANIMATOR' toField='set_fraction'/>
< ROUTE  fromNode=' TIMER' fromField='fraction_changed' toNode=' L_KNEE_ANIMATOR' toField='set_fraction'/>
< ROUTE  fromNode=' TIMER' fromField='fraction_changed' toNode=' L_ANKLE_ANIMATOR' toField='set_fraction'/>
< ROUTE  fromNode=' TIMER' fromField='fraction_changed' toNode=' L_MIDTARSAL_ANIMATOR' toField='set_fraction'/>
< ROUTE  fromNode=' TIMER' fromField='fraction_changed' toNode=' R_HIP_ANIMATOR' toField='set_fraction'/>
< ROUTE  fromNode=' TIMER' fromField='fraction_changed' toNode=' R_KNEE_ANIMATOR' toField='set_fraction'/>
< ROUTE  fromNode=' TIMER' fromField='fraction_changed' toNode=' R_ANKLE_ANIMATOR' toField='set_fraction'/>
< ROUTE  fromNode=' TIMER' fromField='fraction_changed' toNode=' R_MIDTARSAL_ANIMATOR' toField='set_fraction'/>
< ROUTE  fromNode=' TIMER' fromField='fraction_changed' toNode=' VL5_ANIMATOR' toField='set_fraction'/>
< ROUTE  fromNode=' TIMER' fromField='fraction_changed' toNode=' SKULLBASE_ANIMATOR' toField='set_fraction'/>
< ROUTE  fromNode=' TIMER' fromField='fraction_changed' toNode=' L_SHOULDER_ANIMATOR' toField='set_fraction'/>
< ROUTE  fromNode=' TIMER' fromField='fraction_changed' toNode=' L_ELBOW_ANIMATOR' toField='set_fraction'/>
< ROUTE  fromNode=' TIMER' fromField='fraction_changed' toNode=' L_WRIST_ANIMATOR' toField='set_fraction'/>
< ROUTE  fromNode=' TIMER' fromField='fraction_changed' toNode=' R_SHOULDER_ANIMATOR' toField='set_fraction'/>
< ROUTE  fromNode=' TIMER' fromField='fraction_changed' toNode=' R_ELBOW_ANIMATOR' toField='set_fraction'/>
< ROUTE  fromNode=' TIMER' fromField='fraction_changed' toNode=' R_WRIST_ANIMATOR' toField='set_fraction'/>
</ProtoBody>
</ProtoDeclare>
<!-- ====================================== -->
<!-- Point to example use in case someone inspects this file -->
<Anchor description='InterchangableActorsViaDynamicRoutingparameter='"target=_blank"'
  url=' InterchangableActorsViaDynamicRouting.x3d"https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Prototypes/InterchangableActorsViaDynamicRouting.x3d" "InterchangableActorsViaDynamicRouting.wrl" "https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Prototypes/InterchangableActorsViaDynamicRouting.wrl" ' >
<Shape>
<Text string='"LOA1_WalkAnimation.x3d" "defines a prototype" "for animating a humanoid." "" "Click this text to see" "InterchangableActorsViaDynamicRouting example."'>
<FontStyle justify='"MIDDLE" "MIDDLE"size='0.8'/>
</Text>
<Appearance>
<Material diffuseColor='1 1 0.2'/>
</Appearance>
</Shape>
</Anchor>
</Scene>
</X3D>
<!--

to top <!-- Event Graph ROUTE Table shows event connections -->
 
<!-- Index for DEF nodes: HUMANOIDROOT_ANIMATOR, HUMANOIDROOT_POSITION_ANIMATOR, L_ANKLE_ANIMATOR, L_ELBOW_ANIMATOR, L_HIP_ANIMATOR, L_KNEE_ANIMATOR, L_MIDTARSAL_ANIMATOR, L_SHOULDER_ANIMATOR, L_WRIST_ANIMATOR, R_ANKLE_ANIMATOR, R_ELBOW_ANIMATOR, R_HIP_ANIMATOR, R_KNEE_ANIMATOR, R_MIDTARSAL_ANIMATOR, R_SHOULDER_ANIMATOR, R_WRIST_ANIMATOR, SACROILIAC_ANIMATOR, SKULLBASE_ANIMATOR, TIMER, VL5_ANIMATOR

Index for ProtoDeclare definition: LOA1_WalkAnimation
-->

Event Graph ROUTE Table with 19 ROUTE connections total, showing X3D event-model relationships for this scene.

Each row shows an event cascade that may occur during a single timestamp interval between frame renderings, as part of the X3D execution model.

This node has 19 outgoing ROUTEs, which is greater than $maxROUTEdepth=8
TIMER
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
HUMANOIDROOT_POSITION_ANIMATOR
PositionInterpolator
set_fraction
SFFloat
TIMER
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
HUMANOIDROOT_ANIMATOR
OrientationInterpolator
set_fraction
SFFloat
TIMER
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
SACROILIAC_ANIMATOR
OrientationInterpolator
set_fraction
SFFloat
TIMER
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
L_HIP_ANIMATOR
OrientationInterpolator
set_fraction
SFFloat
TIMER
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
L_KNEE_ANIMATOR
OrientationInterpolator
set_fraction
SFFloat
TIMER
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
L_ANKLE_ANIMATOR
OrientationInterpolator
set_fraction
SFFloat
TIMER
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
L_MIDTARSAL_ANIMATOR
OrientationInterpolator
set_fraction
SFFloat
TIMER
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
R_HIP_ANIMATOR
OrientationInterpolator
set_fraction
SFFloat


-->

<!-- Online at
https://www.web3d.org/x3d/content/examples/HumanoidAnimation/Prototypes/LOA1_WalkAnimationIndex.html -->
<!-- Version control at
https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/HumanoidAnimation/Prototypes/LOA1_WalkAnimation.x3d -->

<!-- Color legend: X3D terminology <X3dNode DEF='idName' field='value'/> matches XML terminology <XmlElement DEF='idName' attribute='value'/>
(Light-blue background: event-based behavior node or statement) (Grey background inside box: inserted documentation) (Magenta background: X3D Extensibility)
    <ProtoDeclare name='ProtoName'> <field name='fieldName'/> </ProtoDeclare> -->

to top <!-- For additional help information about X3D scenes, please see X3D Tooltips, X3D Resources, and X3D Scene Authoring Hints. -->