X3D Model Documentation: WinterAndSpringHumanoidTimings.x3d

  1  <?xml version="1.0" encoding="UTF-8"?>
  2  <!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.3//EN" "https://www.web3d.org/specifications/x3d-3.3.dtd">
  3  <X3D profile='Immersive' version='3.3 xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='http://www.web3d.org/specifications/x3d-3.3.xsd'>
  4       <head>
  5            <meta name='titlecontent='WinterAndSpringHumanoidTimings.x3d'/>
  6            <meta name='descriptioncontent='Example animation timings, manually translated from tool outputs and export.'/>
  7            <meta name='referencecontent='https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/HumanoidAnimation/WinterAndSpring/originals/WinterAndSpringHumanoidTimings.x3dv'/>
  8            <meta name='infocontent='reference .x3dv model successfully translated by Castle Game Engine, IICM, and Xj3D import (with loss of comments)'/>
  9            <meta name='creatorcontent='Katy Schildmeyer'/>
 10            <meta name='creatorcontent='Carol McDonald'/>
 11            <meta name='translatorcontent='Joe Williams'/>
 12            <meta name='translatorcontent='Don Brutzman'/>
 13            <meta name='createdcontent='2 July 2023'/>
 14            <meta name='translatedcontent='9 July 2023'/>
 15            <meta name='modifiedcontent='19 September 2023'/>
 16            <meta name='hintcontent='MetadataString approach for name=poses sequence, matching the key/keyValue pairs, is experimental but seems unambiguous.'/>
 17            <meta name='identifiercontent='https://www.web3d.org/x3d/content/examples/HumanoidAnimation/WinterAndSpring/WinterAndSpringHumanoidTimings.x3d'/>
 18            <meta name='generatorcontent='Cinema 4D https://www.maxon.net/en/cinema-4d'/>
 19            <meta name='generatorcontent='X3D-Edit 4.0, https://savage.nps.edu/X3D-Edit'/>
 20            <meta name='licensecontent='../license.html'/>
 21       </head>
<!--

<!--
Event Graph ROUTE Table shows event connections.
-->

<!-- to top Index for DEF nodes: Background3Black, Background3Sequencer, Background4Sequencer, Background4SkyBlueGreenGrass, Background5LightGrey, Background5Sequencer, Background6DarkGrey, Background6Sequencer, Clock100Seconds, Clock10Seconds, EntryView1, EntryView2, Gramps_HumanoidRoot_TranslationInterpolator, Leif_HumanoidRoot_TranslationInterpolator, Lily_HumanoidRoot_TranslationInterpolator, ModelDescriptionText, Root4, Root5, Root6, TextRoot, Tufani_HumanoidRoot_TranslationInterpolator

