﻿<?xml version="1.0" encoding="UTF-8"?>
<X3D profile="Immersive"  version="3.1">
  <Transform>
    <MetadataSet name='Template'>
      <MetadataString containerField='value' name='TemplateID' value='"FadeOutToBlackEffectTemplate"'/>
      <MetadataInteger containerField='value' name='TemplateKind' value='3'/>
      <MetadataString containerField='value' name='TimeDependentNode' value='""'/>
      <MetadataString containerField='value' name='TemplateTitle' value='"@"'/>
      <MetadataString containerField='value' name='TemplateCategory' value='"Motions and Fades"'/>
      <MetadataString containerField='value' name='TemplateThumbnailPath' value='""'/>
      <MetadataInteger containerField='value' name='TemplateSubType' value='1'/>
      <MetadataInteger containerField='value' name='TemplateEffectKind' value='1'/>
    </MetadataSet>

    <!--OUT properties -->
    <Transform>
      <MetadataSet DEF='OutSockets'>
        <MetadataSet containerField='value' name='OutSocket'>
          <MetadataString containerField='value' name='socketName' value='"effectShader"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketConnectToExtent' value='"current"'/>
          <MetadataString containerField='value' name='socketParentDEF' value='""'/>
          <MetadataString containerField='value' name='socketChildNodeDEF' value='"FadeOutShader"'/>
        </MetadataSet>
      </MetadataSet>
    </Transform>

    <!--IN properties -->
    <Transform>
      <MetadataSet DEF='InSockets'>
        <MetadataSet containerField='value' name='InSocket'>
          <MetadataString containerField='value' name='socketName' value='"effectTimer"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketParentDEF' value='"FadeOutEffectInterpolator"'/>
          <MetadataString containerField='value' name='socketConnectAttribute' value='"set_fraction"'/>
        </MetadataSet>
        <MetadataSet containerField='value' name='InSocket'>
          <MetadataString containerField='value' name='socketName' value='"effectDuration"'/>
          <MetadataFloat containerField='value' name='socketCompatibilitySet' value='1.0'/>
          <MetadataString containerField='value' name='socketParentDEF' value='"FadeOutEffectDurationToFractionInterpolator"'/>
          <MetadataString containerField='value' name='socketConnectAttribute' value='"key"'/>
          <MetadataInteger containerField='value' name='socketConnectIndex' value='1'/>
        </MetadataSet>
      </MetadataSet>
    </Transform>

    <!--Socket Nodes scratch pad (only nodes with def's are injected)-->
    <Transform>
      <Shape>
      <Appearance>
        <FadeShader DEF='FadeOutShader' fromColor='0 0 0 1' fraction='1'/>
      </Appearance>
    </Shape>
    </Transform>

    <!--Nodes that need to be injected-->
    <Transform DEF='InjectSet'>
      <!--Use the duration (replacing the placeholder 5) to convert the desired fade-out time (0.6 seconds) to a fraction of the total length-->
      <ScalarInterpolator DEF='FadeOutEffectDurationToFractionInterpolator' key='0 5' keyValue='1 0' set_fraction='0.6'/>

      <!--Limit the fade duration to no more than 3/10 of the clip duration-->
      <ScalarInterpolator DEF='FadeOutEffectFractionLimiterInterpolator' key='0.7 1' keyValue='0.7 1'/>

      <!--The appropriate fraction is routed into the second key entry-->
      <ScalarInterpolator DEF='FadeOutEffectInterpolator' key='0 0.88 1' keyValue='1 1 0'/>

      <ROUTE fromNode='FadeOutEffectDurationToFractionInterpolator' fromField='value_changed' toNode='FadeOutEffectFractionLimiterInterpolator' toField='set_fraction'/>
      <ROUTE fromNode='FadeOutEffectFractionLimiterInterpolator' fromField='value_changed' toNode='FadeOutEffectInterpolator' toField='key' toIndex='1'/>
      <ROUTE fromNode='FadeOutEffectInterpolator' fromField='value_changed' toNode='FadeOutShader' toField='set_fraction'/>
    </Transform>

  </Transform>
</X3D>
