ÿþ<?xml version="1.0" encoding="UTF-16" standalone="no"?> <fxstudio_project fileversion="3" buildversion="1.5.720.800" originalpath="D:\src\sw\devtools\FXComposer1.5\SDK\MEDIA\projects\ocean.fxproj"><system_settings><searchpaths><texture><path name="D:\src\sw\devtools\FXComposer1.5\SDK\MEDIA\projects\"/><path name="D:\src\sw\devrel\SDK\MEDIA\fxcomposer\"/><path name="C:\Documents and Settings\cmaughan\Desktop\new_projects\"/><path name="F:\src\sw\devtools\FXComposer1.0\SDK\MEDIA\fxcomposer\"/><path name="C:\depot\devrel\Playpen\simon\fx\ocean\"/></texture><shader><path name="D:\src\sw\devtools\FXComposer1.5\SDK\MEDIA\projects\"/><path name="D:\src\sw\devrel\SDK\MEDIA\fxcomposer\"/><path name="C:\Documents and Settings\cmaughan\Desktop\new_projects\"/><path name="F:\src\sw\devtools\FXComposer1.0\SDK\MEDIA\fxcomposer\"/><path name="C:\depot\devrel\Playpen\simon\fx\ocean\"/></shader><model><path name="D:\src\sw\devtools\FXComposer1.5\SDK\MEDIA\projects\"/><path name="D:\src\sw\devrel\SDK\MEDIA\fxcomposer\"/><path name="C:\Documents and Settings\cmaughan\Desktop\new_projects\"/><path name="F:\src\sw\devtools\FXComposer1.0\SDK\MEDIA\fxcomposer\"/><path name="C:\depot\devrel\Playpen\simon\fx\ocean\"/></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="120844176" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="1.350254e-034,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="120882112" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="1.335251e-034,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="6.722313e-001,-9.423330e-002,-7.343195e-001,0.000000e+000,-1.713634e-007,9.918663e-001,-1.272838e-001,0.000000e+000,7.403412e-001,8.556426e-002,6.667635e-001,0.000000e+000,1.988312e+000,4.187313e+000,5.786781e+001,1.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Projection" semantic="PROJECTION" type="5" rows="4" columns="4" handle="120812240" animated="0" numkeys="1" defaulttype="float4x4" defaultvalue="1.352814e-034,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.422656e+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,-5.034992e-001,0.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Scene Center" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="120883424" animated="0" numkeys="1" defaulttype="float3" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000"><keys><key num="0" value="0.000000e+000, 1.606189e+000, 0.000000e+000"/></keys></connectionparameter><connectionparameter objectid="3" name="Scene Extents" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="120899280" animated="0" numkeys="1" defaulttype="float3" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000"><keys><key num="0" value="5.000000e+001, 1.606189e+000, 5.000000e+001"/></keys></connectionparameter><connectionparameter objectid="3" name="Screen Size" semantic="UNKNOWN" type="2" rows="0" columns="0" handle="120882728" animated="0" numkeys="1" defaulttype="float2" defaultvalue="2.560000e+002, 2.560000e+002"><keys><key num="0" value="3.200000e+002, 3.820000e+002"/></keys></connectionparameter><connectionparameter objectid="3" name="Show Lights" semantic="UNKNOWN" type="4" rows="0" columns="0" handle="120868928" 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="120823032" 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="120844648" animated="0" numkeys="1" defaulttype="bool" defaultvalue="1"><keys><key num="0" value="0"/></keys></connectionparameter></parameterlist><material objectid="4" name="Ocean_2_2" handle="1222" effect="d:\src\sw\devtools\FXComposer1.5\Sdk\MEDIA\HLSL\Ocean.fx"><parameterlist objectid="2"><connectionparameter objectid="3" name="Script" semantic="STANDARDSGLOBAL" type="3" rows="0" columns="0" handle="202818904" animated="1" 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=PS20;"/><annotation nametype="9" valuetype="9" name="SCRIPTCLASS" value="OBJECT"/><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="worldMatrix" semantic="WORLD" type="5" rows="4" columns="4" handle="201915552" 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="wvpMatrix" semantic="WORLDVIEWPROJECTION" type="5" rows="4" columns="4" handle="205141784" 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.563538e-001,-1.123029e-001,-7.371992e-001,-7.343195e-001,-2.437911e-007,1.182060e+000,-1.277829e-001,-1.272838e-001,1.053251e+000,1.019715e-001,6.693783e-001,6.667635e-001,2.828684e+000,4.990245e+000,5.759124e+001,5.786781e+001,"/></keys><annotation nametype="9" valuetype="9" name="UIWIDGET" value="NONE"/></connectionparameter><connectionparameter objectid="3" name="worldViewMatrix" semantic="WORLDVIEW" type="5" rows="4" columns="4" handle="165940688" 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="6.722313e-001,-9.423330e-002,-7.343195e-001,0.000000e+000,-1.713634e-007,9.918663e-001,-1.272838e-001,0.000000e+000,7.403412e-001,8.556426e-002,6.667635e-001,0.000000e+000,1.988312e+000,4.187313e+000,5.786781e+001,1.000000e+000,"/></keys><annotation nametype="9" valuetype="9" name="UIWIDGET" value="NONE"/></connectionparameter><connectionparameter objectid="3" name="viewInverseMatrix" semantic="VIEWINVERSE" type="5" rows="4" columns="4" handle="200957016" 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="6.722313e-001,-1.639128e-007,7.403412e-001,0.000000e+000,-9.423332e-002,9.918664e-001,8.556426e-002,0.000000e+000,-7.343195e-001,-1.272838e-001,6.667636e-001,0.000000e+000,4.155144e+001,3.212378e+000,-4.041446e+001,1.000000e+000,"/></keys><annotation nametype="9" valuetype="9" name="UIWIDGET" value="NONE"/></connectionparameter><connectionparameter objectid="3" name="time" semantic="TIME" type="3" rows="0" columns="0" handle="169482728" animated="0" numkeys="1" defaulttype="float" defaultvalue="0.000000e+000"><keys><key num="0" value="1.403984e+003"/></keys><annotation nametype="9" valuetype="9" name="UIWIDGET" value="NONE"/></connectionparameter><connectionparameter objectid="3" name="normalMap" semantic="NORMAL" type="6" rows="0" columns="0" handle="167167504" animated="0" numkeys="1" defaulttype="texture" defaultvalue=""><keys><key num="0" value="d:\src\sw\devtools\FXComposer1.5\Sdk\Tools\src\CgFXViewer2\..\..\..\MEDIA\textures\2D\waves2.dds"/></keys><annotation nametype="9" valuetype="9" name="RESOURCENAME" value="waves2.dds"/><annotation nametype="9" valuetype="9" name="RESOURCETYPE" value="2D"/></connectionparameter><connectionparameter objectid="3" name="cubeMap" semantic="ENVIRONMENT" type="6" rows="0" columns="0" handle="217631256" animated="0" numkeys="1" defaulttype="texture" defaultvalue=""><keys><key num="0" value="d:\src\sw\devtools\FXComposer1.5\Sdk\Tools\src\CgFXViewer2\..\..\..\MEDIA\textures\cubemaps\CloudyHillsCubemap2.dds"/></keys><annotation nametype="9" valuetype="9" name="RESOURCENAME" value="CloudyHillsCubemap2.dds"/><annotation nametype="9" valuetype="9" name="RESOURCETYPE" value="CUBE"/></connectionparameter><connectionparameter objectid="3" name="normalMapSampler" semantic="UNKNOWN" type="12" rows="0" columns="0" handle="166959096" animated="0" numkeys="1" defaulttype="sampler" defaultvalue="UNKNOWN"><keys><key num="0" value="UNKNOWN"/></keys></connectionparameter><connectionparameter objectid="3" name="envMapSampler" semantic="UNKNOWN" type="12" rows="0" columns="0" handle="144485976" animated="0" numkeys="1" defaulttype="sampler" defaultvalue="UNKNOWN"><keys><key num="0" value="UNKNOWN"/></keys></connectionparameter><connectionparameter objectid="3" name="bumpHeight" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="169052984" animated="0" numkeys="1" defaulttype="float" defaultvalue="1.000000e-001"><keys><key num="0" value="2.000000e-001"/></keys><annotation nametype="9" valuetype="3" name="UIMAX" value="2.000000e+000"/><annotation nametype="9" valuetype="3" name="UIMIN" value="0.000000e+000"/><annotation nametype="9" valuetype="9" name="UINAME" value="Bump Height"/><annotation nametype="9" valuetype="3" name="UISTEP" value="1.000000e-002"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="SLIDER"/></connectionparameter><connectionparameter objectid="3" name="textureScale" semantic="UNKNOWN" type="2" rows="0" columns="0" handle="166686104" animated="0" numkeys="1" defaulttype="float2" defaultvalue="8.000000e+000, 4.000000e+000"><keys><key num="0" value="8.000000e+000, 4.000000e+000"/></keys><annotation nametype="9" valuetype="9" name="UINAME" value="Texture scale"/></connectionparameter><connectionparameter objectid="3" name="bumpSpeed" semantic="UNKNOWN" type="2" rows="0" columns="0" handle="166648784" animated="0" numkeys="1" defaulttype="float2" defaultvalue="-5.000000e-002, 0.000000e+000"><keys><key num="0" value="-5.000000e-002, 0.000000e+000"/></keys><annotation nametype="9" valuetype="9" name="UINAME" value="Bumpmap translation speed"/></connectionparameter><connectionparameter objectid="3" name="fresnelBias" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="203036656" animated="0" numkeys="1" defaulttype="float" defaultvalue="1.000000e-001"><keys><key num="0" value="1.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="Fresnel bias"/><annotation nametype="9" valuetype="3" name="UISTEP" value="1.000000e-002"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="SLIDER"/></connectionparameter><connectionparameter objectid="3" name="fresnelPower" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="166448584" animated="0" numkeys="1" defaulttype="float" defaultvalue="4.000000e+000"><keys><key num="0" value="4.000000e+000"/></keys><annotation nametype="9" valuetype="3" name="UIMAX" value="1.000000e+001"/><annotation nametype="9" valuetype="3" name="UIMIN" value="1.000000e+000"/><annotation nametype="9" valuetype="9" name="UINAME" value="Fresnel exponent"/><annotation nametype="9" valuetype="3" name="UISTEP" value="1.000000e-002"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="SLIDER"/></connectionparameter><connectionparameter objectid="3" name="hdrMultiplier" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="217762296" animated="0" numkeys="1" defaulttype="float" defaultvalue="3.000000e+000"><keys><key num="0" value="1.077000e+001"/></keys><annotation nametype="9" valuetype="3" name="UIMAX" value="1.000000e+002"/><annotation nametype="9" valuetype="3" name="UIMIN" value="0.000000e+000"/><annotation nametype="9" valuetype="9" name="UINAME" value="HDR multiplier"/><annotation nametype="9" valuetype="3" name="UISTEP" value="1.000000e-002"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="SLIDER"/></connectionparameter><connectionparameter objectid="3" name="deepColor" semantic="DIFFUSE" type="0" rows="0" columns="0" handle="167029280" animated="0" numkeys="1" defaulttype="float4" defaultvalue="0.000000e+000, 0.000000e+000, 1.000000e-001, 1.000000e+000"><keys><key num="0" value="0.000000e+000, 0.000000e+000, 1.803922e-001, 0.000000e+000"/></keys><annotation nametype="9" valuetype="9" name="UINAME" value="Deep water color"/></connectionparameter><connectionparameter objectid="3" name="shallowColor" semantic="DIFFUSE" type="0" rows="0" columns="0" handle="166248200" animated="0" numkeys="1" defaulttype="float4" defaultvalue="0.000000e+000, 5.000000e-001, 5.000000e-001, 1.000000e+000"><keys><key num="0" value="3.529412e-002, 4.745098e-001, 4.431373e-001, 0.000000e+000"/></keys><annotation nametype="9" valuetype="9" name="UINAME" value="Shallow water color"/></connectionparameter><connectionparameter objectid="3" name="reflectionColor" semantic="SPECULAR" type="0" rows="0" columns="0" handle="168011912" animated="0" 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><annotation nametype="9" valuetype="9" name="UINAME" value="Reflection color"/></connectionparameter><connectionparameter objectid="3" name="reflectionAmount" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="208202696" animated="0" numkeys="1" defaulttype="float" defaultvalue="1.000000e+000"><keys><key num="0" value="5.400000e-001"/></keys><annotation nametype="9" valuetype="3" name="UIMAX" value="2.000000e+000"/><annotation nametype="9" valuetype="3" name="UIMIN" value="0.000000e+000"/><annotation nametype="9" valuetype="9" name="UINAME" value="Reflection amount"/><annotation nametype="9" valuetype="3" name="UISTEP" value="1.000000e-002"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="SLIDER"/></connectionparameter><connectionparameter objectid="3" name="waterAmount" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="204441464" animated="0" numkeys="1" defaulttype="float" defaultvalue="1.000000e+000"><keys><key num="0" value="1.000000e+000"/></keys><annotation nametype="9" valuetype="3" name="UIMAX" value="2.000000e+000"/><annotation nametype="9" valuetype="3" name="UIMIN" value="0.000000e+000"/><annotation nametype="9" valuetype="9" name="UINAME" value="Water color amount"/><annotation nametype="9" valuetype="3" name="UISTEP" value="1.000000e-002"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="SLIDER"/></connectionparameter><connectionparameter objectid="3" name="waveAmp" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="217666848" animated="0" numkeys="1" defaulttype="float" defaultvalue="1.000000e+000"><keys><key num="0" value="9.000000e-001"/></keys><annotation nametype="9" valuetype="3" name="UIMAX" value="1.000000e+001"/><annotation nametype="9" valuetype="3" name="UIMIN" value="0.000000e+000"/><annotation nametype="9" valuetype="9" name="UINAME" value="Wave amplitude"/><annotation nametype="9" valuetype="3" name="UISTEP" value="1.000000e-001"/><annotation nametype="9" valuetype="9" name="UIWIDGET" value="SLIDER"/></connectionparameter><connectionparameter objectid="3" name="waveFreq" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="167019592" animated="0" numkeys="1" defaulttype="float" defaultvalue="1.000000e-001"><keys><key num="0" value="1.080000e-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="Wave frequency"/><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="wave" semantic="UNKNOWN" type="18" rows="0" columns="0" handle="166778000" animated="0" numkeys="1" defaulttype="void" defaultvalue="0"><keys><key num="0" value="0"/></keys></connectionparameter></parameterlist><ScriptParams num="0" value="0"><parameterlist objectid="2"/></ScriptParams></material><node objectid="5" name="PlaneXZ" materialoverride="1222" handle="861" worldskin="0"><plane objectid="6" name=""><parameterlist objectid="2"><connectionparameter objectid="3" name="Width" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="169951808" animated="0" numkeys="1" defaulttype="float" defaultvalue="1.750000e+000"><keys><key num="0" value="1.000000e+002"/></keys></connectionparameter><connectionparameter objectid="3" name="Height" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="166683848" animated="0" numkeys="1" defaulttype="float" defaultvalue="1.750000e+000"><keys><key num="0" value="1.000000e+002"/></keys></connectionparameter><connectionparameter objectid="3" name="Columns" semantic="UNKNOWN" type="7" rows="0" columns="0" handle="167843400" 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="167459280" animated="0" numkeys="1" defaulttype="dword" defaultvalue="50"><keys><key num="0" value="50"/></keys></connectionparameter></parameterlist></plane><texgen objectid="7" name=""><parameterlist objectid="2"><connectionparameter objectid="3" name="Coord Set" semantic="UNKNOWN" type="7" rows="0" columns="0" handle="144463760" animated="0" numkeys="1" defaulttype="dword" defaultvalue="0"><keys><key num="0" value="0"/></keys></connectionparameter></parameterlist></texgen><meshmender objectid="8" name=""><parameterlist objectid="2"/></meshmender></node><node objectid="9" name="Default Scene Camera" handle="862" target="4294967295" defaultcamera="1" activecamera="1"><parameterlist objectid="2"><connectionparameter objectid="3" name="Focal Length" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="168558384" animated="0" numkeys="1" defaulttype="float" defaultvalue="1.000000e+000"><keys><key num="0" value="5.786780e+001"/></keys></connectionparameter><connectionparameter objectid="3" name="Field of View" semantic="UNKNOWN" type="3" rows="0" columns="0" handle="167595056" animated="0" numkeys="1" defaulttype="float" defaultvalue="8.000000e+001"><keys><key num="0" value="8.000000e+001"/></keys></connectionparameter><connectionparameter objectid="3" name="Depth Range" semantic="UNKNOWN" type="2" rows="0" columns="0" handle="204715144" animated="0" numkeys="1" defaulttype="float2" defaultvalue="0.000000e+000, 1.000000e+000"><keys><key num="0" value="5.015324e-001, 1.283923e+002"/></keys></connectionparameter><connectionparameter objectid="3" name="Look Direction" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="166120200" animated="0" numkeys="1" defaulttype="float3" defaultvalue="0.000000e+000, 0.000000e+000, 1.000000e+000"><keys><key num="0" value="-7.343196e-001, -1.272838e-001, 6.667635e-001"/></keys></connectionparameter><connectionparameter objectid="3" name="Up Direction" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="207708832" animated="0" numkeys="1" defaulttype="float3" defaultvalue="0.000000e+000, 1.000000e+000, 0.000000e+000"><keys><key num="0" value="-9.423330e-002, 9.918664e-001, 8.556426e-002"/></keys></connectionparameter><connectionparameter objectid="3" name="Lookat Matrix" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="168822408" 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="6.722313e-001,-9.423330e-002,-7.343195e-001,0.000000e+000,-1.713634e-007,9.918663e-001,-1.272838e-001,0.000000e+000,7.403412e-001,8.556426e-002,6.667635e-001,0.000000e+000,1.988312e+000,4.187313e+000,5.786781e+001,1.000000e+000,"/></keys></connectionparameter><connectionparameter objectid="3" name="Camera Position" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="167477168" animated="0" numkeys="1" defaulttype="float3" defaultvalue="0.000000e+000, 0.000000e+000, -1.000000e+000"><keys><key num="0" value="4.155144e+001, 3.212378e+000, -4.041446e+001"/></keys></connectionparameter></parameterlist></node><nvtransformlink objectid="10" parent="0" handle="860" 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="166008848" 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="169226984" 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="201512448" 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="168017920" 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="205576808" 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="167739288" 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="10" parent="860" handle="863" name="Object Transform" animated="1" separable="1"><nodes><node handle="861"/></nodes><parameterlist objectid="2"><connectionparameter objectid="3" name="Matrix" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="168703144" 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="201092936" 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="208627856" 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="217829384" 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="167184600" 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="169413952" 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><nvtransformlink objectid="10" parent="860" handle="864" name="Default Camera Transform" animated="0" separable="1"><nodes><node handle="862"/></nodes><parameterlist objectid="2"><connectionparameter objectid="3" name="Matrix" semantic="UNKNOWN" type="5" rows="4" columns="4" handle="168821440" 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="168171056" 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="166007120" animated="0" numkeys="1" defaulttype="quat" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000, 1.000000e+000"><keys><key num="0" value="5.831246e-002, -4.040023e-001, 2.581638e-002, 9.125324e-001"/></keys></connectionparameter><connectionparameter objectid="3" name="Translation" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="202477264" animated="0" numkeys="1" defaulttype="float3" defaultvalue="0.000000e+000, 0.000000e+000, 0.000000e+000"><keys><key num="0" value="4.155144e+001, 3.212378e+000, -4.041446e+001"/></keys></connectionparameter><connectionparameter objectid="3" name="Scale" semantic="UNKNOWN" type="1" rows="0" columns="0" handle="217797760" 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="167627792" 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="6.722313e-001,-1.750886e-007,7.403412e-001,0.000000e+000,-9.423330e-002,9.918664e-001,8.556426e-002,0.000000e+000,-7.343196e-001,-1.272838e-001,6.667635e-001,0.000000e+000,4.155144e+001,3.212378e+000,-4.041446e+001,1.000000e+000,"/></keys></connectionparameter></parameterlist></nvtransformlink></nvtransformlink></scene><objects><object objectid="3" objectguid="1178903711_54835_17816_162_225_77_133_92_204_97_107" objectname="NVConnectionParameter Object" progid="nvsys.NVConnectionParameter.1"/><object objectid="5" 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="9" objectguid="1675712286_15683_20022_149_108_42_250_122_123_231_64" objectname="NVCamera Object" progid="nvsys.NVCamera.1"/><object objectid="10" objectguid="2342579002_10168_19906_178_150_26_144_17_106_220_182" objectname="NVTransformLink Object" progid="nvsys.NVTransformLink.1"/><object objectid="8" 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="3086621292_36320_17872_166_144_232_189_60_91_123_131" objectname="NVGeoPipeObject_PlaneXZ Object" progid="nvsys.NVGeoPipeObject_PlaneXZ.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="7" objectguid="4057994036_6371_17546_152_57_13_140_51_98_219_190" objectname="NVGeoPipeObject_TexGen Object" progid="nvsys.NVGeoPipeObject_TexGen.1"/></objects><media_objects><texture path="d:\src\sw\devtools\FXComposer1.5\Sdk\MEDIA\textures\2D\waves2.dds"/><texture path="d:\src\sw\devtools\FXComposer1.5\Sdk\MEDIA\textures\cubemaps\CloudyHillsCubemap2.dds"/><effect path="d:\src\sw\devtools\FXComposer1.5\Sdk\MEDIA\HLSL\Ocean.fx"><![CDATA[/*********************************************************************NVMH3**** Path: NVSDK\Common\media\cgfx File: ocean.fx Copyright NVIDIA Corporation 2003 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: Simple ocean shader with animated bump map and geometric waves Based partly on "Effective Water Simulation From Physical Models", GPU Gems ******************************************************************************/ float Script : STANDARDSGLOBAL < string UIWidget = "none"; string ScriptClass = "object"; string ScriptOrder = "standard"; string ScriptOutput = "color"; string Script = "Technique=PS20;"; > = 0.8; float4x4 worldMatrix : World < string UIWidget = "none";>; // World or Model matrix float4x4 wvpMatrix : WorldViewProjection < string UIWidget = "none";>; // Model*View*Projection float4x4 worldViewMatrix : WorldView < string UIWidget = "none";>; float4x4 viewInverseMatrix : ViewInverse < string UIWidget = "none";>; float time : Time < string UIWidget = "none"; >; texture normalMap : Normal < string ResourceName = "waves2.dds"; string ResourceType = "2D"; >; texture cubeMap : Environment < string ResourceName = "CloudyHillsCubemap2.dds"; string ResourceType = "Cube"; >; sampler2D normalMapSampler = sampler_state { Texture = <normalMap>; #if 0 // this is a trick from Halo - use point sampling for sparkles MagFilter = Linear; MinFilter = Point; MipFilter = None; #else MagFilter = Linear; MinFilter = Linear; MipFilter = Linear; #endif }; samplerCUBE envMapSampler = sampler_state { Texture = <cubeMap>; MinFilter = Linear; MagFilter = Linear; MipFilter = Linear; AddressU = Clamp; AddressV = Clamp; }; float bumpHeight < string UIWidget = "slider"; float UIMin = 0.0; float UIMax = 2.0; float UIStep = 0.01; string UIName = "Bump Height"; > = 0.1; float2 textureScale < string UIName = "Texture scale"; > = { 8.0, 4.0 }; float2 bumpSpeed < string UIName = "Bumpmap translation speed"; > = { -0.05, 0.0 }; float fresnelBias < string UIName = "Fresnel bias"; string UIWidget = "slider"; float UIMin = 0.0; float UIMax = 1.0; float UIStep = 0.01; > = 0.1; float fresnelPower < string UIName = "Fresnel exponent"; string UIWidget = "slider"; float UIMin = 1.0; float UIMax = 10.0; float UIStep = 0.01; > = 4.0; float hdrMultiplier < string UIName = "HDR multiplier"; string UIWidget = "slider"; float UIMin = 0.0; float UIMax = 100.0; float UIStep = 0.01; > = 3.0; float4 deepColor : Diffuse < string UIName = "Deep water color"; > = {0.0f, 0.0f, 0.1f, 1.0f}; float4 shallowColor : Diffuse < string UIName = "Shallow water color"; > = {0.0f, 0.5f, 0.5f, 1.0f}; float4 reflectionColor : Specular < string UIName = "Reflection color"; > = {1.0f, 1.0f, 1.0f, 1.0f}; // these are redundant, but makes the ui easier: float reflectionAmount < string UIName = "Reflection amount"; string UIWidget = "slider"; float UIMin = 0.0; float UIMax = 2.0; float UIStep = 0.01; > = 1.0f; float waterAmount < string UIName = "Water color amount"; string UIWidget = "slider"; float UIMin = 0.0; float UIMax = 2.0; float UIStep = 0.01; > = 1.0f; float waveAmp < string UIName = "Wave amplitude"; string UIWidget = "slider"; float UIMin = 0.0; float UIMax = 10.0; float UIStep = 0.1; > = 1.0; float waveFreq < string UIName = "Wave frequency"; string UIWidget = "slider"; float UIMin = 0.0; float UIMax = 1.0; float UIStep = 0.001; > = 0.1; struct a2v { float4 Position : POSITION; // in object space float2 TexCoord : TEXCOORD0; float3 Tangent : TEXCOORD1; float3 Binormal : TEXCOORD2; float3 Normal : NORMAL; }; struct v2f { float4 Position : POSITION; // in clip space float2 TexCoord : TEXCOORD0; float3 TexCoord1 : TEXCOORD1; // first row of the 3x3 transform from tangent to cube space float3 TexCoord2 : TEXCOORD2; // second row of the 3x3 transform from tangent to cube space float3 TexCoord3 : TEXCOORD3; // third row of the 3x3 transform from tangent to cube space float2 bumpCoord0 : TEXCOORD4; float2 bumpCoord1 : TEXCOORD5; float2 bumpCoord2 : TEXCOORD6; float3 eyeVector : TEXCOORD7; }; // wave functions struct Wave { float freq; // 2*PI / wavelength float amp; // amplitude float phase; // speed * 2*PI / wavelength float2 dir; }; #define NWAVES 2 Wave wave[NWAVES] = { { 1.0, 1.0, 0.5, float2(-1, 0) }, { 2.0, 0.5, 1.3, float2(-0.7, 0.7) } }; float evaluateWave(Wave w, float2 pos, float t) { return w.amp * sin( dot(w.dir, pos)*w.freq + t*w.phase); } // derivative of wave function float evaluateWaveDeriv(Wave w, float2 pos, float t) { return w.freq*w.amp * cos( dot(w.dir, pos)*w.freq + t*w.phase); } // sharp wave functions float evaluateWaveSharp(Wave w, float2 pos, float t, float k) { return w.amp * pow(sin( dot(w.dir, pos)*w.freq + t*w.phase)* 0.5 + 0.5 , k); } float evaluateWaveDerivSharp(Wave w, float2 pos, float t, float k) { return k*w.freq*w.amp * pow(sin( dot(w.dir, pos)*w.freq + t*w.phase)* 0.5 + 0.5 , k - 1) * cos( dot(w.dir, pos)*w.freq + t*w.phase); } v2f BumpReflectWaveVS(a2v IN, uniform float4x4 WorldViewProj, uniform float4x4 World, uniform float4x4 ViewIT, uniform float BumpScale, uniform float2 textureScale, uniform float2 bumpSpeed, uniform float time, uniform float waveFreq, uniform float waveAmp ) { v2f OUT; wave[0].freq = waveFreq; wave[0].amp = waveAmp; wave[1].freq = waveFreq*2.0; wave[1].amp = waveAmp*0.5; float4 P = IN.Position; // sum waves P.y = 0.0; float ddx = 0.0, ddy = 0.0; for(int i=0; i<NWAVES; i++) { P.y += evaluateWave(wave[i], P.xz, time); float deriv = evaluateWaveDeriv(wave[i], P.xz, time); ddx += deriv * wave[i].dir.x; ddy += deriv * wave[i].dir.y; } // compute tangent basis float3 B = float3(1, ddx, 0); float3 T = float3(0, ddy, 1); float3 N = float3(-ddx, 1, -ddy); OUT.Position = mul(P, WorldViewProj); // pass texture coordinates for fetching the normal map OUT.TexCoord.xy = IN.TexCoord*textureScale; time = fmod(time, 100.0); OUT.bumpCoord0.xy = IN.TexCoord*textureScale + time*bumpSpeed; OUT.bumpCoord1.xy = IN.TexCoord*textureScale*2.0 + time*bumpSpeed*4.0; OUT.bumpCoord2.xy = IN.TexCoord*textureScale*4.0 + time*bumpSpeed*8.0; // compute the 3x3 tranform from tangent space to object space float3x3 objToTangentSpace; // first rows are the tangent and binormal scaled by the bump scale objToTangentSpace[0] = BumpScale * normalize(T); objToTangentSpace[1] = BumpScale * normalize(B); objToTangentSpace[2] = normalize(N); OUT.TexCoord1.xyz = mul(objToTangentSpace, World[0].xyz); OUT.TexCoord2.xyz = mul(objToTangentSpace, World[1].xyz); OUT.TexCoord3.xyz = mul(objToTangentSpace, World[2].xyz); // compute the eye vector (going from shaded point to eye) in cube space float4 worldPos = mul(P, World); OUT.eyeVector = ViewIT[3] - worldPos; // view inv. transpose contains eye position in world space in last row return OUT; } // Pixel Shaders float4 BumpReflectPS20(v2f IN, uniform sampler2D NormalMap, uniform samplerCUBE EnvironmentMap) : COLOR { // fetch the bump normal from the normal map float4 N = tex2D(NormalMap, IN.TexCoord.xy)*2.0 - 1.0; float3x3 m; // tangent to world matrix m[0] = IN.TexCoord1; m[1] = IN.TexCoord2; m[2] = IN.TexCoord3; float3 Nw = mul(m, N.xyz); // float3 E = float3(IN.TexCoord1.w, IN.TexCoord2.w, IN.TexCoord3.w); float3 E = IN.eyeVector; float3 R = reflect(-E, Nw); return texCUBE(EnvironmentMap, R); } float4 OceanPS20(v2f IN, uniform sampler2D NormalMap, uniform samplerCUBE EnvironmentMap, uniform half4 deepColor, uniform half4 shallowColor, uniform half4 reflectionColor, uniform half4 reflectionAmount, uniform half4 waterAmount, uniform half fresnelPower, uniform half fresnelBias, uniform half hdrMultiplier ) : COLOR { // sum normal maps half4 t0 = tex2D(NormalMap, IN.bumpCoord0.xy)*2.0-1.0; half4 t1 = tex2D(NormalMap, IN.bumpCoord1.xy)*2.0-1.0; half4 t2 = tex2D(NormalMap, IN.bumpCoord2.xy)*2.0-1.0; half3 N = t0.xyz + t1.xyz + t2.xyz; // half3 N = t1.xyz; half3x3 m; // tangent to world matrix m[0] = IN.TexCoord1; m[1] = IN.TexCoord2; m[2] = IN.TexCoord3; half3 Nw = mul(m, N.xyz); Nw = normalize(Nw); // reflection float3 E = normalize(IN.eyeVector); half3 R = reflect(-E, Nw); half4 reflection = texCUBE(EnvironmentMap, R); // hdr effect (multiplier in alpha channel) reflection.rgb *= (1.0 + reflection.a*hdrMultiplier); // fresnel - could use 1D tex lookup for this half facing = 1.0 - max(dot(E, Nw), 0); half fresnel = fresnelBias + (1.0-fresnelBias)*pow(facing, fresnelPower); half4 waterColor = lerp(deepColor, shallowColor, facing); return waterColor*waterAmount + reflection*reflectionColor*reflectionAmount*fresnel; // return waterColor; // return fresnel; // return reflection; } technique PS20 < string Script = "Pass=p0;"; > { pass p0 < string Script = "Draw=geometry;"; > { VertexShader = compile vs_2_0 BumpReflectWaveVS(wvpMatrix, worldMatrix, viewInverseMatrix, bumpHeight, textureScale, bumpSpeed, time, waveFreq, waveAmp); Zenable = true; ZWriteEnable = true; CullMode = None; // PixelShader = compile ps_2_0 BumpReflectPS20(normalMapSampler, envMapSampler); PixelShader = compile ps_2_0 OceanPS20(normalMapSampler, envMapSampler, deepColor, shallowColor, reflectionColor, reflectionAmount, waterAmount, fresnelPower, fresnelBias, hdrMultiplier); } } ]]></effect></media_objects></fxstudio_project>