Index for Viewpoint nodes: EntryView1, EntryView2
-->
 22       <Scene>
 23            <WorldInfo title='WinterAndSpringHumanoidTimings.x3d'/>
 24            <Viewpoint DEF='EntryView1description='Hello characters 1position='0 2 40'/>
 25            <Viewpoint DEF='EntryView2centerOfRotation='0 10 10description='Hello characters 2orientation='0 1 0 -0.643501position='-15 10 30'>
 26                 <!-- local lookat point: 0 10 10 -->
 27            </Viewpoint>
 28 
          <!-- ROUTE information for TextRoot node:  [from Gramps_HumanoidRoot_TranslationInterpolator.value_changed to translation ] -->
          <Transform DEF='TextRoot'>
 29                 <Shape DEF='ModelDescriptionText'>
 30                      <Text string='"This scene tests" "" "experimental approaches" "" "for human animation"'>
 31                           <FontStyle family='"SANS"justify='"MIDDLE" "MIDDLE"size='0.8style='BOLD'/>
 32                      </Text>
 33                      <Appearance>
 34                           <Material diffuseColor='0.960784 0.894118 0'/>
 35                      </Appearance>
 36                 </Shape>
 37            </Transform>
 38 
          <!-- ROUTE information for Root4 node:  [from Leif_HumanoidRoot_TranslationInterpolator.value_changed to translation ] -->
          <Transform DEF='Root4'/>
 39 
          <!-- ROUTE information for Root5 node:  [from Lily_HumanoidRoot_TranslationInterpolator.value_changed to translation ] -->
          <Transform DEF='Root5'/>
 40 
          <!-- ROUTE information for Root6 node:  [from Tufani_HumanoidRoot_TranslationInterpolator.value_changed to translation ] -->
          <Transform DEF='Root6'/>
 41            <!-- WinterAndSpringHumanoidTimings -->
 42            <!-- Gramps_humanoid root is at 0 0.875 0 at start, now at given x and z with root now changed in height to 0.95 to #add pathway height. The actual Gramps height (y) may be slightly different but use this value for now. -->
 43 
          <!-- ROUTE information for Gramps_HumanoidRoot_TranslationInterpolator node:  [from Clock10Seconds.fraction_changed to set_fraction ] [from Clock100Seconds.fraction_changed to set_fraction ] [from value_changed to TextRoot.translation ] -->
          <PositionInterpolator DEF='Gramps_HumanoidRoot_TranslationInterpolatorkey='0 0.09 0.11 0.22 0.043 0.55 0.63 0.73 0.85 0.86 1keyValue='6.8557 0.95 0.5 6.8557 0.95 0.5 6.8557 0.95 0.5 9.8557 0.95 3.5 9.8557 0.95 3.5 9.8557 0.95 3.5 14.3558 0.95 8.0 16.8558 0.95 15.0 21.3557 0.95 24.5 21.3557 0.95 24.5 21.3557 0.95 24.5'>
 44                 <MetadataString name='posesvalue='"Gramps_Stand01" "Gramps_Stand01" "Gramps_Walk01" "Gramps_Stand02" "Gramps_Turn01" "Gramps_Walk01" "Gramps_Walk02" "Gramps_Skip01" "Gramps_Stand03" "Gramps_Stand03" "Gramps_Stand03"'/>
 45            </PositionInterpolator>
 46 
          <!-- ROUTE information for Leif_HumanoidRoot_TranslationInterpolator node:  [from Clock10Seconds.fraction_changed to set_fraction ] [from Clock100Seconds.fraction_changed to set_fraction ] [from value_changed to Root4.translation ] -->
          <PositionInterpolator DEF='Leif_HumanoidRoot_TranslationInterpolatorkey='0 0.09 0.11 0.223 0.043 0.55 0.63 0.73 0.85 0.86 1keyValue='-7.9962 0.400 3.000 -7.9962 0.400 3.000 -7.9962 0.400 3.000 -7.9962 0.400 3.000 9.004 0.475 3.4999 11.5048 0.475 3.3699 16.0038 0.475 7.8699 18.5038 0.475 14.8699 23.0038 0.475 24.3699 23.0038 0.475 24.3699 23.0038 0.475 24.3699'>
 47                 <MetadataString name='posesvalue='"Leif_Stand01" "Leif_Stand01" "Leif_Stand01" "Leif_Run01" "Leif_Turn01" "Leif_Walk01" "Leif_Walk01" "Leif_Skip01" "Leif_Stand01" "Leif_Stand01" "Leif_Stand01"'/>
 48            </PositionInterpolator>
 49 
          <!-- ROUTE information for Lily_HumanoidRoot_TranslationInterpolator node:  [from Clock10Seconds.fraction_changed to set_fraction ] [from Clock100Seconds.fraction_changed to set_fraction ] [from value_changed to Root5.translation ] -->
          <PositionInterpolator DEF='Lily_HumanoidRoot_TranslationInterpolatorkey='0 0.09 0.11 0.225 0.043 0.55 0.63 0.73 0.85 0.86 1keyValue='-8.0962 0.400 5.600 -8.0962 0.400 5.600 -8.0962 0.400 5.600 -8.0962 0.400 5.600 8.9038 0.475 4.0999 10.6538 0.475 3.3499 15.1538 0.475 7.8499 17.6538 0.475 14.8499 22.1538 0.475 24.3499 22.1538 0.475 24.3499 22.1538 0.475 24.3499'>
 50                 <MetadataString name='posesvalue='"Lily_Stand01" "Lily_Stand01" "Lily_Stand01" "Leif_Run01" "Lily_Turn01" "Lily_Walk01" "Lily_Walk01" "Lily_Skip01" "Lily_Stand01" "Lily_Stand01" "Lily_Stand01"'/>
 51            </PositionInterpolator>
 52 
          <!-- ROUTE information for Tufani_HumanoidRoot_TranslationInterpolator node:  [from Clock10Seconds.fraction_changed to set_fraction ] [from Clock100Seconds.fraction_changed to set_fraction ] [from value_changed to Root6.translation ] -->
          <PositionInterpolator DEF='Tufani_HumanoidRoot_TranslationInterpolatorkey='0 0.09 0.11 0.227 0.043 0.55 0.63 0.73 0.85 0.86 1keyValue='-8.0962 0.400 6.400 -8.0962 0.400 6.400 -8.0962 0.400 6.400 -8.0962 0.400 6.400 9.40338 0.475 4.3999 9.1538 0.475 3.2699 13.6538 0.475 7.7699 16.1538 0.475 14.7699 20.6538 0.475 24.2699 20.6538 0.475 24.2699 20.6538 0.475 24.2699'>
 53                 <MetadataString name='posesvalue='"Tufani_Stand01" "Tufani_Stand01" "Tufani_Stand01" "Tufani_Run01" "Tufani_Turn01" "Tufani_Walk01" "Tufani_Walk01" "Tufani_Skip01" "Tufani_Stand01" "Tufani_Stand01" "Tufani_Stand01"'/>
 54            </PositionInterpolator>
 55            <!-- Now add Background nodes with corresponding timing, as controlled by an identical key array -->
 56            <!-- TODO are we missing Background1 and Background2? -->
 57            <!-- This is black for all -->
 58 
          <!-- ROUTE information for Background3Black node:  [from Background3Sequencer.value_changed to set_bind ] -->
          <Background DEF='Background3Black'/>
 59            <!-- This is blue sky and green grass -->
 60 
          <!-- ROUTE information for Background4SkyBlueGreenGrass node:  [from Background4Sequencer.value_changed to set_bind ] -->
          <Background DEF='Background4SkyBlueGreenGrassgroundAngle='1.57groundColor='0.356863 0.639216 0 0.721569 1 0.501961skyColor='0 0.71 0.886'/>
 61            <!-- This is light gray sky and green grass -->
 62 
          <!-- ROUTE information for Background5LightGrey node:  [from Background5Sequencer.value_changed to set_bind ] -->
          <Background DEF='Background5LightGreyskyColor='0.827 0.827 0.827'/>
 63            <!-- This is black background and white text for all -->
 64 
          <!-- ROUTE information for Background6DarkGrey node:  [from Background6Sequencer.value_changed to set_bind ] -->
          <Background DEF='Background6DarkGreyskyColor='0.6 0.2 0.2'/>
 65            <!-- Animation controls -->
 66 
 67 
 68 
          <!-- ROUTE information for Background3Sequencer node:  [from Clock10Seconds.fraction_changed to set_fraction ] [from Clock100Seconds.fraction_changed to set_fraction ] [from value_changed to Background3Black.set_bind ] -->
          <BooleanSequencer DEF='Background3Sequencerkey='0 0.09 0.11 0.22 0.043 0.55 0.63 0.73 0.85 0.86 1keyValue='true true true false false false false false false false false'/>
 69 
          <!-- ROUTE information for Background4Sequencer node:  [from Clock10Seconds.fraction_changed to set_fraction ] [from Clock100Seconds.fraction_changed to set_fraction ] [from value_changed to Background4SkyBlueGreenGrass.set_bind ] -->
          <BooleanSequencer DEF='Background4Sequencerkey='0 0.09 0.11 0.22 0.043 0.55 0.63 0.73 0.85 0.86 1keyValue='false false false true true false false false false false false'/>
 70 
          <!-- ROUTE information for Background5Sequencer node:  [from Clock10Seconds.fraction_changed to set_fraction ] [from Clock100Seconds.fraction_changed to set_fraction ] [from value_changed to Background5LightGrey.set_bind ] -->
          <BooleanSequencer DEF='Background5Sequencerkey='0 0.09 0.11 0.22 0.043 0.55 0.63 0.73 0.85 0.86 1keyValue='false false false false false true true true false false false'/>
 71 
          <!-- ROUTE information for Background6Sequencer node:  [from Clock10Seconds.fraction_changed to set_fraction ] [from Clock100Seconds.fraction_changed to set_fraction ] [from value_changed to Background6DarkGrey.set_bind ] -->
          <BooleanSequencer DEF='Background6Sequencerkey='0 0.09 0.11 0.22 0.043 0.55 0.63 0.73 0.85 0.86 1keyValue='false false false false false false false false true true true'/>
 72            < ROUTE  fromNode='Background3Sequencer' fromField='value_changed' toNode='Background3Black' toField='set_bind'/>
 73            < ROUTE  fromNode='Background4Sequencer' fromField='value_changed' toNode='Background4SkyBlueGreenGrass' toField='set_bind'/>
 74            < ROUTE  fromNode='Background5Sequencer' fromField='value_changed' toNode='Background5LightGrey' toField='set_bind'/>
 75            < ROUTE  fromNode='Background6Sequencer' fromField='value_changed' toNode='Background6DarkGrey' toField='set_bind'/>
 76            < ROUTE  fromNode='Clock10Seconds' fromField='fraction_changed' toNode='Background3Sequencer' toField='set_fraction'/>
 77            < ROUTE  fromNode='Clock10Seconds' fromField='fraction_changed' toNode='Background4Sequencer' toField='set_fraction'/>
 78            < ROUTE  fromNode='Clock10Seconds' fromField='fraction_changed' toNode='Background5Sequencer' toField='set_fraction'/>
 79            < ROUTE  fromNode='Clock10Seconds' fromField='fraction_changed' toNode='Background6Sequencer' toField='set_fraction'/>
 80            < ROUTE  fromNode='Clock100Seconds' fromField='fraction_changed' toNode='Background3Sequencer' toField='set_fraction'/>
 81            < ROUTE  fromNode='Clock100Seconds' fromField='fraction_changed' toNode='Background4Sequencer' toField='set_fraction'/>
 82            < ROUTE  fromNode='Clock100Seconds' fromField='fraction_changed' toNode='Background5Sequencer' toField='set_fraction'/>
 83            < ROUTE  fromNode='Clock100Seconds' fromField='fraction_changed' toNode='Background6Sequencer' toField='set_fraction'/>
 84            <!-- now move things around by modifying interpolator valuess -->
 85            < ROUTE  fromNode='Clock10Seconds' fromField='fraction_changed' toNode='Gramps_HumanoidRoot_TranslationInterpolator' toField='set_fraction'/>
 86            < ROUTE  fromNode='Clock10Seconds' fromField='fraction_changed' toNode='Leif_HumanoidRoot_TranslationInterpolator' toField='set_fraction'/>
 87            < ROUTE  fromNode='Clock10Seconds' fromField='fraction_changed' toNode='Lily_HumanoidRoot_TranslationInterpolator' toField='set_fraction'/>
 88            < ROUTE  fromNode='Clock10Seconds' fromField='fraction_changed' toNode='Tufani_HumanoidRoot_TranslationInterpolator' toField='set_fraction'/>
 89            < ROUTE  fromNode='Clock100Seconds' fromField='fraction_changed' toNode='Gramps_HumanoidRoot_TranslationInterpolator' toField='set_fraction'/>
 90            < ROUTE  fromNode='Clock100Seconds' fromField='fraction_changed' toNode='Leif_HumanoidRoot_TranslationInterpolator' toField='set_fraction'/>
 91            < ROUTE  fromNode='Clock100Seconds' fromField='fraction_changed' toNode='Lily_HumanoidRoot_TranslationInterpolator' toField='set_fraction'/>
 92            < ROUTE  fromNode='Clock100Seconds' fromField='fraction_changed' toNode='Tufani_HumanoidRoot_TranslationInterpolator' toField='set_fraction'/>
 93            <!-- now move things around by changing the Transform translation values -->
 94            < ROUTE  fromNode='Gramps_HumanoidRoot_TranslationInterpolator' fromField='value_changed' toNode='TextRoot' toField='translation'/>
 95            < ROUTE  fromNode='Leif_HumanoidRoot_TranslationInterpolator' fromField='value_changed' toNode='Root4' toField='translation'/>
 96            < ROUTE  fromNode='Lily_HumanoidRoot_TranslationInterpolator' fromField='value_changed' toNode='Root5' toField='translation'/>
 97            < ROUTE  fromNode='Tufani_HumanoidRoot_TranslationInterpolator' fromField='value_changed' toNode='Root6' toField='translation'/>
 98       </Scene>
 99  </X3D>
