@@ -34,10 +34,10 @@ float WaterElevation;
34
34
float WaterElevationDeep;
35
35
float WaterElevationAbyss;
36
36
37
- // masks of stratum layers 1 - 4
37
+ // masks of stratum layers 0 - 3 (lower stratum has no mask)
38
38
texture UtilityTextureA;
39
39
40
- // masks of stratum layers 5 - 8
40
+ // masks of stratum layers 4 - 7
41
41
texture UtilityTextureB;
42
42
43
43
// red: wave normal strength
@@ -389,16 +389,16 @@ float ComputeShadow( float4 vShadowCoord )
389
389
}
390
390
391
391
// apply the water color
392
- float3 ApplyWaterColor (float terrainHeight, float depth , float3 inColor )
392
+ float3 ApplyWaterColor (float terrainHeight, float waterDepth , float3 color )
393
393
{
394
- if (depth > 0 ) {
394
+ if (waterDepth > 0 ) {
395
395
// With this extra check we get rid of unwanted coloration on steep cliffs when zoomed in,
396
396
// but we prevent that terrain tesselation swallows too much of the water when zoomed out
397
397
float opacity = saturate (smoothstep (10 , 200 , CameraPosition.y - WaterElevation) + step (terrainHeight, WaterElevation));
398
- float4 wcolor = tex1D (WaterRampSampler, depth );
399
- inColor = lerp (inColor .xyz, wcolor.xyz, wcolor.w * opacity);
398
+ float4 waterColor = tex1D (WaterRampSampler, waterDepth );
399
+ color = lerp (color .xyz, waterColor.rgb, waterColor.a * opacity);
400
400
}
401
- return inColor ;
401
+ return color ;
402
402
}
403
403
404
404
float3 ApplyWaterColorExponentially (float3 viewDirection, float terrainHeight, float waterDepth, float3 color)
@@ -422,19 +422,19 @@ float3 ApplyWaterColorExponentially(float3 viewDirection, float terrainHeight, f
422
422
}
423
423
424
424
// calculate the lit pixels
425
- float4 CalculateLighting ( float3 inNormal, float3 inViewPosition , float3 inAlbedo, float specAmount, float waterDepth, float4 inShadow , uniform bool inShadows)
425
+ float4 CalculateLighting ( float3 inNormal, float3 worldTerrain , float3 inAlbedo, float specAmount, float waterDepth, float4 shadowCoords , uniform bool inShadows)
426
426
{
427
427
float4 color = float4 ( 0 , 0 , 0 , 0 );
428
428
429
- float shadow = ( inShadows && ( 1 == ShadowsEnabled ) ) ? ComputeShadow ( inShadow ) : 1 ;
429
+ float shadow = ( inShadows && ( 1 == ShadowsEnabled ) ) ? ComputeShadow (shadowCoords ) : 1 ;
430
430
if (IsExperimentalShader ()) {
431
- float3 position = TerrainScale * inViewPosition ;
431
+ float3 position = TerrainScale * worldTerrain ;
432
432
float mapShadow = tex2D (UpperAlbedoSampler, position.xy).w;
433
433
shadow = shadow * mapShadow;
434
434
}
435
435
436
436
// calculate some specular
437
- float3 viewDirection = normalize (inViewPosition .xzy-CameraPosition);
437
+ float3 viewDirection = normalize (worldTerrain .xzy-CameraPosition);
438
438
439
439
float SunDotNormal = dot ( SunDirection, inNormal);
440
440
float3 R = SunDirection - 2.0f * SunDotNormal * inNormal;
@@ -445,9 +445,9 @@ float4 CalculateLighting( float3 inNormal, float3 inViewPosition, float3 inAlbed
445
445
color.rgb = light * inAlbedo;
446
446
447
447
if (IsExperimentalShader ()) {
448
- color.rgb = ApplyWaterColorExponentially (-viewDirection, inViewPosition .z, waterDepth, color);
448
+ color.rgb = ApplyWaterColorExponentially (-viewDirection, worldTerrain .z, waterDepth, color);
449
449
} else {
450
- color.rgb = ApplyWaterColor (inViewPosition .z, waterDepth, color);
450
+ color.rgb = ApplyWaterColor (worldTerrain .z, waterDepth, color);
451
451
}
452
452
453
453
color.a = 0.01f + (specular*SpecularColor.w);
@@ -782,11 +782,11 @@ float4 TerrainNormalsPS( VS_OUTPUT inV ) : COLOR
782
782
// sample all the textures we'll need
783
783
float4 mask = saturate (tex2D ( UtilitySamplerA, inV.mTexWT * TerrainScale));
784
784
785
- float4 lowerNormal = normalize (tex2D ( LowerNormalSampler, inV.mTexWT * TerrainScale * LowerNormalTile ) * 2 - 1 );
786
- float4 stratum0Normal = normalize (tex2D ( Stratum0NormalSampler, inV.mTexWT * TerrainScale * Stratum0NormalTile ) * 2 - 1 );
787
- float4 stratum1Normal = normalize (tex2D ( Stratum1NormalSampler, inV.mTexWT * TerrainScale * Stratum1NormalTile ) * 2 - 1 );
788
- float4 stratum2Normal = normalize (tex2D ( Stratum2NormalSampler, inV.mTexWT * TerrainScale * Stratum2NormalTile ) * 2 - 1 );
789
- float4 stratum3Normal = normalize (tex2D ( Stratum3NormalSampler, inV.mTexWT * TerrainScale * Stratum3NormalTile ) * 2 - 1 );
785
+ float4 lowerNormal = normalize (tex2D ( LowerNormalSampler, inV.mTexWT * TerrainScale * LowerNormalTile ) * 2 - 1 );
786
+ float4 stratum0Normal = normalize (tex2D (Stratum0NormalSampler, inV.mTexWT * TerrainScale * Stratum0NormalTile) * 2 - 1 );
787
+ float4 stratum1Normal = normalize (tex2D (Stratum1NormalSampler, inV.mTexWT * TerrainScale * Stratum1NormalTile) * 2 - 1 );
788
+ float4 stratum2Normal = normalize (tex2D (Stratum2NormalSampler, inV.mTexWT * TerrainScale * Stratum2NormalTile) * 2 - 1 );
789
+ float4 stratum3Normal = normalize (tex2D (Stratum3NormalSampler, inV.mTexWT * TerrainScale * Stratum3NormalTile) * 2 - 1 );
790
790
791
791
// blend all normals together
792
792
float4 normal = lowerNormal;
@@ -890,13 +890,13 @@ float4 TerrainBasisPSBiCubic( VS_OUTPUT inV ) : COLOR
890
890
float4 TerrainPS ( VS_OUTPUT inV, uniform bool inShadows ) : COLOR
891
891
{
892
892
// sample all the textures we'll need
893
- float4 mask = saturate (tex2Dproj ( UtilitySamplerA, inV.mTexWT * TerrainScale)* 2 - 1 );
894
- float4 upperAlbedo = tex2Dproj ( UpperAlbedoSampler, inV.mTexWT * TerrainScale* UpperAlbedoTile );
895
- float4 lowerAlbedo = tex2Dproj ( LowerAlbedoSampler, inV.mTexWT * TerrainScale* LowerAlbedoTile );
896
- float4 stratum0Albedo = tex2Dproj ( Stratum0AlbedoSampler, inV.mTexWT * TerrainScale* Stratum0AlbedoTile );
897
- float4 stratum1Albedo = tex2Dproj ( Stratum1AlbedoSampler, inV.mTexWT * TerrainScale* Stratum1AlbedoTile );
898
- float4 stratum2Albedo = tex2Dproj ( Stratum2AlbedoSampler, inV.mTexWT * TerrainScale* Stratum2AlbedoTile );
899
- float4 stratum3Albedo = tex2Dproj ( Stratum3AlbedoSampler, inV.mTexWT * TerrainScale* Stratum3AlbedoTile );
893
+ float4 mask = saturate (tex2D ( UtilitySamplerA, inV.mTexWT * TerrainScale) * 2 - 1 );
894
+ float4 upperAlbedo = tex2D ( UpperAlbedoSampler, inV.mTexWT * TerrainScale * UpperAlbedoTile);
895
+ float4 lowerAlbedo = tex2D ( LowerAlbedoSampler, inV.mTexWT * TerrainScale * LowerAlbedoTile);
896
+ float4 stratum0Albedo = tex2D ( Stratum0AlbedoSampler, inV.mTexWT * TerrainScale * Stratum0AlbedoTile);
897
+ float4 stratum1Albedo = tex2D ( Stratum1AlbedoSampler, inV.mTexWT * TerrainScale * Stratum1AlbedoTile);
898
+ float4 stratum2Albedo = tex2D ( Stratum2AlbedoSampler, inV.mTexWT * TerrainScale * Stratum2AlbedoTile);
899
+ float4 stratum3Albedo = tex2D ( Stratum3AlbedoSampler, inV.mTexWT * TerrainScale * Stratum3AlbedoTile);
900
900
901
901
float3 normal = SampleScreen (NormalSampler, inV.mTexSS).xyz*2 -1 ;
902
902
@@ -909,7 +909,7 @@ float4 TerrainPS( VS_OUTPUT inV, uniform bool inShadows ) : COLOR
909
909
albedo.xyz = lerp ( albedo.xyz, upperAlbedo.xyz, upperAlbedo.w );
910
910
911
911
// get the water depth
912
- float waterDepth = tex2Dproj ( UtilitySamplerC, inV.mTexWT * TerrainScale).g;
912
+ float waterDepth = tex2D ( UtilitySamplerC, inV.mTexWT * TerrainScale).g;
913
913
914
914
// calculate the lit pixel
915
915
float4 outColor = CalculateLighting ( normal, inV.mTexWT.xyz, albedo.xyz, 1 -albedo.w, waterDepth, inV.mShadow, inShadows);
@@ -921,19 +921,19 @@ float4 TerrainAlbedoXP( VS_OUTPUT pixel) : COLOR
921
921
{
922
922
float4 position = TerrainScale*pixel.mTexWT;
923
923
924
- float4 mask0 = saturate (tex2Dproj (UtilitySamplerA,position)*2 -1 );
925
- float4 mask1 = saturate (tex2Dproj (UtilitySamplerB,position)*2 -1 );
924
+ float4 mask0 = saturate (tex2D (UtilitySamplerA,position)*2 -1 );
925
+ float4 mask1 = saturate (tex2D (UtilitySamplerB,position)*2 -1 );
926
926
927
- float4 lowerAlbedo = tex2Dproj (LowerAlbedoSampler,position*LowerAlbedoTile);
928
- float4 stratum0Albedo = tex2Dproj (Stratum0AlbedoSampler,position*Stratum0AlbedoTile);
929
- float4 stratum1Albedo = tex2Dproj (Stratum1AlbedoSampler,position*Stratum1AlbedoTile);
930
- float4 stratum2Albedo = tex2Dproj (Stratum2AlbedoSampler,position*Stratum2AlbedoTile);
931
- float4 stratum3Albedo = tex2Dproj (Stratum3AlbedoSampler,position*Stratum3AlbedoTile);
932
- float4 stratum4Albedo = tex2Dproj (Stratum4AlbedoSampler,position*Stratum4AlbedoTile);
933
- float4 stratum5Albedo = tex2Dproj (Stratum5AlbedoSampler,position*Stratum5AlbedoTile);
934
- float4 stratum6Albedo = tex2Dproj (Stratum6AlbedoSampler,position*Stratum6AlbedoTile);
935
- float4 stratum7Albedo = tex2Dproj (Stratum7AlbedoSampler,position*Stratum7AlbedoTile);
936
- float4 upperAlbedo = tex2Dproj (UpperAlbedoSampler,position*UpperAlbedoTile);
927
+ float4 lowerAlbedo = tex2D (LowerAlbedoSampler,position*LowerAlbedoTile);
928
+ float4 stratum0Albedo = tex2D (Stratum0AlbedoSampler,position*Stratum0AlbedoTile);
929
+ float4 stratum1Albedo = tex2D (Stratum1AlbedoSampler,position*Stratum1AlbedoTile);
930
+ float4 stratum2Albedo = tex2D (Stratum2AlbedoSampler,position*Stratum2AlbedoTile);
931
+ float4 stratum3Albedo = tex2D (Stratum3AlbedoSampler,position*Stratum3AlbedoTile);
932
+ float4 stratum4Albedo = tex2D (Stratum4AlbedoSampler,position*Stratum4AlbedoTile);
933
+ float4 stratum5Albedo = tex2D (Stratum5AlbedoSampler,position*Stratum5AlbedoTile);
934
+ float4 stratum6Albedo = tex2D (Stratum6AlbedoSampler,position*Stratum6AlbedoTile);
935
+ float4 stratum7Albedo = tex2D (Stratum7AlbedoSampler,position*Stratum7AlbedoTile);
936
+ float4 upperAlbedo = tex2D (UpperAlbedoSampler,position*UpperAlbedoTile);
937
937
938
938
float4 albedo = lowerAlbedo;
939
939
albedo = lerp (albedo,stratum0Albedo,mask0.x);
@@ -958,7 +958,7 @@ float4 TerrainAlbedoXP( VS_OUTPUT pixel) : COLOR
958
958
light = LightingMultiplier*light + ShadowFillColor*(1 -light);
959
959
albedo.rgb = light * ( albedo.rgb + specular.rgb );
960
960
961
- float waterDepth = tex2Dproj (UtilitySamplerC,pixel.mTexWT*TerrainScale).g;
961
+ float waterDepth = tex2D (UtilitySamplerC,pixel.mTexWT*TerrainScale).g;
962
962
albedo.rgb = ApplyWaterColor (pixel.mTexWT.z, waterDepth, albedo.rgb);
963
963
964
964
return float4 (albedo.rgb, 0.01f );
@@ -2075,17 +2075,17 @@ float4 TerrainPBRAlbedoPS ( VS_OUTPUT inV) : COLOR
2075
2075
// Layer| Albedo stratum | Normal stratum
2076
2076
// | R | G | B | A | R | G | B | A |
2077
2077
// ---- --- --- --- --- --- --- --- ---
2078
- // | L | R G B unused | X Y Z unused |
2078
+ // | L | R G B specularity | X Y Z unused |
2079
2079
// ---- --- --- --- --- --- --- --- ---
2080
- // | S0 | R G B unused | X Y Z unused |
2081
- // | S1 | R G B unused | X Y Z unused |
2082
- // | S2 | R G B unused | X Y Z unused |
2083
- // | S3 | R G B unused | X Y Z unused |
2080
+ // | S0 | R G B specularity | X Y Z unused |
2081
+ // | S1 | R G B specularity | X Y Z unused |
2082
+ // | S2 | R G B specularity | X Y Z unused |
2083
+ // | S3 | R G B specularity | X Y Z unused |
2084
2084
// ---- --- --- --- --- --- --- --- ---
2085
- // | S4 | R G B unused | X Y Z unused |
2086
- // | S5 | R G B unused | X Y Z unused |
2087
- // | S6 | R G B unused | X Y Z unused |
2088
- // | S7 | R G B unused | X Y Z unused |
2085
+ // | S4 | R G B specularity | X Y Z unused |
2086
+ // | S5 | R G B specularity | X Y Z unused |
2087
+ // | S6 | R G B specularity | X Y Z unused |
2088
+ // | S7 | R G B specularity | X Y Z unused |
2089
2089
// ---- --- --- --- --- --- --- --- ---
2090
2090
// | U | normal.x normal.z unused shadow |
2091
2091
0 commit comments