ÿþ<?xml version="1.0" encoding="UTF-16" standalone="no"?> <fxstudio_project fileversion="3" buildversion="1.7.202.1100" originalpath="F:\devrel\SDK\MEDIA\projects\gooch_shadow.fxproj"><system_settings><searchpaths><texture><path name="E:\sw\devrel\SDK\MEDIA\projects\"/><path name="F:\devrel\SDK\MEDIA\projects\"/><path name="F:\Playpen\fx_projects\"/></texture><shader><path name="E:\sw\devrel\SDK\MEDIA\projects\"/><path name="F:\devrel\SDK\MEDIA\projects\"/><path name="F:\Playpen\fx_projects\"/></shader><model><path name="E:\sw\devrel\SDK\MEDIA\projects\"/><path name="F:\devrel\SDK\MEDIA\projects\"/><path name="F:\Playpen\fx_projects\"/></model></searchpaths></system_settings><scene objectid="1" sceneticks="100"><parameterlist objectid="2"><connectionparameter objectid="3" name="World" semantic="WORLD" type="5" rows="4" columns="4" handle="65077624" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="4.944442e-039,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="View" semantic="VIEW" type="5" rows="4" columns="4" handle="3513848" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="4.948075e-039,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="8.668087e-001,3.362824e-001,3.681803e-001,0.000000e+000,-6.407499e-007,7.383686e-001,-6.743973e-001,0.000000e+000,-4.986407e-001,5.845733e-001,6.400245e-001,0.000000e+000,-5.293796e-001,-2.590828e-001,8.407934e+000,1.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Projection" semantic="PROJECTION" type="5" rows="4" columns="4" handle="3531648" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="4.947402e-039,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="3.993679e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,3.732051e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.003922e+000,1.000000e+000,0.000000e+000,0.000000e+000,-5.010450e-002,0.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Scene Center" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="65055136" animated="0" numkeys="1" defaulttype="float3" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000"><keys><key num="0" value="-3.305488e+000, 2.810574e+000, -1.804362e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Scene Extents" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="65065088" animated="0" numkeys="1" defaulttype="float3" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000"><keys><key num="0" value="6.154682e+000, 3.978309e+000, 4.569474e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Screen Size" semantic="UNKNOWN" type="2" rows="0" columns="0" handle="65053056" animated="0" numkeys="1" defaulttype="float2" defaultvalue="2.560000e+002, 2.560000e+002"><keys><key num="0" value="4.850000e+002, 5.190000e+002"/></keys></connectionparameter><connectionparameter objectid="3" name="Show Lights" semantic="UNKNOWN" type="4" rows="0" columns="0" handle="65074976" animated="0" numkeys="1" defaulttype="bool" defaultvalue="1"><keys><key num="0" value="1"/></keys></connectionparameter><connectionparameter objectid="3" name="Show Cameras" semantic="UNKNOWN" type="4" rows="0" columns="0" handle="65053392" animated="0" numkeys="1" defaulttype="bool" defaultvalue="1"><keys><key num="0" value="1"/></keys></connectionparameter><connectionparameter objectid="3" name="Show Text" semantic="UNKNOWN" type="4" rows="0" columns="0" handle="65055416" animated="0" numkeys="1" defaulttype="bool" defaultvalue="1"><keys><key num="0" value="1"/></keys></connectionparameter></parameterlist><material objectid="4" name="goochy_shadow_2" handle="142" effect="F:\devrel\SDK\MEDIA\HLSL\goochy_shadow.fx"><parameterlist objectid="2"><connectionparameter objectid="3" name="QuadTexOffset" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="140949464" animated="0" numkeys="1" defaulttype="float" defaultvalue="5.000000e-001"><keys><key num="0" value="5.000000e-001"/></keys><annotation nametype="9" valuetype="9" name="UIWIDGET" value="NONE"/></connectionparameter><connectionparameter objectid="3" name="QuadScreenSize" semantic="VIEWPORTPIXELSIZE" type="2" rows="0" columns="0" handle="86554616" animated="0" numkeys="1" defaulttype="float2" defaultvalue="0.000000e+000, 0.000000e+000"><keys><key num="0" value="6.400000e+001, 6.400000e+001"/></keys><annotation nametype="9" valuetype="9" name="UIWIDGET" value="NONE"/></connectionparameter><connectionparameter objectid="3" name="SpotTex" semantic="UNKNOWN" type="6" rows="0" columns="0" handle="140950032" animated="0" numkeys="1" defaulttype="texture" defaultvalue=""><keys><key num="0" value=""/></keys><annotation nametype="9" valuetype="9" name="FUNCTION" value="spot_texel"/><annotation nametype="9" valuetype="8" name="HEIGHT" value="64"/><annotation nametype="9" valuetype="9" name="RESOURCETYPE" value="2D"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="NONE"/><annotation nametype="9" valuetype="8" name="WIDTH" value="64"/></connectionparameter><connectionparameter objectid="3" name="SpotSamp" semantic="UNKNOWN" type="12" rows="0" columns="0" handle="86555400" animated="0" numkeys="1" defaulttype="sampler" defaultvalue="UNKNOWN"><keys><key num="0" value="UNKNOWN"/></keys></connectionparameter><connectionparameter objectid="3" name="Script" semantic="STANDARDSGLOBAL" type="3" rows="0" columns="0" handle="140948936" animated="0" numkeys="1" defaulttype="float" defaultvalue="8.000000e-001"><keys><key num="0" value="8.000000e-001"/></keys><annotation nametype="9" valuetype="9" name="SCRIPT" value="Technique=Technique?Main:Unshadowed;"/><annotation nametype="9" valuetype="9" name="SCRIPTCLASS" value="SCENEOROBJECT"/><annotation nametype="9" valuetype="9" name="SCRIPTORDER" value="STANDARD"/><annotation nametype="9" valuetype="9" name="SCRIPTOUTPUT" value="COLOR"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="NONE"/></connectionparameter><connectionparameter objectid="3" name="ClearColor" semantic="UNKNOWN" type="0" rows="0" columns="0" handle="140947584" animated="0" numkeys="1" defaulttype="float4" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000, 0.000000e+000"><keys><key num="0" value="0.000000e+000, 0.000000e+000, 0.000000e+000, 0.000000e+000"/></keys><annotation nametype="9" valuetype="9" name="UINAME" value="background"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="COLOR"/></connectionparameter><connectionparameter objectid="3" name="ClearDepth" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="140946800" animated="0" numkeys="1" defaulttype="float" defaultvalue="1.000000e+000"><keys><key num="0" value="1.000000e+000"/></keys><annotation nametype="9" valuetype="9" name="UIWIDGET" value="NONE"/></connectionparameter><connectionparameter objectid="3" name="WorldITXf" semantic="WORLDINVERSETRANSPOSE" type="5" rows="4" columns="4" handle="140946232" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,"><keys><key num="0" value="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"/></keys><annotation nametype="9" valuetype="9" name="UIWIDGET" value="NONE"/></connectionparameter><connectionparameter objectid="3" name="WorldViewProjXf" semantic="WORLDVIEWPROJECTION" type="5" rows="4" columns="4" handle="86398640" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,"><keys><key num="0" value="1.732051e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.732051e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.012658e+000,1.000000e+000,0.000000e+000,0.000000e+000,2.481013e+000,2.500000e+000,"/></keys><annotation nametype="9" valuetype="9" name="UIWIDGET" value="NONE"/></connectionparameter><connectionparameter objectid="3" name="WorldViewXf" semantic="WORLDVIEW" type="5" rows="4" columns="4" handle="86398072" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,"><keys><key num="0" value="9.999999e-001,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,9.999999e-001,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,2.500000e+000,1.000000e+000,"/></keys><annotation nametype="9" valuetype="9" name="UIWIDGET" value="NONE"/></connectionparameter><connectionparameter objectid="3" name="WorldXf" semantic="WORLD" type="5" rows="4" columns="4" handle="86374128" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,"><keys><key num="0" value="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"/></keys><annotation nametype="9" valuetype="9" name="UIWIDGET" value="NONE"/></connectionparameter><connectionparameter objectid="3" name="ViewIXf" semantic="VIEWINVERSE" type="5" rows="4" columns="4" handle="98990152" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,"><keys><key num="0" value="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,-2.500000e+000,1.000000e+000,"/></keys><annotation nametype="9" valuetype="9" name="UIWIDGET" value="NONE"/></connectionparameter><connectionparameter objectid="3" name="ViewITXf" semantic="VIEWINVERSETRANSPOSE" type="5" rows="4" columns="4" handle="98983288" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,"><keys><key num="0" value="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,-2.500000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"/></keys><annotation nametype="9" valuetype="9" name="UIWIDGET" value="NONE"/></connectionparameter><connectionparameter objectid="3" name="LampViewXf" semantic="VIEW" type="5" rows="4" columns="4" handle="86689600" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,"><keys><key num="0" value="9.999999e-001,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,9.999999e-001,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,2.884717e+000,1.000000e+000,"/></keys><annotation nametype="9" valuetype="9" name="FRUSTUM" value="LIGHT"/><calculator objectid="5" name="Light0 Connection: VIEW"><nvcalculator_loadindexed objectid="6" regdest="0" index="0" loopindex="0" type="0"/></calculator></connectionparameter><connectionparameter objectid="3" name="LampProjXf" semantic="PROJECTION" type="5" rows="4" columns="4" handle="86689112" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,"><keys><key num="0" value="1.056140e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.191754e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.003922e+000,1.000000e+000,0.000000e+000,0.000000e+000,-4.686441e-002,0.000000e+000,"/></keys><annotation nametype="9" valuetype="9" name="FRUSTUM" value="LIGHT"/><calculator objectid="5" name="Light0 Connection: PROJECTION"><nvcalculator_loadindexed objectid="6" regdest="0" index="0" loopindex="0" type="0"/></calculator></connectionparameter><connectionparameter objectid="3" name="ShadBias" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="86690128" animated="0" numkeys="1" defaulttype="float" defaultvalue="1.000000e-004"><keys><key num="0" value="1.400000e-004"/></keys><annotation nametype="9" valuetype="3" name="UIMAX" value="3.000000e-003"/><annotation nametype="9" valuetype="3" name="UIMIN" value="0.000000e+000"/><annotation nametype="9" valuetype="9" name="UINAME" value="Shadow Bias"/><annotation nametype="9" valuetype="3" name="UISTEP" value="1.000000e-005"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="SLIDER"/></connectionparameter><connectionparameter objectid="3" name="ColorShadMap" semantic="RENDERCOLORTARGET" type="6" rows="0" columns="0" handle="86441528" animated="0" numkeys="1" defaulttype="texture" defaultvalue=""><keys><key num="0" value=""/></keys><annotation nametype="9" valuetype="2" name="DIMENSIONS" value="1.024000e+003, 1.024000e+003"/><annotation nametype="9" valuetype="9" name="FORMAT" value="x8b8g8r8"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="NONE"/></connectionparameter><connectionparameter objectid="3" name="ColorShadSampler" semantic="UNKNOWN" type="12" rows="0" columns="0" handle="86474768" animated="0" numkeys="1" defaulttype="sampler" defaultvalue="UNKNOWN"><keys><key num="0" value="UNKNOWN"/></keys></connectionparameter><connectionparameter objectid="3" name="ShadDepthTarget" semantic="RENDERDEPTHSTENCILTARGET" type="6" rows="0" columns="0" handle="86475296" animated="0" numkeys="1" defaulttype="texture" defaultvalue=""><keys><key num="0" value=""/></keys><annotation nametype="9" valuetype="2" name="DIMENSIONS" value="1.024000e+003, 1.024000e+003"/><annotation nametype="9" valuetype="9" name="FORMAT" value="D24S8_SHADOWMAP"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="NONE"/></connectionparameter><connectionparameter objectid="3" name="ShadDepthSampler" semantic="UNKNOWN" type="12" rows="0" columns="0" handle="99141088" animated="0" numkeys="1" defaulttype="sampler" defaultvalue="UNKNOWN"><keys><key num="0" value="UNKNOWN"/></keys></connectionparameter><connectionparameter objectid="3" name="SpotLightPos" semantic="POSITION" type="1" rows="0" columns="0" handle="99141544" animated="0" numkeys="1" defaulttype="float3" defaultvalue="-1.000000e+000, 1.000000e+000, 0.000000e+000"><keys><key num="0" value="-1.000000e+000, 1.000000e+000, 0.000000e+000"/></keys><annotation nametype="9" valuetype="9" name="OBJECT" value="SPOTLIGHT"/><annotation nametype="9" valuetype="9" name="SPACE" value="WORLD"/><annotation nametype="9" valuetype="9" name="UINAME" value="Light Posistion"/><calculator objectid="5" name="Default Spot Light : POSITION"><nvcalculator_load objectid="7" scenehandle="36" paramname="Object Position" regdest="1" constantvalue="UNKNOWN" constanttype="2147483647" constantrows="0" constantcolumns="0"/><nvcalculator_load objectid="7" scenehandle="44" paramname="Current Transform" regdest="2" constantvalue="UNKNOWN" constanttype="2147483647" constantrows="0" constantcolumns="0"/><nvcalculator_mul objectid="8" regdest="3" reg1="1" reg2="2" op="0"/><nvcalculator_mov objectid="9" type="1" rows="0" columns="0" regdest="0" regsource="3"/></calculator></connectionparameter><connectionparameter objectid="3" name="LiteColor" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="99142328" animated="0" numkeys="1" defaulttype="float3" defaultvalue="8.000000e-001, 5.000000e-001, 1.000000e-001"><keys><key num="0" value="8.000000e-001, 5.000000e-001, 1.000000e-001"/></keys><annotation nametype="9" valuetype="9" name="UINAME" value="Bright Surface Color"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="COLOR"/></connectionparameter><connectionparameter objectid="3" name="DarkColor" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="86374696" animated="0" numkeys="1" defaulttype="float3" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000"><keys><key num="0" value="0.000000e+000, 0.000000e+000, 0.000000e+000"/></keys><annotation nametype="9" valuetype="9" name="UINAME" value="Dark Surface Color"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="COLOR"/></connectionparameter><connectionparameter objectid="3" name="WarmColor" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="86441000" animated="0" numkeys="1" defaulttype="float3" defaultvalue="5.000000e-001, 4.000000e-001, 5.000000e-002"><keys><key num="0" value="5.000000e-001, 4.000000e-001, 5.000000e-002"/></keys><annotation nametype="9" valuetype="9" name="UINAME" value="Gooch warm tone"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="COLOR"/></connectionparameter><connectionparameter objectid="3" name="CoolColor" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="86440432" animated="0" numkeys="1" defaulttype="float3" defaultvalue="5.000000e-002, 5.000000e-002, 6.000000e-001"><keys><key num="0" value="5.000000e-002, 5.000000e-002, 6.000000e-001"/></keys><annotation nametype="9" valuetype="9" name="UINAME" value="Gooch cool tone"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="COLOR"/></connectionparameter><connectionparameter objectid="3" name="SpecColor" semantic="SPECULAR" type="1" rows="0" columns="0" handle="86380688" animated="0" numkeys="1" defaulttype="float3" defaultvalue="7.000000e-001, 7.000000e-001, 1.000000e+000"><keys><key num="0" value="7.000000e-001, 7.000000e-001, 1.000000e+000"/></keys><annotation nametype="9" valuetype="9" name="UINAME" value="Hilight color"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="COLOR"/></connectionparameter><connectionparameter objectid="3" name="SpecExpon" semantic="SPECULARPOWER" type="3" rows="0" columns="0" handle="86414152" animated="0" numkeys="1" defaulttype="float" defaultvalue="4.000000e+001"><keys><key num="0" value="4.000000e+001"/></keys><annotation nametype="9" valuetype="3" name="UIMAX" value="1.280000e+002"/><annotation nametype="9" valuetype="3" name="UIMIN" value="1.000000e+000"/><annotation nametype="9" valuetype="9" name="UINAME" value="specular power"/><annotation nametype="9" valuetype="3" name="UISTEP" value="1.000000e+000"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="SLIDER"/></connectionparameter><connectionparameter objectid="3" name="GlossTop" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="86413424" animated="0" numkeys="1" defaulttype="float" defaultvalue="7.000000e-001"><keys><key num="0" value="7.000000e-001"/></keys><annotation nametype="9" valuetype="3" name="UIMAX" value="1.000000e+000"/><annotation nametype="9" valuetype="3" name="UIMIN" value="2.000000e-001"/><annotation nametype="9" valuetype="9" name="UINAME" value="Maximum for Gloss Dropoff"/><annotation nametype="9" valuetype="3" name="UISTEP" value="5.000000e-002"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="SLIDER"/></connectionparameter><connectionparameter objectid="3" name="GlossBot" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="86411864" animated="0" numkeys="1" defaulttype="float" defaultvalue="5.000000e-001"><keys><key num="0" value="5.000000e-001"/></keys><annotation nametype="9" valuetype="3" name="UIMAX" value="9.500000e-001"/><annotation nametype="9" valuetype="3" name="UIMIN" value="5.000000e-002"/><annotation nametype="9" valuetype="9" name="UINAME" value="Minimum for Gloss Dropoff"/><annotation nametype="9" valuetype="3" name="UISTEP" value="5.000000e-002"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="SLIDER"/></connectionparameter><connectionparameter objectid="3" name="GlossDrop" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="86412576" animated="0" numkeys="1" defaulttype="float" defaultvalue="2.000000e-001"><keys><key num="0" value="2.000000e-001"/></keys><annotation nametype="9" valuetype="3" name="UIMAX" value="1.000000e+000"/><annotation nametype="9" valuetype="3" name="UIMIN" value="0.000000e+000"/><annotation nametype="9" valuetype="9" name="UINAME" value="Strength of Glossy Dropoff"/><annotation nametype="9" valuetype="3" name="UISTEP" value="5.000000e-002"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="SLIDER"/></connectionparameter><connectionparameter objectid="3" name="StripeScale" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="86411152" animated="0" numkeys="1" defaulttype="float" defaultvalue="5.000000e+001"><keys><key num="0" value="5.125000e+001"/></keys><annotation nametype="9" valuetype="3" name="UIMAX" value="1.000000e+002"/><annotation nametype="9" valuetype="3" name="UIMIN" value="1.000000e+000"/><annotation nametype="9" valuetype="3" name="UISTEP" value="5.000000e-002"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="SLIDER"/></connectionparameter><connectionparameter objectid="3" name="StripeDens" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="98982760" animated="0" numkeys="1" defaulttype="float" defaultvalue="2.500000e-001"><keys><key num="0" value="2.170000e-001"/></keys><annotation nametype="9" valuetype="3" name="UIMAX" value="9.000000e-001"/><annotation nametype="9" valuetype="3" name="UIMIN" value="1.000000e-001"/><annotation nametype="9" valuetype="3" name="UISTEP" value="1.000000e-003"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="SLIDER"/></connectionparameter><connectionparameter objectid="3" name="StripeRotation" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="86379680" animated="0" numkeys="1" defaulttype="float" defaultvalue="7.300000e+001"><keys><key num="0" value="6.980000e+001"/></keys><annotation nametype="9" valuetype="3" name="UIMAX" value="1.800000e+002"/><annotation nametype="9" valuetype="3" name="UIMIN" value="-1.800000e+002"/><annotation nametype="9" valuetype="3" name="UISTEP" value="5.000000e-002"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="SLIDER"/></connectionparameter><connectionparameter objectid="3" name="stripeTex" semantic="UNKNOWN" type="6" rows="0" columns="0" handle="86382112" animated="0" numkeys="1" defaulttype="texture" defaultvalue=""><keys><key num="0" value=""/></keys><annotation nametype="9" valuetype="2" name="DIMENSIONS" value="6.400000e+001, 6.400000e+001"/><annotation nametype="9" valuetype="9" name="FUNCTION" value="stripe_function"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="NONE"/></connectionparameter><connectionparameter objectid="3" name="stripeSampler" semantic="UNKNOWN" type="12" rows="0" columns="0" handle="86382680" animated="0" numkeys="1" defaulttype="sampler" defaultvalue="UNKNOWN"><keys><key num="0" value="UNKNOWN"/></keys></connectionparameter></parameterlist><ScriptParams num="0" value="UNKNOWN"><parameterlist objectid="2"><connectionparameter objectid="3" name="Technique" semantic="UNKNOWN" type="22" rows="0" columns="0" handle="86383136" animated="0" numkeys="0"><enum objectid="10" selection="0"><string objectid="11" text="Main"/><string objectid="11" text="Unshadowed"/></enum></connectionparameter></parameterlist></ScriptParams></material><node objectid="12" name="Teapot" materialoverride="0" handle="35" worldskin="0"><teapot objectid="13" name=""><parameterlist objectid="2"/></teapot><texgen objectid="14" name=""><parameterlist objectid="2"><connectionparameter objectid="3" name="Coord Set" semantic="UNKNOWN" type="7" rows="0" columns="0" handle="99216824" animated="0" numkeys="1" defaulttype="dword" defaultvalue="0"><keys><key num="0" value="0"/></keys></connectionparameter></parameterlist></texgen><meshmender objectid="15" name=""><parameterlist objectid="2"/></meshmender></node><node objectid="16" name="Default Spot Light" handle="36" type="3"><parameterlist objectid="2"><connectionparameter objectid="3" name="Diffuse" semantic="DIFFUSE" type="0" rows="0" columns="0" handle="99142616" animated="1" numkeys="1" defaulttype="float4" defaultvalue="1.000000e+000, 1.000000e+000, 1.000000e+000, 1.000000e+000"><keys><key num="0" value="1.000000e+000, 1.000000e+000, 1.000000e+000, 1.000000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Specular" semantic="SPECULAR" type="0" rows="0" columns="0" handle="102684400" animated="1" numkeys="1" defaulttype="float4" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000, 0.000000e+000"><keys><key num="0" value="2.000000e-001, 2.000000e-001, 2.000000e-001, 2.000000e-001"/></keys></connectionparameter><connectionparameter objectid="3" name="Ambient" semantic="AMBIENT" type="0" rows="0" columns="0" handle="86258200" animated="1" numkeys="1" defaulttype="float4" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000, 0.000000e+000"><keys><key num="0" value="1.500000e-001, 1.500000e-001, 1.500000e-001, 1.500000e-001"/></keys></connectionparameter><connectionparameter objectid="3" name="Exponent" semantic="SPECULARPOWER" type="3" rows="0" columns="0" handle="102713200" animated="1" numkeys="1" defaulttype="float" defaultvalue="1.000000e+000"><keys><key num="0" value="3.000000e+001"/></keys></connectionparameter><connectionparameter objectid="3" name="Object Position" semantic="POSITION" type="1" rows="0" columns="0" handle="99472528" animated="0" numkeys="1" defaulttype="float3" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000"><keys><key num="0" value="0.000000e+000, 0.000000e+000, 0.000000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Object Direction" semantic="DIRECTION" type="1" rows="0" columns="0" handle="86598264" animated="0" numkeys="1" defaulttype="float3" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000"><keys><key num="0" value="0.000000e+000, 0.000000e+000, 1.000000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Umbra" semantic="LIGHTUMBRA" type="3" rows="0" columns="0" handle="140641544" animated="1" numkeys="1" defaulttype="float" defaultvalue="5.000000e-001"><keys><key num="0" value="5.000000e-001"/></keys></connectionparameter><connectionparameter objectid="3" name="Penumbra" semantic="LIGHTPENUMBRA" type="3" rows="0" columns="0" handle="140559528" animated="1" numkeys="1" defaulttype="float" defaultvalue="1.000000e+000"><keys><key num="0" value="7.000000e-001"/></keys></connectionparameter><connectionparameter objectid="3" name="Falloff" semantic="LIGHTFALLOFF" type="3" rows="0" columns="0" handle="99202104" animated="1" numkeys="1" defaulttype="float" defaultvalue="1.000000e+000"><keys><key num="0" value="0.000000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Range" semantic="LIGHTRANGE" type="3" rows="0" columns="0" handle="86674592" animated="1" numkeys="1" defaulttype="float" defaultvalue="1.000000e+000"><keys><key num="0" value="0.000000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Attenuation" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="140642864" animated="1" numkeys="1" defaulttype="float3" defaultvalue="1.000000e+000, 0.000000e+000, 0.000000e+000"><keys><key num="0" value="1.000000e+000, 0.000000e+000, 0.000000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="View" semantic="VIEW" type="5" rows="4" columns="4" handle="86017016" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="5.079767e-001,3.719920e-001,7.769050e-001,0.000000e+000,2.090218e-001,8.217480e-001,-5.301318e-001,0.000000e+000,-8.356251e-001,4.316846e-001,3.396744e-001,0.000000e+000,-3.994417e-002,4.474270e-002,1.206935e+001,1.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Projection" semantic="PROJECTION" type="5" rows="4" columns="4" handle="99315760" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="2.931561e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,2.739512e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.003922e+000,1.000000e+000,0.000000e+000,0.000000e+000,-6.288164e-002,0.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Depth Range" semantic="UNKNOWN" type="2" rows="0" columns="0" handle="86304480" animated="0" numkeys="1" defaulttype="float2" defaultvalue="0.000000e+000, 1.000000e+000"><keys><key num="0" value="6.263600e-002, 1.603482e+001"/></keys></connectionparameter></parameterlist></node><node objectid="17" name="Default Scene Camera" handle="37" target="4294967295" defaultcamera="1" activecamera="1"><parameterlist objectid="2"><connectionparameter objectid="3" name="Focal Length" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="103135640" animated="0" numkeys="1" defaulttype="float" defaultvalue="1.000000e+000"><keys><key num="0" value="8.677197e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Field of View" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="86310736" animated="0" numkeys="1" defaulttype="float" defaultvalue="8.000000e+001"><keys><key num="0" value="3.000000e+001"/></keys></connectionparameter><connectionparameter objectid="3" name="Depth Range" semantic="UNKNOWN" type="2" rows="0" columns="0" handle="86267160" animated="0" numkeys="1" defaulttype="float2" defaultvalue="0.000000e+000, 1.000000e+000"><keys><key num="0" value="4.991025e-002, 1.277703e+001"/></keys></connectionparameter><connectionparameter objectid="3" name="Look Direction" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="103133416" animated="0" numkeys="1" defaulttype="float3" defaultvalue="0.000000e+000, 0.000000e+000, 1.000000e+000"><keys><key num="0" value="3.681803e-001, -6.743974e-001, 6.400246e-001"/></keys></connectionparameter><connectionparameter objectid="3" name="Up Direction" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="86363360" animated="0" numkeys="1" defaulttype="float3" defaultvalue="0.000000e+000, 1.000000e+000, 0.000000e+000"><keys><key num="0" value="3.362825e-001, 7.383686e-001, 5.845733e-001"/></keys></connectionparameter><connectionparameter objectid="3" name="Lookat Matrix" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="86421008" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="8.668087e-001,3.362824e-001,3.681803e-001,0.000000e+000,-6.407499e-007,7.383686e-001,-6.743973e-001,0.000000e+000,-4.986407e-001,5.845733e-001,6.400245e-001,0.000000e+000,-5.293796e-001,-2.590828e-001,8.407934e+000,1.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Camera Position" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="140477288" animated="0" numkeys="1" defaulttype="float3" defaultvalue="0.000000e+000, 0.000000e+000, -1.000000e+000"><keys><key num="0" value="-2.549640e+000, 5.861587e+000, -5.493802e+000"/></keys></connectionparameter></parameterlist></node><node objectid="12" name="PlaneXZ" materialoverride="0" handle="38" worldskin="0"><plane objectid="18" name=""><parameterlist objectid="2"><connectionparameter objectid="3" name="Width" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="99204848" animated="0" numkeys="1" defaulttype="float" defaultvalue="1.750000e+000"><keys><key num="0" value="1.750000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Height" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="99179808" animated="0" numkeys="1" defaulttype="float" defaultvalue="1.750000e+000"><keys><key num="0" value="1.750000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Columns" semantic="UNKNOWN" type="7" rows="0" columns="0" handle="99151048" animated="0" numkeys="1" defaulttype="dword" defaultvalue="50"><keys><key num="0" value="50"/></keys></connectionparameter><connectionparameter objectid="3" name="Rows" semantic="UNKNOWN" type="7" rows="0" columns="0" handle="65100408" animated="0" numkeys="1" defaulttype="dword" defaultvalue="50"><keys><key num="0" value="50"/></keys></connectionparameter></parameterlist></plane><texgen objectid="14" name=""><parameterlist objectid="2"><connectionparameter objectid="3" name="Coord Set" semantic="UNKNOWN" type="7" rows="0" columns="0" handle="86640128" animated="0" numkeys="1" defaulttype="dword" defaultvalue="0"><keys><key num="0" value="0"/></keys></connectionparameter></parameterlist></texgen><meshmender objectid="15" name=""><parameterlist objectid="2"/></meshmender></node><node objectid="12" name="PlaneYX" materialoverride="0" handle="39" worldskin="0"><plane objectid="19" name=""><parameterlist objectid="2"><connectionparameter objectid="3" name="Width" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="102507856" animated="0" numkeys="1" defaulttype="float" defaultvalue="1.750000e+000"><keys><key num="0" value="1.750000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Height" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="86511760" animated="0" numkeys="1" defaulttype="float" defaultvalue="1.750000e+000"><keys><key num="0" value="1.750000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Columns" semantic="UNKNOWN" type="7" rows="0" columns="0" handle="99321872" animated="0" numkeys="1" defaulttype="dword" defaultvalue="50"><keys><key num="0" value="50"/></keys></connectionparameter><connectionparameter objectid="3" name="Rows" semantic="UNKNOWN" type="7" rows="0" columns="0" handle="102547840" animated="0" numkeys="1" defaulttype="dword" defaultvalue="50"><keys><key num="0" value="50"/></keys></connectionparameter></parameterlist></plane><texgen objectid="14" name=""><parameterlist objectid="2"><connectionparameter objectid="3" name="Coord Set" semantic="UNKNOWN" type="7" rows="0" columns="0" handle="86641360" animated="0" numkeys="1" defaulttype="dword" defaultvalue="0"><keys><key num="0" value="0"/></keys></connectionparameter></parameterlist></texgen><meshmender objectid="15" name=""><parameterlist objectid="2"/></meshmender></node><node objectid="12" name="PlaneZY" materialoverride="0" handle="40" worldskin="0"><plane objectid="20" name=""><parameterlist objectid="2"><connectionparameter objectid="3" name="Width" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="102687464" animated="0" numkeys="1" defaulttype="float" defaultvalue="1.750000e+000"><keys><key num="0" value="1.750000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Height" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="86379472" animated="0" numkeys="1" defaulttype="float" defaultvalue="1.750000e+000"><keys><key num="0" value="1.750000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Columns" semantic="UNKNOWN" type="7" rows="0" columns="0" handle="86019000" animated="0" numkeys="1" defaulttype="dword" defaultvalue="50"><keys><key num="0" value="50"/></keys></connectionparameter><connectionparameter objectid="3" name="Rows" semantic="UNKNOWN" type="7" rows="0" columns="0" handle="102498368" animated="0" numkeys="1" defaulttype="dword" defaultvalue="50"><keys><key num="0" value="50"/></keys></connectionparameter></parameterlist></plane><texgen objectid="14" name=""><parameterlist objectid="2"><connectionparameter objectid="3" name="Coord Set" semantic="UNKNOWN" type="7" rows="0" columns="0" handle="86544696" animated="0" numkeys="1" defaulttype="dword" defaultvalue="0"><keys><key num="0" value="0"/></keys></connectionparameter></parameterlist></texgen><meshmender objectid="15" name=""><parameterlist objectid="2"/></meshmender></node><node objectid="12" name="Sphere" materialoverride="0" handle="41" worldskin="0"><sphere objectid="21" name=""><parameterlist objectid="2"><connectionparameter objectid="3" name="Radius" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="86412032" animated="0" numkeys="1" defaulttype="float" defaultvalue="1.000000e+000"><keys><key num="0" value="1.000000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Latitude Segments" semantic="UNKNOWN" type="7" rows="0" columns="0" handle="99494336" animated="0" numkeys="1" defaulttype="dword" defaultvalue="26"><keys><key num="0" value="26"/></keys></connectionparameter><connectionparameter objectid="3" name="Longitude Segments" semantic="UNKNOWN" type="7" rows="0" columns="0" handle="86358312" animated="0" numkeys="1" defaulttype="dword" defaultvalue="26"><keys><key num="0" value="26"/></keys></connectionparameter></parameterlist></sphere><texgen objectid="14" name=""><parameterlist objectid="2"><connectionparameter objectid="3" name="Coord Set" semantic="UNKNOWN" type="7" rows="0" columns="0" handle="102576672" animated="0" numkeys="1" defaulttype="dword" defaultvalue="0"><keys><key num="0" value="0"/></keys></connectionparameter></parameterlist></texgen><meshmender objectid="15" name=""><parameterlist objectid="2"/></meshmender></node><node objectid="12" name="3DText" materialoverride="0" handle="42" worldskin="0"><text3d objectid="22" name=""><parameterlist objectid="2"><connectionparameter objectid="3" name="Display Text" semantic="UNKNOWN" type="9" rows="7" columns="0" handle="102580640" animated="1" numkeys="1" defaulttype="string" defaultvalue="geForce"><keys><key num="0" value="Quadro"/></keys></connectionparameter><connectionparameter objectid="3" name="Font" semantic="UNKNOWN" type="9" rows="16" columns="0" handle="102622904" animated="0" numkeys="1" defaulttype="string" defaultvalue="Monotype Corsiva"><keys><key num="0" value="Monotype Corsiva"/></keys></connectionparameter><connectionparameter objectid="3" name="Extrusion" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="86254648" animated="1" numkeys="1" defaulttype="float" defaultvalue="2.500000e-001"><keys><key num="0" value="2.500000e-001"/></keys></connectionparameter></parameterlist></text3d><texgen objectid="14" name=""><parameterlist objectid="2"><connectionparameter objectid="3" name="Coord Set" semantic="UNKNOWN" type="7" rows="0" columns="0" handle="99505544" animated="0" numkeys="1" defaulttype="dword" defaultvalue="0"><keys><key num="0" value="0"/></keys></connectionparameter></parameterlist></texgen><meshmender objectid="15" name=""><parameterlist objectid="2"/></meshmender></node><nvtransformlink objectid="23" parent="0" handle="34" name="Root Transform" animated="1" separable="0"><nodes/><parameterlist objectid="2"><connectionparameter objectid="3" name="Matrix" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="86655480" animated="1" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Reference Matrix" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="86654424" animated="1" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Rotation" semantic="UNKNOWN" type="25" rows="0" columns="0" handle="86654952" animated="1" numkeys="1" defaulttype="quat" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000, 1.000000e+000"><keys><key num="0" value="0.000000e+000, 0.000000e+000, 0.000000e+000, 1.000000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Translation" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="86653416" animated="1" numkeys="1" defaulttype="float3" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000"><keys><key num="0" value="0.000000e+000, 0.000000e+000, 0.000000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Scale" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="86554048" animated="1" numkeys="1" defaulttype="float3" defaultvalue="1.000000e+000, 1.000000e+000, 1.000000e+000"><keys><key num="0" value="1.000000e+000, 1.000000e+000, 1.000000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Current Transform" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="86399168" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"/></keys></connectionparameter></parameterlist><nvtransformlink objectid="23" parent="34" handle="43" name="Object Transform" animated="1" separable="1"><nodes><node handle="35"/></nodes><parameterlist objectid="2"><connectionparameter objectid="3" name="Matrix" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="102719528" animated="1" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Reference Matrix" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="140942616" animated="1" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Rotation" semantic="UNKNOWN" type="25" rows="0" columns="0" handle="86619920" animated="1" numkeys="1" defaulttype="quat" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000, 1.000000e+000"><keys><key num="0" value="9.071033e-003, 4.700264e-001, -9.078206e-004, 8.826009e-001"/></keys></connectionparameter><connectionparameter objectid="3" name="Translation" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="100731336" animated="1" numkeys="1" defaulttype="float3" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000"><keys><key num="0" value="0.000000e+000, 0.000000e+000, 0.000000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Scale" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="86259824" animated="1" numkeys="1" defaulttype="float3" defaultvalue="1.000000e+000, 1.000000e+000, 1.000000e+000"><keys><key num="0" value="1.000000e+000, 1.000000e+000, 1.000000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Current Transform" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="99472048" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="5.581487e-001,6.924763e-003,-8.297079e-001,0.000000e+000,1.012974e-002,9.998338e-001,1.515881e-002,0.000000e+000,8.296750e-001,-1.686560e-002,5.579858e-001,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"/></keys></connectionparameter></parameterlist></nvtransformlink><nvtransformlink objectid="23" parent="34" handle="44" name="Light Transform" animated="1" separable="1"><nodes><node handle="36"/></nodes><parameterlist objectid="2"><connectionparameter objectid="3" name="Matrix" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="103134032" animated="1" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Reference Matrix" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="86286536" animated="1" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Rotation" semantic="UNKNOWN" type="25" rows="0" columns="0" handle="86196360" animated="1" numkeys="1" defaulttype="quat" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000, 1.000000e+000"><keys><key num="0" value="2.943449e-001, 4.934820e-001, -4.987337e-002, 8.169120e-001"/></keys></connectionparameter><connectionparameter objectid="3" name="Translation" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="86442136" animated="1" numkeys="1" defaulttype="float3" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000"><keys><key num="0" value="-9.373095e+000, 6.369930e+000, -4.152344e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Scale" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="99284736" animated="1" numkeys="1" defaulttype="float3" defaultvalue="1.000000e+000, 1.000000e+000, 1.000000e+000"><keys><key num="0" value="1.000000e+000, 1.000000e+000, 1.000000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Current Transform" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="99328744" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="5.079764e-001,2.090235e-001,-8.356227e-001,0.000000e+000,3.719921e-001,8.217474e-001,4.316846e-001,0.000000e+000,7.769028e-001,-5.301310e-001,3.396732e-001,0.000000e+000,-9.373095e+000,6.369930e+000,-4.152344e+000,1.000000e+000,"/></keys></connectionparameter></parameterlist></nvtransformlink><nvtransformlink objectid="23" parent="34" handle="45" name="Default Camera Transform" animated="0" separable="1"><nodes><node handle="37"/></nodes><parameterlist objectid="2"><connectionparameter objectid="3" name="Matrix" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="86341248" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Reference Matrix" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="102552632" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Rotation" semantic="UNKNOWN" type="25" rows="0" columns="0" handle="65397640" animated="0" numkeys="1" defaulttype="quat" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000, 1.000000e+000"><keys><key num="0" value="3.494337e-001, 2.405906e-001, -9.333707e-002, 9.007221e-001"/></keys></connectionparameter><connectionparameter objectid="3" name="Translation" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="102552184" animated="0" numkeys="1" defaulttype="float3" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000"><keys><key num="0" value="-2.549640e+000, 5.861587e+000, -5.493802e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Scale" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="3505584" animated="0" numkeys="1" defaulttype="float3" defaultvalue="1.000000e+000, 1.000000e+000, 1.000000e+000"><keys><key num="0" value="1.000000e+000, 1.000000e+000, 1.000000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Current Transform" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="86424984" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="8.668087e-001,-5.960464e-007,-4.986407e-001,0.000000e+000,3.362824e-001,7.383686e-001,5.845733e-001,0.000000e+000,3.681803e-001,-6.743973e-001,6.400245e-001,0.000000e+000,-2.549640e+000,5.861587e+000,-5.493802e+000,1.000000e+000,"/></keys></connectionparameter></parameterlist></nvtransformlink><nvtransformlink objectid="23" parent="34" handle="46" name="Object Transform" animated="1" separable="1"><nodes><node handle="38"/></nodes><parameterlist objectid="2"><connectionparameter objectid="3" name="Matrix" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="102526856" animated="1" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Reference Matrix" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="102709664" animated="1" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Rotation" semantic="UNKNOWN" type="25" rows="0" columns="0" handle="102585008" animated="1" numkeys="1" defaulttype="quat" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000, 1.000000e+000"><keys><key num="0" value="0.000000e+000, 0.000000e+000, 0.000000e+000, 1.000000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Translation" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="99274944" animated="1" numkeys="1" defaulttype="float3" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000"><keys><key num="0" value="-1.351489e-001, -8.393001e-001, -7.343245e-001"/></keys></connectionparameter><connectionparameter objectid="3" name="Scale" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="99542960" animated="1" numkeys="1" defaulttype="float3" defaultvalue="1.000000e+000, 1.000000e+000, 1.000000e+000"><keys><key num="0" value="3.389105e+000, 3.389105e+000, 3.389105e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Current Transform" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="140562816" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="3.389105e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,3.389105e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,3.389105e+000,0.000000e+000,-1.351489e-001,-8.393001e-001,-7.343245e-001,1.000000e+000,"/></keys></connectionparameter></parameterlist></nvtransformlink><nvtransformlink objectid="23" parent="34" handle="47" name="Object Transform" animated="1" separable="1"><nodes><node handle="39"/></nodes><parameterlist objectid="2"><connectionparameter objectid="3" name="Matrix" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="99473936" animated="1" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Reference Matrix" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="99450352" animated="1" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Rotation" semantic="UNKNOWN" type="25" rows="0" columns="0" handle="99197496" animated="1" numkeys="1" defaulttype="quat" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000, 1.000000e+000"><keys><key num="0" value="0.000000e+000, 0.000000e+000, 0.000000e+000, 1.000000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Translation" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="86363008" animated="1" numkeys="1" defaulttype="float3" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000"><keys><key num="0" value="3.195236e-001, 1.361935e+000, 2.296481e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Scale" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="102708800" animated="1" numkeys="1" defaulttype="float3" defaultvalue="1.000000e+000, 1.000000e+000, 1.000000e+000"><keys><key num="0" value="2.891051e+000, 2.891051e+000, 2.891051e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Current Transform" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="86419320" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="2.891051e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,2.891051e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,2.891051e+000,0.000000e+000,3.195236e-001,1.361935e+000,2.296481e+000,1.000000e+000,"/></keys></connectionparameter></parameterlist></nvtransformlink><nvtransformlink objectid="23" parent="34" handle="48" name="Object Transform" animated="1" separable="1"><nodes><node handle="40"/></nodes><parameterlist objectid="2"><connectionparameter objectid="3" name="Matrix" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="99507336" animated="1" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Reference Matrix" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="99381416" animated="1" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Rotation" semantic="UNKNOWN" type="25" rows="0" columns="0" handle="86328872" animated="1" numkeys="1" defaulttype="quat" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000, 1.000000e+000"><keys><key num="0" value="0.000000e+000, 0.000000e+000, 0.000000e+000, 1.000000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Translation" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="99768816" animated="1" numkeys="1" defaulttype="float3" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000"><keys><key num="0" value="2.771809e+000, 1.828281e+000, -5.736011e-002"/></keys></connectionparameter><connectionparameter objectid="3" name="Scale" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="86554448" animated="1" numkeys="1" defaulttype="float3" defaultvalue="1.000000e+000, 1.000000e+000, 1.000000e+000"><keys><key num="0" value="3.225681e+000, 3.225681e+000, 3.225681e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Current Transform" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="86416464" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="3.225681e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,3.225681e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,3.225681e+000,0.000000e+000,2.771809e+000,1.828281e+000,-5.736011e-002,1.000000e+000,"/></keys></connectionparameter></parameterlist></nvtransformlink><nvtransformlink objectid="23" parent="34" handle="49" name="Object Transform" animated="1" separable="1"><nodes><node handle="41"/></nodes><parameterlist objectid="2"><connectionparameter objectid="3" name="Matrix" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="86362504" animated="1" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Reference Matrix" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="102338368" animated="1" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Rotation" semantic="UNKNOWN" type="25" rows="0" columns="0" handle="86442624" animated="1" numkeys="1" defaulttype="quat" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000, 1.000000e+000"><keys><key num="0" value="0.000000e+000, 0.000000e+000, 0.000000e+000, 1.000000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Translation" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="86284192" animated="1" numkeys="1" defaulttype="float3" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000"><keys><key num="0" value="8.685305e-001, 7.217686e-001, -1.255291e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Scale" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="86269080" animated="1" numkeys="1" defaulttype="float3" defaultvalue="1.000000e+000, 1.000000e+000, 1.000000e+000"><keys><key num="0" value="3.540856e-001, 3.540856e-001, 3.540856e-001"/></keys></connectionparameter><connectionparameter objectid="3" name="Current Transform" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="99572280" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="3.540856e-001,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,3.540856e-001,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,3.540856e-001,0.000000e+000,8.685305e-001,7.217686e-001,-1.255291e+000,1.000000e+000,"/></keys></connectionparameter></parameterlist></nvtransformlink><nvtransformlink objectid="23" parent="34" handle="50" name="Object Transform" animated="1" separable="1"><nodes><node handle="42"/></nodes><parameterlist objectid="2"><connectionparameter objectid="3" name="Matrix" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="86310216" animated="1" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Reference Matrix" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="86264784" animated="1" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Rotation" semantic="UNKNOWN" type="25" rows="0" columns="0" handle="102481336" animated="1" numkeys="1" defaulttype="quat" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000, 1.000000e+000"><keys><key num="0" value="1.428281e-001, 5.954427e-001, -1.141808e-001, 7.823189e-001"/></keys></connectionparameter><connectionparameter objectid="3" name="Translation" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="102337912" animated="1" numkeys="1" defaulttype="float3" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000"><keys><key num="0" value="-1.256644e+000, 1.407904e+000, 7.112099e-001"/></keys></connectionparameter><connectionparameter objectid="3" name="Scale" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="102339528" animated="1" numkeys="1" defaulttype="float3" defaultvalue="1.000000e+000, 1.000000e+000, 1.000000e+000"><keys><key num="0" value="1.000000e+000, 1.000000e+000, 1.000000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Current Transform" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="86267640" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,0.000000e+000,1.000000e+000,"><keys><key num="0" value="2.648214e-001,-8.559689e-003,-9.642686e-001,0.000000e+000,3.487435e-001,9.331257e-001,8.749799e-002,0.000000e+000,8.990358e-001,-3.594505e-001,2.500962e-001,0.000000e+000,-1.256644e+000,1.407904e+000,7.112099e-001,1.000000e+000,"/></keys></connectionparameter></parameterlist></nvtransformlink></nvtransformlink><scenematerials scenematerial="142"/></scene><objects><object objectid="10" objectguid="106012044_21786_18731_137_118_191_235_4_148_207_152" objectname="NVEnum Object" progid="nvsys.NVEnum.1"/><object objectid="21" objectguid="272529616_58327_19386_146_87_182_219_95_121_44_221" objectname="NVGeoPipeObject_Sphere Object" progid="nvsys.NVGeoPipeObject_Sphere.1"/><object objectid="5" objectguid="687344697_14784_17624_175_112_25_78_110_206_178_195" objectname="NVCalculator Object" progid="nvsys.NVCalculator.1"/><object objectid="11" objectguid="993927070_6119_19036_183_189_36_70_90_161_39_240" objectname="NVString Object" progid="nvsys.NVString.1"/><object objectid="3" objectguid="1178903711_54835_17816_162_225_77_133_92_204_97_107" objectname="NVConnectionParameter Object" progid="nvsys.NVConnectionParameter.1"/><object objectid="12" objectguid="1335965045_63750_16786_166_174_116_14_177_170_26_82" objectname="NVGeoPipe Object" progid="nvsys.NVGeoPipe.1"/><object objectid="1" objectguid="1394174672_42515_16399_189_63_62_31_182_9_209_60" objectname="NVScene Object" progid="nvsys.NVScene.1"/><object objectid="4" objectguid="1401340335_59252_17807_172_96_248_52_119_74_181_173" objectname="NVMaterial Object" progid="nvsys.NVMaterial.1"/><object objectid="16" objectguid="1473613511_28199_19656_142_150_59_31_21_147_173_150" objectname="NVLight_Spot Object" progid="nvsys.NVLight_Spot.1"/><object objectid="19" objectguid="1504274888_18310_17207_162_168_86_96_220_178_145_254" objectname="NVGeoPipeObject_PlaneYX Object" progid="nvsys.NVGeoPipeObject_PlaneYX.1"/><object objectid="17" objectguid="1675712286_15683_20022_149_108_42_250_122_123_231_64" objectname="NVCamera Object" progid="nvsys.NVCamera.1"/><object objectid="13" objectguid="1678389611_25173_17222_180_188_41_169_29_0_144_170" objectname="NVGeoPipeObject_Teapot Object" progid="nvrenderdevice9.Teapot.1"/><object objectid="9" objectguid="1755565597_56309_18722_149_152_96_3_18_125_126_123" objectname="NVCalculator_Assign Object" progid="nvsys.NVCalculator_Assign.1"/><object objectid="22" objectguid="1950628075_6623_16666_186_134_199_52_87_175_101_21" objectname="NVGeoPipeObject_3DText Object" progid="nvrenderdevice9.3DText.1"/><object objectid="23" objectguid="2342579002_10168_19906_178_150_26_144_17_106_220_182" objectname="NVTransformLink Object" progid="nvsys.NVTransformLink.1"/><object objectid="15" objectguid="2516468428_38854_16959_155_101_192_176_42_10_71_202" objectname="NVGeoPipeObject_MeshMender Object" progid="nvsys.NVGeoPipeObject_MeshMender.1"/><object objectid="6" objectguid="2739247491_20870_19692_162_171_236_45_242_106_70_222" objectname="NVCalculator_LoadIndexed Object" progid="nvsys.NVCalculator_LoadIndexed.1"/><object objectid="18" objectguid="3086621292_36320_17872_166_144_232_189_60_91_123_131" objectname="NVGeoPipeObject_PlaneXZ Object" progid="nvsys.NVGeoPipeObject_PlaneXZ.1"/><object objectid="7" objectguid="3098681227_22869_16810_191_237_249_13_61_143_28_123" objectname="NVCalculator_Load Object" progid="nvsys.NVCalculator_Load.1"/><object objectid="20" objectguid="3265043280_52755_17763_191_13_136_183_83_58_118_107" objectname="NVGeoPipeObject_PlaneZY Object" progid="nvsys.NVGeoPipeObject_PlaneZY.1"/><object objectid="2" objectguid="3275223899_28196_19999_162_153_111_232_35_119_165_23" objectname="NVParameterList Object" progid="nvsys.NVParameterList.1"/><object objectid="14" objectguid="4057994036_6371_17546_152_57_13_140_51_98_219_190" objectname="NVGeoPipeObject_TexGen Object" progid="nvsys.NVGeoPipeObject_TexGen.1"/><object objectid="8" objectguid="4162726501_8958_17137_170_77_131_38_3_90_246_20" objectname="NVCalculator_Mul Object" progid="nvsys.NVCalculator_Mul.1"/></objects><media_objects><effect path="F:\devrel\SDK\MEDIA\HLSL\goochy_shadow.fx"><![CDATA[/*********************************************************************NVMH3**** File: $Id: //sw/devrel/SDK/MEDIA/HLSL/goochy_shadow.fx#4 $ Copyright NVIDIA Corporation 2002-2004 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. Comments: Gooch shading w/glossy hilight in HLSL ps_2 pixel shader. ******************************************************************************/ #define MAX_SHADOW_BIAS 0.003 #define SHADOW_SIZE 1024 #include <include\\shadowMap.fxh> #include <include\\spot_tex.fxh> float Script : STANDARDSGLOBAL < string UIWidget = "none"; string ScriptClass = "sceneorobject"; string ScriptOrder = "standard"; string ScriptOutput = "color"; string Script = "Technique=Technique?Main:Unshadowed;"; > = 0.8; float4 ClearColor < string UIWidget = "color"; string UIName = "background"; > = {0,0,0,0.0}; float ClearDepth <string UIWidget = "none";> = 1.0; /************* TWEAKABLES **************/ float4x4 WorldITXf : WorldInverseTranspose < string UIWidget="None"; >; float4x4 WorldViewProjXf : WorldViewProjection < string UIWidget="None"; >; float4x4 WorldViewXf : WorldView < string UIWidget="None"; >; // no projection float4x4 WorldXf : World < string UIWidget="None"; >; float4x4 ViewIXf : ViewInverse < string UIWidget="None"; >; float4x4 ViewITXf : ViewInverseTranspose <string UIWidget="None";>; DECLARE_SHADOW_XFORMS("light0",LampViewXf,LampProjXf,ShadowViewProjXf) DECLARE_SHADOW_BIAS DECLARE_SHADOW_MAPS(ColorShadMap,ColorShadSampler,ShadDepthTarget,ShadDepthSampler) /////////////////////////////////////////////////////////////// /// TWEAKABLES //////////////////////////////////////////////// /////////////////////////////////////////////////////////////// float3 SpotLightPos : POSITION < string UIName = "Light Posistion"; string Object = "SpotLight"; string Space = "World"; > = {-1.0f, 1.0f, 0.0f}; ///////////////////////////// float3 LiteColor < string UIName = "Bright Surface Color"; string UIWidget = "Color"; > = {0.8f, 0.5f, 0.1f}; float3 DarkColor < string UIName = "Dark Surface Color"; string UIWidget = "Color"; > = {0.0f, 0.0f, 0.0f}; float3 WarmColor < string UIName = "Gooch warm tone"; string UIWidget = "Color"; > = {0.5f, 0.4f, 0.05f}; float3 CoolColor < string UIName = "Gooch cool tone"; string UIWidget = "Color"; > = {0.05f, 0.05f, 0.6f}; float3 SpecColor : Specular < string UIName = "Hilight color"; string UIWidget = "Color"; > = {0.7f, 0.7f, 1.0f}; float SpecExpon : SpecularPower < string UIWidget = "slider"; float UIMin = 1.0; float UIMax = 128.0; float UIStep = 1.0; string UIName = "specular power"; > = 40.0; float GlossTop < string UIWidget = "slider"; float UIMin = 0.2; float UIMax = 1.0; float UIStep = 0.05; string UIName = "Maximum for Gloss Dropoff"; > = 0.7; float GlossBot < string UIWidget = "slider"; float UIMin = 0.05; float UIMax = 0.95; float UIStep = 0.05; string UIName = "Minimum for Gloss Dropoff"; > = 0.5; float GlossDrop < string UIWidget = "slider"; float UIMin = 0.0; float UIMax = 1.0; float UIStep = 0.05; string UIName = "Strength of Glossy Dropoff"; > = 0.2; float StripeScale < string UIWidget = "slider"; float UIMin = 1.0; float UIMax = 100.0; float UIStep = 0.05; // string UIName = "Strength of Glossy Dropoff"; > = 50.0; float StripeDens < string UIWidget = "slider"; float UIMin = 0.1; float UIMax = 0.9; float UIStep = 0.001; // string UIName = "Strength of Glossy Dropoff"; > = 0.25; float StripeRotation < string UIWidget = "slider"; float UIMin = -180.0; float UIMax = 180.0; float UIStep = 0.05; // string UIName = "Strength of Glossy Dropoff"; > = 73.0; static float SR = radians(StripeRotation); static float cr = cos(SR); static float sr = sin(SR); /////////////// prodecural texture for shadowing ///////////// #define TEX_SIZE 64 float4 stripe_function(float2 Pos : POSITION,float ps : PSIZE) : COLOR { float v = 0; float nx = Pos.x+ps; // keep the last column full-on, always v = nx > Pos.y; return float4(v.xxxx); } texture stripeTex < string function = "stripe_function"; string UIWidget = "None"; float2 Dimensions = { TEX_SIZE, TEX_SIZE }; >; sampler2D stripeSampler = sampler_state { Texture = <stripeTex>; MinFilter = LINEAR; MagFilter = LINEAR; MipFilter = LINEAR; AddressU = WRAP; AddressV = CLAMP; }; ////////////////// struct // // Connector from vertex to pixel shader for typical usage. The // "LProj" member is the crucial one for shadow mapping. // struct GoochShadVertexOutput { float4 HPosition : POSITION; float2 UV : TEXCOORD0; float3 LightVec : TEXCOORD1; float3 WNormal : TEXCOORD2; float3 WView : TEXCOORD3; float4 LProj : TEXCOORD4; // current position in light-projection space float2 HatchPos : TEXCOORD5; // in scaled/rotated screen space }; ////////////////// vertex shader -- like shadowMap.fxh's shadowUseVS but with additional "HatchPos" output field GoochShadVertexOutput goochShadVS(ShadowAppData IN, uniform float4x4 WorldXform, uniform float4x4 WorldITXform, uniform float4x4 WVPXform, uniform float4x4 ShadowVPXform, uniform float4x4 ViewIXform, uniform float4x4 BiasXform, uniform float3 LightPosition) { GoochShadVertexOutput OUT = (GoochShadVertexOutput)0; OUT.WNormal = mul(IN.Normal,WorldITXform).xyz; // world coords float4 Po = float4(IN.Position.xyz,(float)1.0); // "P" in object coordinates float4 Pw = mul(Po,WorldXform); // "P" in world coordinates float4 Pl = mul(Pw,ShadowVPXform); // "P" in light coords //OUT.LProj = Pl; // ...for pixel-shader shadow calcs OUT.LProj = mul(Pl,BiasXform); // bias to make texcoord // OUT.WView = normalize(ViewIXform[3].xyz - Pw.xyz); // world coords float4 Ph = mul(Po,WVPXform); // screen clipspace coords OUT.HPosition = Ph; OUT.UV = IN.UV.xy; // pass-thru OUT.LightVec = LightPosition - Pw.xyz; // world coords float2 simpleStripe = StripeScale * float2(Ph.x*cr - Ph.y*sr, Ph.x*sr+Ph.y*cr); OUT.HatchPos = float2(simpleStripe.x/Ph.w,StripeDens); return OUT; } /*********** pixel shader ******/ void gooch_shared(GoochShadVertexOutput IN, out float4 DiffuseContrib, out float4 SpecularContrib) { float3 Ln = normalize(IN.LightVec); float3 Nn = normalize(IN.WNormal); float3 Vn = normalize(IN.WView); Nn = faceforward(Nn,-Vn,Nn); float3 Hn = normalize(Vn + Ln); float hdn = pow(max(0,dot(Hn,Nn)),SpecExpon); hdn = hdn * (GlossDrop+smoothstep(GlossBot,GlossTop,hdn)*(1.0-GlossDrop)); SpecularContrib = float4((hdn * SpecColor),1); float ldn = dot(Ln,Nn); float mixer = 0.5 * (ldn + 1.0); float diffComp = max(0,ldn); float3 surfColor = lerp(DarkColor,LiteColor,mixer); float3 toneColor = lerp(CoolColor,WarmColor,mixer); DiffuseContrib = float4((surfColor + toneColor),1); } float4 gooch_PS_unshadowed(GoochShadVertexOutput IN) :COLOR { float4 diffContrib; float4 specContrib; gooch_shared(IN,diffContrib,specContrib); float4 result = diffContrib + specContrib; return result; } float4 gooch_PS_noshad(GoochShadVertexOutput IN) :COLOR { float4 diffContrib; float4 specContrib; gooch_shared(IN,diffContrib,specContrib); float4 result = diffContrib + specContrib; return result; } float4 gooch_PS_shad(GoochShadVertexOutput IN) :COLOR { float4 diffContrib; float4 specContrib; gooch_shared(IN,diffContrib,specContrib); float4 shadowed = tex2Dproj(ShadDepthSampler,IN.LProj); float stripes = tex2D(stripeSampler,IN.HatchPos.xy).x; float4 result = (diffContrib + specContrib)*max(stripes,shadowed); return result; } /*************/ technique Main < string Script = "Pass=MakeShadow;" "Pass=UseShadow;"; > { pass MakeShadow < string Script = "RenderColorTarget0=ColorShadMap;" "RenderDepthStencilTarget=ShadDepthTarget;" "RenderPort=light0;" "ClearSetColor=ClearColor;" "ClearSetDepth=ClearDepth;" "Clear=Color;" "Clear=Depth;" "Draw=geometry;"; > { VertexShader = compile vs_2_0 shadowGenVS(WorldXf,WorldITXf,ShadowViewProjXf); ZEnable = true; ZWriteEnable = true; ZFunc = LessEqual; CullMode = None; // no pixel shader } pass UseShadow < string Script = "RenderColorTarget0=;" "RenderDepthStencilTarget=;" "RenderPort=;" "ClearSetColor=ClearColor;" "ClearSetDepth=ClearDepth;" "Clear=Color;" "Clear=Depth;" "Draw=geometry;"; > { VertexShader = compile vs_2_0 goochShadVS(WorldXf,WorldITXf, WorldViewProjXf, ShadowViewProjXf,ViewIXf,ShadBiasXf, SpotLightPos); ZEnable = true; ZWriteEnable = true; ZFunc = LessEqual; CullMode = None; PixelShader = compile ps_2_a gooch_PS_shad(); } } technique Unshadowed < string Script = "Pass=UseShadow;"; > { pass UseShadow < string Script = "RenderColorTarget0=;" "RenderDepthStencilTarget=;" "RenderPort=;" "ClearSetColor=ClearColor;" "ClearSetDepth=ClearDepth;" "Clear=Color;" "Clear=Depth;" "Draw=geometry;"; > { VertexShader = compile vs_2_0 goochShadVS(WorldXf,WorldITXf, WorldViewProjXf, ShadowViewProjXf,ViewIXf,ShadBiasXf, SpotLightPos); ZEnable = true; ZWriteEnable = true; ZFunc = LessEqual; CullMode = None; PixelShader = compile ps_2_a gooch_PS_noshad(); } } /***************************** eof ***/ ]]></effect><effect path="f:\devrel\sdk\media\hlsl\include\\quad.fxh"><![CDATA[/*********************************************************************NVMH3**** File: $Id: //sw/devrel/SDK/MEDIA/HLSL/include/Quad.fxh#1 $ Copyright NVIDIA Corporation 2004 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. Comments: Header file with lots of useful macros, types, and functions for use with textures and render-to-texture-buffer effects in DirectX. Example Macro Usages: Texture-declaration Macros: FILE_TEXTURE_2D(SurfTexture,SurfSampler,"myfile.dds") // simple 2D wrap texture FILE_TEXTURE_2D_MODAL(SpotTexture,SpotSampler,"myfile.dds",CLAMP) // user-defined addr mode RenderTarget Texture-declaration Macros: DECLARE_QUAD_TEX(ObjTexture,ObjSampler,"A8R8G8B8") DECLARE_QUAD_DEPTH_BUFFER(DepthTexture,"D24S8") DECLARE_SIZED_QUAD_TEX(GlowTexture,GlowSampler,"A8R8G8B8",0.5) // scaled versions of above DECLARE_SIZED_QUAD_DEPTH_BUFFER(DepthTexture,"D24S8",0.5) DECLARE_SIZED_TEX(BlahMap,BlahSampler,"R32F",128,1) // address mode is "clamp" DECLARE_SQUARE_QUAD_TEX(ShadTexture,ShadObjSampler,"A16R16G16B16F",512) // for shadows etc DECLARE_SQUARE_QUAD_DEPTH_BUFFER(ShadDepth,"D24S8",512) Data types used in shaders: QUAD_REAL & QUAD_REAL# -- defaults to HALF but you can define QUAD_REAL float before #including "Quad.fxh" either by explicitly declaring all the QUAD_REAL types yourself, or #define-ing the symbol QUAD_FLOAT Flags (define before #including "Quad.fxh"): TWEAKABLE_TEXEL_OFFSET // shows in paramter panel NO_TEXEL_OFFSET // disables Structure: QuadVertexOutput -- used by shaders, defines simple connection for "Draw=buffer" VS and PS Shader Functions for "Draw=buffer" passes: QuadVertexOutput ScreenQuadVS(): standard vertex shader for screen-aligned quads QUAD_REAL4 TexQuadPS(QuadVertexOutput IN,uniform sampler2D InputSampler) pass this pixel shader a sampler -- will draw it to the screen QUAD_REAL4 TexQuadBiasPS(QuadVertexOutput IN,uniform sampler2D InputSampler,QUAD_REAL TBias) Same as above, but uses tex2Dbias() Utility Functions for Texture-Based Lookup Tables: QUAD_REAL scale_lookup(QUAD_REAL Value,const QUAD_REAL TableSize) QUAD_REAL2 scale_lookup(QUAD_REAL2 Value,const QUAD_REAL TableSize) QUAD_REAL3 scale_lookup(QUAD_REAL3 Value,const QUAD_REAL TableSize) Other Utility Functions: QUAD_REAL4 premultiply(QUAD_REAL4 C) QUAD_REAL4 unpremultiply(QUAD_REAL4 C) // uses macro value NV_ALPHA_EPSILON Global Variables: QUAD_REAL QuadTexOffset // reconciles difference between pixel and texel centers QUAD_REAL2 QuadScreenSize // VIEWPORTPIXELSIZE, contains dimensions of render window ******************************************************************************/ #ifndef _QUAD_FXH #define _QUAD_FXH // Numeric types we are likely to encounter.... // Redefine these before including "Quad.fxh" if you want // to use a type other than "half" for these data or just // define the symbol QUAD_FLOAT to use "floats" #ifndef QUAD_REAL #ifdef QUAD_FLOAT #define QUAD_REAL float #define QUAD_REAL2 float2 #define QUAD_REAL3 float3 #define QUAD_REAL4 float4 #define QUAD_REAL3x3 float3x3 #define QUAD_REAL4x3 float4x3 #define QUAD_REAL3x4 float3x4 #define QUAD_REAL4x4 float4x4 #else /* ! QUAD_FLOAT */ #define QUAD_REAL half #define QUAD_REAL2 half2 #define QUAD_REAL3 half3 #define QUAD_REAL4 half4 #define QUAD_REAL3x3 half3x3 #define QUAD_REAL4x3 half4x3 #define QUAD_REAL3x4 half3x4 #define QUAD_REAL4x4 half4x4 #endif /* ! QUAD_FLOAT */ #endif /* ! QUAD_REAL */ /////////////////////////////////////////////////////////////////////// /// Texture-Declaration Macros //////////////////////////////////////// /////////////////////////////////////////////////////////////////////// // // Modal 2D File Textures // // example usage: FILE_TEXTURE_2D_MODAL(GlowMap,GlowSampler,"myfile.dds",CLAMP) // #define FILE_TEXTURE_2D_MODAL(TexName,SampName,Filename,AddrMode) texture TexName < \ string ResourceName = (Filename); \ string ResourceType = "2D"; \ >; \ sampler SampName = sampler_state { \ texture = <TexName>; \ AddressU = AddrMode; \ AddressV = AddrMode; \ MipFilter = LINEAR; \ MinFilter = LINEAR; \ MagFilter = LINEAR; \ }; // // Simple 2D File Textures // // example usage: FILE_TEXTURE_2D(GlowMap,GlowSampler,"myfile.dds") // #define FILE_TEXTURE_2D(TextureName,SamplerName,Diskfile) FILE_TEXTURE_2D_MODAL(TextureName,SamplerName,(Diskfile),WRAP) // // Use this variation of DECLARE_QUAD_TEX() if you want a *scaled* render target // // example usage: DECLARE_SIZED_QUAD_TEX(GlowMap,GlowSampler,"A8R8G8B8",1.0) #define DECLARE_SIZED_QUAD_TEX(TexName,SampName,PixFmt,Multiple) texture TexName : RENDERCOLORTARGET < \ float2 ViewPortRatio = {Multiple,Multiple}; \ int MipLevels = 1; \ string Format = PixFmt ; \ string UIWidget = "None"; \ >; \ sampler SampName = sampler_state { \ texture = <TexName>; \ AddressU = CLAMP; \ AddressV = CLAMP; \ MipFilter = POINT; \ MinFilter = LINEAR; \ MagFilter = LINEAR; \ }; // // Use this macro to easily declare typical color render targets // // example usage: DECLARE_QUAD_TEX(ObjMap,ObjSampler,"A8R8G8B8") #define DECLARE_QUAD_TEX(TextureName,SamplerName,PixelFormat) DECLARE_SIZED_QUAD_TEX(TextureName,SamplerName,(PixelFormat),1.0) // // Use this macro to easily declare variable-sized depth render targets // // example usage: DECLARE_SIZED_QUAD_DEPTH_BUFFER(DepthMap,"D24S8",0.5) #define DECLARE_SIZED_QUAD_DEPTH_BUFFER(TextureName,PixelFormat,Multiple) texture TextureName : RENDERDEPTHSTENCILTARGET < \ float2 ViewPortRatio = {Multiple,Multiple}; \ string Format = (PixelFormat); \ string UIWidget = "None"; \ >; // // Use this macro to easily declare typical depth render targets // // example usage: DECLARE_QUAD_DEPTH_BUFFER(DepthMap,"D24S8") #define DECLARE_QUAD_DEPTH_BUFFER(TexName,PixFmt) DECLARE_SIZED_QUAD_DEPTH_BUFFER(TexName,PixFmt,1.0) // // declare exact-sized arbitrary texture // // example usage: DECLARE_SIZED_TEX(BlahMap,BlahSampler,"R32F",128,1) #define DECLARE_SIZED_TEX(Tex,Samp,Fmt,Wd,Ht) texture Tex : RENDERCOLORTARGET < \ float2 Dimensions = { Wd, Ht }; \ string Format = Fmt ; \ string UIWidget = "None"; \ int miplevels=1;\ >; \ sampler Samp = sampler_state { \ texture = <Tex>; \ AddressU = CLAMP; \ AddressV = CLAMP; \ MipFilter = NONE; \ MinFilter = LINEAR; \ MagFilter = LINEAR; \ }; // // declare exact-sized square texture, as for shadow maps // // example usage: DECLARE_SQUARE_QUAD_TEX(ShadMap,ShadObjSampler,"A16R16G16B16F",512) #define DECLARE_SQUARE_QUAD_TEX(TexName,SampName,PixFmt,Size) DECLARE_SIZED_TEX(TexName,SampName,(PixFmt),Size,Size) // // likewise for shadow depth targets // // example usage: DECLARE_SQUARE_QUAD_DEPTH_BUFFER(ShadDepth,"D24S8",512) #define DECLARE_SQUARE_QUAD_DEPTH_BUFFER(TextureName,PixelFormat,Size) texture TextureName : RENDERDEPTHSTENCILTARGET < \ float2 Dimensions = { Size, Size }; \ string Format = (PixelFormat) ; \ string UIWidget = "None"; \ >; //////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////// Utility Functions //////// //////////////////////////////////////////////////////////////////////////// // // Scale inputs for use with texture-based lookup tables. A value ranging from zero to one needs // a slight scaling and offset to be sure to point at the centers of the first and last pixels // of that lookup texture. Pass the integer size of the table in TableSize // For now we'll assume that all tables are 1D, square, or cube-shaped -- all axes of equal size // // Cost of this operation for pixel shaders: two const-register // entries and a MAD (one cycle) QUAD_REAL scale_lookup(QUAD_REAL Value,const QUAD_REAL TableSize) { QUAD_REAL scale = ((TableSize - 1.0)/TableSize); QUAD_REAL shift = (0.5 / TableSize); return (scale*Value + shift); } QUAD_REAL2 scale_lookup(QUAD_REAL2 Value,const QUAD_REAL TableSize) { QUAD_REAL scale = ((TableSize - 1.0)/TableSize); QUAD_REAL shift = (0.5 / TableSize); return (scale.xx*Value + shift.xx); } QUAD_REAL3 scale_lookup(QUAD_REAL3 Value,const QUAD_REAL TableSize) { QUAD_REAL scale = ((TableSize - 1.0)/TableSize); QUAD_REAL shift = (0.5 / TableSize); return (scale.xxx*Value + shift.xxx); } // pre-multiply and un-pre-mutliply functions. The precision // of thse operatoions is often limited to 8-bit so don't // always count on them! // The macro value of NV_ALPHA_EPSILON, if defined, is used to // avoid IEEE "NaN" values that may occur when erroneously // dividing by a zero alpha (thanks to Pete Warden @ Apple // Computer for the suggestion in GPU GEMS II) // multiply color by alpha to turn an un-premultipied // pixel value into a premultiplied one QUAD_REAL4 premultiply(QUAD_REAL4 C) { return QUAD_REAL4((C.w*C.xyz),C.w); } #define NV_ALPHA_EPSILON 0.0001 // given a premultiplied pixel color, try to undo the premultiplication. // beware of precision errors QUAD_REAL4 unpremultiply(QUAD_REAL4 C) { #ifdef NV_ALPHA_EPSILON QUAD_REAL a = C.w + NV_ALPHA_EPSILON; return QUAD_REAL4((C.xyz / a),C.w); #else /* ! NV_ALPHA_EPSILON */ return QUAD_REAL4((C.xyz / C.w),C.w); #endif /* ! NV_ALPHA_EPSILON */ } ///////////////////////////////////////////////////////////////////////////////////// // Structure Declaration //////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////// struct QuadVertexOutput { QUAD_REAL4 Position : POSITION; QUAD_REAL2 UV : TEXCOORD0; }; ///////////////////////////////////////////////////////////////////////////////////// // Hidden tweakables declared by this .fxh file ///////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////// #ifndef NO_TEXEL_OFFSET #ifdef TWEAKABLE_TEXEL_OFFSET QUAD_REAL QuadTexOffset = 0.5; #else /* !TWEAKABLE_TEXEL_OFFSET */ QUAD_REAL QuadTexOffset < string UIWidget="None"; > = 0.5; #endif /* !TWEAKABLE_TEXEL_OFFSET */ QUAD_REAL2 QuadScreenSize : VIEWPORTPIXELSIZE < string UIWidget="None"; >; #endif /* NO_TEXEL_OFFSET */ //////////////////////////////////////////////////////////// ////////////////////////////////// vertex shaders ////////// //////////////////////////////////////////////////////////// QuadVertexOutput ScreenQuadVS( QUAD_REAL3 Position : POSITION, QUAD_REAL3 TexCoord : TEXCOORD0 ) { QuadVertexOutput OUT; OUT.Position = QUAD_REAL4(Position, 1); #ifdef NO_TEXEL_OFFSET OUT.UV = TexCoord.xy; #else /* NO_TEXEL_OFFSET */ QUAD_REAL2 off = QUAD_REAL2(QuadTexOffset/(QuadScreenSize.x),QuadTexOffset/(QuadScreenSize.y)); OUT.UV = QUAD_REAL2(TexCoord.xy+off); #endif /* NO_TEXEL_OFFSET */ return OUT; } ////////////////////////////////////////////////////// ////////////////////////////////// pixel shaders ///// ////////////////////////////////////////////////////// // add glow on top of model QUAD_REAL4 TexQuadPS(QuadVertexOutput IN,uniform sampler2D InputSampler) : COLOR { QUAD_REAL4 texCol = tex2D(InputSampler, IN.UV); return texCol; } QUAD_REAL4 TexQuadBiasPS(QuadVertexOutput IN,uniform sampler2D InputSampler,QUAD_REAL TBias) : COLOR { QUAD_REAL4 texCol = tex2Dbias(InputSampler, QUAD_REAL4(IN.UV,0,TBias)); return texCol; } ////////////////////////////////////////////////////////////////// /// Macros to define passes within Techniques //////////////////// ////////////////////////////////////////////////////////////////// // older HLSL syntax #define TEX_TECH(TechName,SamplerName) technique TechName { \ pass TexturePass { \ VertexShader = compile vs_2_0 ScreenQuadVS(); \ AlphaBlendEnable = false; ZEnable = false; \ PixelShader = compile ps_2_a TexQuadPS(SamplerName); } } #define TEX_BLEND_TECH(TechName,SamplerName) technique TechName { \ pass TexturePass { \ VertexShader = compile vs_2_0 ScreenQuadVS(); \ ZEnable = false; AlphaBlendEnable = true; \ SrcBlend = SrcAlpha; DestBlend = InvSrcAlpha; \ PixelShader = compile ps_2_a TexQuadPS(SamplerName); } } // newer HLSL syntax #define TEX_TECH2(TechName,SamplerName,TargName) technique TechName { \ pass TexturePass < \ string ScriptFunction = "RenderColorTarget0=" (TargName) ";" \ "DrawInternal=Buffer;"; \ > { \ VertexShader = compile vs_2_0 ScreenQuadVS(); \ AlphaBlendEnable = false; ZEnable = false; \ PixelShader = compile ps_2_a TexQuadPS(SamplerName); } } #define TEX_BLEND_TECH2(TechName,SamplerName) technique TechName { \ pass TexturePass < \ string ScriptFunction = "RenderColorTarget0=" (TargName) ";" \ "DrawInternal=Buffer;"; \ > { \ VertexShader = compile vs_2_0 ScreenQuadVS(); \ ZEnable = false; AlphaBlendEnable = true; \ SrcBlend = SrcAlpha; DestBlend = InvSrcAlpha; \ PixelShader = compile ps_2_a TexQuadPS(SamplerName); } } #endif /* _QUAD_FXH */ ////////////// eof /// ]]></effect><effect path="f:\devrel\sdk\media\hlsl\include\\shadowmap.fxh"><![CDATA[/*********************************************************************NVMH3**** File: $Id: //sw/devrel/SDK/MEDIA/HLSL/include/shadowMap.fxh#2 $ Copyright NVIDIA Corporation 2004 TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. A few utility macros and functions for shadow mapping. See typical usage in effect files like shadRPortHW.fx and see notes below. $Date: 2005/07/19 $ $Author: kbjorke $ ******************************************************************************/ #ifndef _SHADOWMAP_FXH #define _SHADOWMAP_FXH #include <include\\Quad.fxh> ////////////////////////////////////////////// // CONSTANTS ///////////////////////////////// ////////////////////////////////////////////// // Some user-assignable macros -- define their values before including // "shadowMap.fxh" to override these defaults #ifndef SHADOW_SIZE #define SHADOW_SIZE 512 #endif /* !SHADOW_SIZE */ // other formats include "D24X8_SHADOWMAP" and "D16_SHADOWMAP" #ifndef SHADOW_FORMAT #define SHADOW_FORMAT "D24S8_SHADOWMAP" #endif /* SHADOW_FORMAT */ #ifndef MAX_SHADOW_BIAS #define MAX_SHADOW_BIAS 0.00015 #endif /* !MAX_SHADOW_BIAS */ // Define BLACK_SHADOW_PASS before including "shadowMap.fxh" for a SLIGHTLY faster generation // of the "throwaway" RGB buffer created when generating depth maps // #define BLACK_SHADOW_PASS ////////////////////////////////////////////////////// //// VM FUNCTIONS //////////////////////////////////// ////////////////////////////////////////////////////// // #define SHAD_BIT_DEPTH 16 /* only significant for DirectX8 */ float4x4 make_bias_mat(float BiasVal) { float fTexWidth = SHADOW_SIZE; float fTexHeight = SHADOW_SIZE; // float fZScale = pow(2.0,((float)SHAD_BIT_DEPTH))-1.0; // dx8 float fZScale = 1.0; //dx9 float fOffsetX = 0.5f + (0.5f / fTexWidth); float fOffsetY = 0.5f + (0.5f / fTexHeight); float4x4 result = float4x4(0.5f, 0.0f, 0.0f, 0.0f, 0.0f, -0.5f, 0.0f, 0.0f, 0.0f, 0.0f, fZScale, 0.0f, fOffsetX, fOffsetY, -BiasVal, 1.0f ); return result; } ////////////////////////////////////////////////////// // DECLARATION MACROS //////////////////////////////// ////////////////////////////////////////////////////// // // Create standard biasing tweakable slider, and create a // static global bias transofrm at the same time // Typical usage: SHADOW_XFORMS("light0",L0ViewXf,L0ProjXf,L0VPXf) // #define DECLARE_SHADOW_BIAS float ShadBias < string UIWidget = "slider"; \ float UIMin = 0; float UIMax = MAX_SHADOW_BIAS; float UIStep = 0.00001; \ string UIName = "Shadow Bias"; > = 0.0001; \ static float4x4 ShadBiasXf = make_bias_mat(ShadBias); // // Declare standard setup for lamp transofrms using "frustrum." // Typical usage: SHADOW_XFORMS("light0",L0ViewXf,L0ProjXf,L0VPXf) // #define DECLARE_SHADOW_XFORMS(LampName,LampView,LampProj,LampViewProj) \ float4x4 LampView : View < string frustum = (LampName); >; \ float4x4 LampProj : Projection < string frustum = (LampName); >; \ static float4x4 LampViewProj = mul(LampView,LampProj); // // Declare standard square_sized shadow map targets. // Typical use: DECLARE_SHADOW_MAPS(ColorShadMap,ColorShadSampler,ShadDepthTarget,ShadDepthSampler) // #define DECLARE_SHADOW_MAPS(CTex,CSamp,DTex,DSamp) \ texture CTex : RENDERCOLORTARGET < float2 Dimensions = {SHADOW_SIZE,SHADOW_SIZE}; \ string Format = "x8b8g8r8" ; string UIWidget = "None"; >; \ sampler CSamp = sampler_state { texture = <CTex>; \ AddressU = CLAMP; AddressV = CLAMP; \ MipFilter = NONE; MinFilter = LINEAR; MagFilter = LINEAR; }; \ texture DTex : RENDERDEPTHSTENCILTARGET < float2 Dimensions = {SHADOW_SIZE,SHADOW_SIZE}; \ string format = (SHADOW_FORMAT); string UIWidget = "None"; >; \ sampler DSamp = sampler_state { texture = <DTex>; \ AddressU = CLAMP; AddressV = CLAMP; \ MipFilter = NONE; MinFilter = LINEAR; MagFilter = LINEAR; }; ///////////////////////////////////////////////////////// // Structures /////////////////////////////////////////// ///////////////////////////////////////////////////////// /* data from application vertex buffer */ struct ShadowAppData { float3 Position : POSITION; float4 UV : TEXCOORD0; // provided for potential use float4 Normal : NORMAL; // ignored if BLACK_SHADOW_PASS }; // Connector from vertex (no pixel shader needed) for simple shadow struct ShadowVertexOutput { float4 HPosition : POSITION; float4 diff : COLOR0; }; // // Connector from vertex to pixel shader for typical usage. The // "LProj" member is the crucial one for shadow mapping. // struct ShadowingVertexOutput { float4 HPosition : POSITION; float2 UV : TEXCOORD0; float3 LightVec : TEXCOORD1; float3 WNormal : TEXCOORD2; float3 WView : TEXCOORD3; float4 LProj : TEXCOORD4; // current position in light-projection space }; ///////////////////////////////////////////////////////// // Vertex Shaders /////////////////////////////////////// ///////////////////////////////////////////////////////// // // Use this vertex shader for GENERATING shadows. It needs to know some transforms // from your scene, pass them as uniform aguments in the technique like so: // VertexShader = compile vs_2_0 shadowGenVS(WorldXf,WorldITXf,ShadowViewProjXf); // Note that a color is returned because DirectX requires you to render an RGB value in // addition to the depth map. If BLACK_SHADOW_PASS is defined this will just be black, // otherwise it will encode the object-space normal as a color, which can be useful // for debugging. Either way, no pixel shader is required for the shadow-generation pass. // ShadowVertexOutput shadowGenVS(ShadowAppData IN, uniform float4x4 WorldXform, uniform float4x4 WorldITXform, uniform float4x4 ShadowVPXform) { ShadowVertexOutput OUT = (ShadowVertexOutput)0; float4 Po = float4(IN.Position.xyz,(float)1.0); // object coordinates float4 Pw = mul(Po,WorldXform); // "P" in world coordinates float4 Pl = mul(Pw,ShadowVPXform); // "P" in light coords OUT.HPosition = Pl; // screen clipspace coords #ifndef BLACK_SHADOW_PASS // shading this just for amusement in the texture pane float4 N = mul(IN.Normal,WorldITXform); // world coords N = normalize(N); OUT.diff = 0.5 + 0.5 * N; #else /* !BLACK_SHADOW_PASS */ OUT.diff = float4(0,0,0,1); #endif /* !BLACK_SHADOW_PASS */ return OUT; } // // A typical vertex shader for USING shadows. It needs to know some transforms // from your scene, pass them as uniform aguments in the technique like so: // VertexShader = compile vs_2_0 // shadowUseVS(WorldXf,WorldITXf,WorldViewProjXf, // ShadowViewProjXf,ViewIXf,ShadBiasXf, LightPosition); // Note that a color is returned because DirectX requires you to render an RGB value in // addition to the depth map. If BLACK_SHADOW_PASS is defined this will just be black, // otherwise it will encode the object-space normal as a color, which can be useful // for debugging. Either way, no pixel shader is required for the shadow-generation pass. // ShadowingVertexOutput shadowUseVS(ShadowAppData IN, uniform float4x4 WorldXform, uniform float4x4 WorldITXform, uniform float4x4 WVPXform, uniform float4x4 ShadowVPXform, uniform float4x4 ViewIXform, uniform float4x4 BiasXform, uniform float3 LightPosition) { ShadowingVertexOutput OUT = (ShadowingVertexOutput)0; OUT.WNormal = mul(IN.Normal,WorldITXform).xyz; // world coords float4 Po = float4(IN.Position.xyz,(float)1.0); // "P" in object coordinates float4 Pw = mul(Po,WorldXform); // "P" in world coordinates float4 Pl = mul(Pw,ShadowVPXform); // "P" in light coords //OUT.LProj = Pl; // ...for pixel-shader shadow calcs OUT.LProj = mul(Pl,BiasXform); // bias to make texcoord // OUT.WView = normalize(ViewIXform[3].xyz - Pw.xyz); // world coords OUT.HPosition = mul(Po,WVPXform); // screen clipspace coords OUT.UV = IN.UV.xy; // pass-thru OUT.LightVec = LightPosition - Pw.xyz; // world coords return OUT; } #if 0 // // TYPICAL USAGE: This code matches shadRPortHW.fx // /*********************************************************/ /*********** pixel shader ********************************/ /*********************************************************/ // // Typical pixel shader that uses ShadowVertexOutput data -- all you need for the shadow // is one tex2Dproj() call! // // In this shader, when DEBUG_VIEW is defined, show the RGB portion of the // shadow pass, to verify that projection is correct float4 useShadowPS(ShadowingVertexOutput IN) : COLOR { #ifdef DEBUG_VIEW return tex2Dproj(ColorShadSampler,IN.LProj); // show the RGB render instead #else /*!DEBUG_VIEW */ // // shading... // float3 Nn = normalize(IN.WNormal); float3 Vn = normalize(IN.WView); float falloff = 1.0 / dot(IN.LightVec,IN.LightVec); float3 Ln = normalize(IN.LightVec); float3 Hn = normalize(Vn + Ln); float hdn = dot(Hn,Nn); float ldn = dot(Ln,Nn); float4 litVec = lit(ldn,hdn,SpecExpon); ldn = litVec.y * SpotLightIntensity; float cone = normalize(IN.LProj.xyz).z; cone = max((float)0,((cone-CosSpotAng)/(((float)1.0)-CosSpotAng))); float3 ambiContrib = SurfColor * AmbiLightColor; float3 diffContrib = SurfColor*(Kd*ldn * SpotLightColor); float3 specContrib = ((ldn * litVec.z * Ks) * SpotLightColor); float3 result = diffContrib + specContrib; // // shadowing..... // float4 shadowed = tex2Dproj(ShadDepthSampler,IN.LProj); return float4((cone*falloff*shadowed.x*result)+ambiContrib,1); #endif /*!DEBUG_VIEW */ } //////////////////////////////////////////////////////////////////// /// TECHNIQUES ///////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////// technique Main < string Script = "Pass=MakeShadow;" "Pass=UseShadow;"; > { pass MakeShadow < string Script = "RenderColorTarget0=ColorShadMap;" "RenderDepthStencilTarget=ShadDepthTarget;" "RenderPort=light0;" "ClearSetColor=ShadowClearColor;" "ClearSetDepth=ClearDepth;" "Clear=Color;" "Clear=Depth;" "Draw=geometry;"; > { VertexShader = compile vs_2_0 shadCamVS(); ZEnable = true; ZWriteEnable = true; ZFunc = LessEqual; CullMode = None; // no pixel shader } pass UseShadow < string Script = "RenderColorTarget0=;" "RenderDepthStencilTarget=;" "RenderPort=;" "ClearSetColor=ClearColor;" "ClearSetDepth=ClearDepth;" "Clear=Color;" "Clear=Depth;" "Draw=geometry;"; > { VertexShader = compile vs_2_0 mainCamVS(); ZEnable = true; ZWriteEnable = true; ZFunc = LessEqual; CullMode = None; PixelShader = compile ps_2_a useShadowPS(); } } #endif /* ZERO */ #endif /* _SHADOWMAP_FXH */ /***************************** eof ***/ ]]></effect><effect path="f:\devrel\sdk\media\hlsl\include\\spot_tex.fxh"><![CDATA[// spot_tex makes a spotlight pattern to be projected // $Revision: #1 $ #ifndef _H_SPOT_TEX #define _H_SPOT_TEX #ifndef SPOT_TEX_SIZE #define SPOT_TEX_SIZE 64 #endif /* SPOT_TEX_SIZE */ #ifndef SPOT_TEX_INSIDE #define SPOT_TEX_INSIDE 0.4 #endif /* SPOT_TEX_INSIDE */ // function used to fill texture float4 spot_texel(float2 P : POSITION,float2 dP : PSIZE) : COLOR { //adjust so the outer rows and columns are ALWAYS black float2 rad = float2(0.5,0.5) - dP; float2 v = P - float2(0.5,0.5); float d = length(v)/rad.x; // for now simple case of (dP.x==dP.y) float s = 1.0 - smoothstep(SPOT_TEX_INSIDE,1,d); return s.xxxx; } texture SpotTex < string TextureType = "2D"; string function = "spot_texel"; string UIWidget = "None"; int width = SPOT_TEX_SIZE, height = SPOT_TEX_SIZE; >; // samplers sampler SpotSamp = sampler_state { texture = <SpotTex>; AddressU = CLAMP; AddressV = CLAMP; MIPFILTER = LINEAR; MINFILTER = LINEAR; MAGFILTER = LINEAR; }; #endif /* _H_SPOT_TEX */ ]]></effect></media_objects></fxstudio_project>