<!--

<!--
Event Graph ROUTE Table shows event connections.
-->

<!-- to top Index for DEF nodes: Background3Black, Background3Sequencer, Background4Sequencer, Background4SkyBlueGreenGrass, Background5LightGrey, Background5Sequencer, Background6DarkGrey, Background6Sequencer, Clock100Seconds, Clock10Seconds, EntryView1, EntryView2, Gramps_HumanoidRoot_TranslationInterpolator, Leif_HumanoidRoot_TranslationInterpolator, Lily_HumanoidRoot_TranslationInterpolator, ModelDescriptionText, Root4, Root5, Root6, TextRoot, Tufani_HumanoidRoot_TranslationInterpolator

Index for Viewpoint nodes: EntryView1, EntryView2
-->
X3D Tooltips element index: Appearance, Background, BooleanSequencer, FontStyle, head, Material, meta, MetadataString, PositionInterpolator, ROUTE, Scene, Shape, Text, TimeSensor, Transform, Viewpoint, WorldInfo, X3D, accessType and type, XML data types, field types

Event Graph ROUTE Table entries with 24 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.

Clock100Seconds
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
Background3Sequencer
BooleanSequencer
set_fraction
SFFloat
then
 
 
 
Background3Sequencer
BooleanSequencer
value_changed
SFBool

ROUTE
event to
(2)
Background3Black
Background
set_bind
SFBool
Clock100Seconds
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
Background4Sequencer
BooleanSequencer
set_fraction
SFFloat
then
 
 
 
Background4Sequencer
BooleanSequencer
value_changed
SFBool

ROUTE
event to
(2)
Background4SkyBlueGreenGrass
Background
set_bind
SFBool
Clock100Seconds
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
Background5Sequencer
BooleanSequencer
set_fraction
SFFloat
then
 
 
 
Background5Sequencer
BooleanSequencer
value_changed
SFBool

ROUTE
event to
(2)
Background5LightGrey
Background
set_bind
SFBool
Clock100Seconds
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
Background6Sequencer
BooleanSequencer
set_fraction
SFFloat
then
 
 
 
Background6Sequencer
BooleanSequencer
value_changed
SFBool

ROUTE
event to
(2)
Background6DarkGrey
Background
set_bind
SFBool
Clock100Seconds
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
Gramps_HumanoidRoot_TranslationInterpolator
PositionInterpolator
set_fraction
SFFloat
then
 
 
 
Gramps_HumanoidRoot_TranslationInterpolator
PositionInterpolator
value_changed
SFVec3f

ROUTE
event to
(2)
TextRoot
Transform
translation
SFVec3f
Clock100Seconds
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
Leif_HumanoidRoot_TranslationInterpolator
PositionInterpolator
set_fraction
SFFloat
then
 
 
 
Leif_HumanoidRoot_TranslationInterpolator
PositionInterpolator
value_changed
SFVec3f

ROUTE
event to
(2)
Root4
Transform
translation
SFVec3f
Clock100Seconds
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
Lily_HumanoidRoot_TranslationInterpolator
PositionInterpolator
set_fraction
SFFloat
then
 
 
 
Lily_HumanoidRoot_TranslationInterpolator
PositionInterpolator
value_changed
SFVec3f

ROUTE
event to
(2)
Root5
Transform
translation
SFVec3f
Clock100Seconds
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
Tufani_HumanoidRoot_TranslationInterpolator
PositionInterpolator
set_fraction
SFFloat
then
 
 
 
Tufani_HumanoidRoot_TranslationInterpolator
PositionInterpolator
value_changed
SFVec3f

ROUTE
event to
(2)
Root6
Transform
translation
SFVec3f

Clock10Seconds
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
Background3Sequencer
BooleanSequencer
set_fraction
SFFloat
then
 
 
 
Background3Sequencer
BooleanSequencer
value_changed
SFBool

ROUTE
event to
(2)
Background3Black
Background
set_bind
SFBool
Clock10Seconds
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
Background4Sequencer
BooleanSequencer
set_fraction
SFFloat
then
 
 
 
Background4Sequencer
BooleanSequencer
value_changed
SFBool

ROUTE
event to
(2)
Background4SkyBlueGreenGrass
Background
set_bind
SFBool
Clock10Seconds
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
Background5Sequencer
BooleanSequencer
set_fraction
SFFloat
then
 
 
 
Background5Sequencer
BooleanSequencer
value_changed
SFBool

ROUTE
event to
(2)
Background5LightGrey
Background
set_bind
SFBool
Clock10Seconds
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
Background6Sequencer
BooleanSequencer
set_fraction
SFFloat
then
 
 
 
Background6Sequencer
BooleanSequencer
value_changed
SFBool

ROUTE
event to
(2)
Background6DarkGrey
Background
set_bind
SFBool
Clock10Seconds
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
Gramps_HumanoidRoot_TranslationInterpolator
PositionInterpolator
set_fraction
SFFloat
then
 
 
 
Gramps_HumanoidRoot_TranslationInterpolator
PositionInterpolator
value_changed
SFVec3f

ROUTE
event to
(2)
TextRoot
Transform
translation
SFVec3f
Clock10Seconds
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
Leif_HumanoidRoot_TranslationInterpolator
PositionInterpolator
set_fraction
SFFloat
then
 
 
 
Leif_HumanoidRoot_TranslationInterpolator
PositionInterpolator
value_changed
SFVec3f

ROUTE
event to
(2)
Root4
Transform
translation
SFVec3f
Clock10Seconds
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
Lily_HumanoidRoot_TranslationInterpolator
PositionInterpolator
set_fraction
SFFloat
then
 
 
 
Lily_HumanoidRoot_TranslationInterpolator
PositionInterpolator
value_changed
SFVec3f

ROUTE
event to
(2)
Root5
Transform
translation
SFVec3f
Clock10Seconds
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
Tufani_HumanoidRoot_TranslationInterpolator
PositionInterpolator
set_fraction
SFFloat
then
 
 
 
Tufani_HumanoidRoot_TranslationInterpolator
PositionInterpolator
value_changed
SFVec3f

ROUTE
event to
(2)
Root6
Transform
translation
SFVec3f
Additional guidance on X3D animation can be found in the 10-Step Animation Design Process and Event Tracing hint sheets. Have fun with X3D! 😀

-->
<!-- Online at
https://www.web3d.org/x3d/content/examples/HumanoidAnimation/WinterAndSpring/WinterAndSpringHumanoidTimingsIndex.html -->
<!-- Version control at
https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/HumanoidAnimation/WinterAndSpring/WinterAndSpringHumanoidTimings.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)
-->

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