Direct3D11 common shader changes.

This commit is contained in:
rextimmy 2016-03-20 21:50:21 +10:00
parent 1ff6f221fb
commit 3a9b50f702
283 changed files with 3547 additions and 1834 deletions

View file

@ -57,7 +57,7 @@
struct ConnectData
{
float4 hpos : POSITION;
float4 hpos : TORQUE_POSITION;
// TexCoord 0 and 1 (xy,zw) for ripple texture lookup
float4 rippleTexCoord01 : TEXCOORD0;
@ -92,11 +92,11 @@ float fresnel(float NdotV, float bias, float power)
//-----------------------------------------------------------------------------
// Uniforms
//-----------------------------------------------------------------------------
uniform sampler bumpMap : register( S0 );
TORQUE_UNIFORM_SAMPLER2D(bumpMap,0);
//uniform sampler2D prepassTex : register( S1 );
uniform sampler2D reflectMap : register( S2 );
uniform sampler refractBuff : register( S3 );
uniform samplerCUBE skyMap : register( S4 );
TORQUE_UNIFORM_SAMPLER2D(reflectMap,2);
TORQUE_UNIFORM_SAMPLER2D(refractBuff,3);
TORQUE_UNIFORM_SAMPLERCUBE(skyMap,4);
//uniform sampler foamMap : register( S5 );
uniform float4 baseColor;
uniform float4 miscParams;
@ -113,16 +113,16 @@ uniform float4x4 modelMat;
//-----------------------------------------------------------------------------
// Main
//-----------------------------------------------------------------------------
float4 main( ConnectData IN ) : COLOR
float4 main( ConnectData IN ) : TORQUE_TARGET0
{
// Modulate baseColor by the ambientColor.
float4 waterBaseColor = baseColor * float4( ambientColor.rgb, 1 );
waterBaseColor = toLinear(waterBaseColor);
// Get the bumpNorm...
float3 bumpNorm = ( tex2D( bumpMap, IN.rippleTexCoord01.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.x;
bumpNorm += ( tex2D( bumpMap, IN.rippleTexCoord01.zw ).rgb * 2.0 - 1.0 ) * rippleMagnitude.y;
bumpNorm += ( tex2D( bumpMap, IN.rippleTexCoord2 ).rgb * 2.0 - 1.0 ) * rippleMagnitude.z;
float3 bumpNorm = ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord01.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.x;
bumpNorm += ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord01.zw ).rgb * 2.0 - 1.0 ) * rippleMagnitude.y;
bumpNorm += ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord2 ).rgb * 2.0 - 1.0 ) * rippleMagnitude.z;
bumpNorm = normalize( bumpNorm );
bumpNorm = lerp( bumpNorm, float3(0,0,1), 1.0 - rippleMagnitude.w );
@ -136,7 +136,7 @@ float4 main( ConnectData IN ) : COLOR
distortPos.xy += bumpNorm.xy * distortAmt;
#ifdef UNDERWATER
return hdrEncode( tex2Dproj( refractBuff, distortPos ) );
return hdrEncode( TORQUE_TEX2DPROJ( refractBuff, distortPos ) );
#else
float3 eyeVec = IN.objPos.xyz - eyePos;
@ -154,16 +154,16 @@ float4 main( ConnectData IN ) : COLOR
float fakeColorAmt = ang;
// Get reflection map color
float4 refMapColor = hdrDecode( tex2Dproj( reflectMap, distortPos ) );
float4 refMapColor = hdrDecode( TORQUE_TEX2DPROJ( reflectMap, distortPos ) );
// If we do not have a reflection texture then we use the cubemap.
refMapColor = lerp( refMapColor, texCUBE( skyMap, reflectionVec ), NO_REFLECT );
refMapColor = lerp( refMapColor, TORQUE_TEXCUBE( skyMap, reflectionVec ), NO_REFLECT );
// Combine reflection color and fakeColor.
float4 reflectColor = lerp( refMapColor, fakeColor, fakeColorAmt );
//return refMapColor;
// Get refract color
float4 refractColor = hdrDecode( tex2Dproj( refractBuff, distortPos ) );
float4 refractColor = hdrDecode( TORQUE_TEX2DPROJ( refractBuff, distortPos ) );
// calc "diffuse" color by lerping from the water color
// to refraction image based on the water clarity.
@ -198,7 +198,7 @@ float4 main( ConnectData IN ) : COLOR
// Fog it.
float factor = computeSceneFog( eyePos,
IN.objPos,
IN.objPos.xyz,
WORLD_Z,
fogData.x,
fogData.y,

View file

@ -20,12 +20,13 @@
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
#include "../shaderModel.hlsl"
//-----------------------------------------------------------------------------
// Structures
//-----------------------------------------------------------------------------
struct VertData
{
float4 position : POSITION;
float3 position : POSITION;
float3 normal : NORMAL;
float2 undulateData : TEXCOORD0;
float4 horizonFactor : TEXCOORD1;
@ -33,7 +34,7 @@ struct VertData
struct ConnectData
{
float4 hpos : POSITION;
float4 hpos : TORQUE_POSITION;
// TexCoord 0 and 1 (xy,zw) for ripple texture lookup
float4 rippleTexCoord01 : TEXCOORD0;
@ -95,21 +96,21 @@ ConnectData main( VertData IN )
// IN.position.xy += offsetXY;
// IN.undulateData += offsetXY;
// }
float4 worldPos = mul( modelMat, IN.position );
float4 inPos = float4(IN.position, 1.0);
float4 worldPos = mul(modelMat, inPos);
IN.position.z = lerp( IN.position.z, eyePos.z, IN.horizonFactor.x );
//OUT.objPos = worldPos;
OUT.objPos.xyz = IN.position.xyz;
OUT.objPos.xyz = IN.position;
OUT.objPos.w = worldPos.z;
// Send pre-undulation screenspace position
OUT.posPreWave = mul( modelview, IN.position );
OUT.posPreWave = mul( modelview, inPos );
OUT.posPreWave = mul( texGen, OUT.posPreWave );
// Calculate the undulation amount for this vertex.
float2 undulatePos = mul( modelMat, float4( IN.undulateData.xy, 0, 1 ) );
float2 undulatePos = mul( modelMat, float4( IN.undulateData.xy, 0, 1 )).xy;
//if ( undulatePos.x < 0 )
// undulatePos = IN.position.xy;
@ -128,12 +129,12 @@ ConnectData main( VertData IN )
float undulateFade = 1;
// Scale down wave magnitude amount based on distance from the camera.
float dist = distance( IN.position.xyz, eyePos );
float dist = distance( IN.position, eyePos );
dist = clamp( dist, 1.0, undulateMaxDist );
undulateFade *= ( 1 - dist / undulateMaxDist );
// Also scale down wave magnitude if the camera is very very close.
undulateFade *= saturate( ( distance( IN.position.xyz, eyePos ) - 0.5 ) / 10.0 );
undulateFade *= saturate( ( distance( IN.position, eyePos ) - 0.5 ) / 10.0 );
undulateAmt *= undulateFade;
@ -141,7 +142,7 @@ ConnectData main( VertData IN )
//undulateAmt = 0;
// Apply wave undulation to the vertex.
OUT.posPostWave = IN.position;
OUT.posPostWave = inPos;
OUT.posPostWave.xyz += IN.normal.xyz * undulateAmt;
// Save worldSpace position of this pixel/vert
@ -210,7 +211,7 @@ ConnectData main( VertData IN )
for ( int i = 0; i < 3; i++ )
{
binormal.z += undulateFade * waveDir[i].x * waveData[i].y * cos( waveDir[i].x * IN.undulateData.x + waveDir[i].y * IN.undulateData.y + elapsedTime * waveData[i].x );
tangent.z += undulateFade * waveDir[i].y * waveData[i].y * cos( waveDir[i].x * IN.undulateData.x + waveDir[i].y * IN.undulateData.y + elapsedTime * waveData[i].x );
tangent.z += undulateFade * waveDir[i].y * waveData[i].y * cos( waveDir[i].x * IN.undulateData.x + waveDir[i].y * IN.undulateData.y + elapsedTime * waveData[i].x );
}
binormal = normalize( binormal );

View file

@ -20,7 +20,7 @@
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
#include "shadergen:/autogenConditioners.h"
#include "../shaderModelAutoGen.hlsl"
#include "../torque.hlsl"
//-----------------------------------------------------------------------------
@ -69,7 +69,7 @@
struct ConnectData
{
float4 hpos : POSITION;
float4 hpos : TORQUE_POSITION;
// TexCoord 0 and 1 (xy,zw) for ripple texture lookup
float4 rippleTexCoord01 : TEXCOORD0;
@ -105,13 +105,13 @@ float fresnel(float NdotV, float bias, float power)
//-----------------------------------------------------------------------------
// Uniforms
//-----------------------------------------------------------------------------
uniform sampler bumpMap : register( S0 );
uniform sampler2D prepassTex : register( S1 );
uniform sampler2D reflectMap : register( S2 );
uniform sampler refractBuff : register( S3 );
uniform samplerCUBE skyMap : register( S4 );
uniform sampler foamMap : register( S5 );
uniform sampler1D depthGradMap : register( S6 );
TORQUE_UNIFORM_SAMPLER2D(bumpMap,0);
TORQUE_UNIFORM_SAMPLER2D(prepassTex, 1);
TORQUE_UNIFORM_SAMPLER2D(reflectMap, 2);
TORQUE_UNIFORM_SAMPLER2D(refractBuff, 3);
TORQUE_UNIFORM_SAMPLERCUBE(skyMap, 4);
TORQUE_UNIFORM_SAMPLER2D(foamMap, 5);
TORQUE_UNIFORM_SAMPLER1D(depthGradMap, 6);
uniform float4 specularParams;
uniform float4 baseColor;
uniform float4 miscParams;
@ -138,12 +138,12 @@ uniform float reflectivity;
//-----------------------------------------------------------------------------
// Main
//-----------------------------------------------------------------------------
float4 main( ConnectData IN ) : COLOR
float4 main( ConnectData IN ) : TORQUE_TARGET0
{
// Get the bumpNorm...
float3 bumpNorm = ( tex2D( bumpMap, IN.rippleTexCoord01.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.x;
bumpNorm += ( tex2D( bumpMap, IN.rippleTexCoord01.zw ).rgb * 2.0 - 1.0 ) * rippleMagnitude.y;
bumpNorm += ( tex2D( bumpMap, IN.rippleTexCoord2.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.z;
float3 bumpNorm = ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord01.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.x;
bumpNorm += ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord01.zw ).rgb * 2.0 - 1.0 ) * rippleMagnitude.y;
bumpNorm += ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord2.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.z;
bumpNorm = normalize( bumpNorm );
bumpNorm = lerp( bumpNorm, float3(0,0,1), 1.0 - rippleMagnitude.w );
@ -155,7 +155,7 @@ float4 main( ConnectData IN ) : COLOR
float2 prepassCoord = viewportCoordToRenderTarget( IN.posPostWave, rtParams1 );
float startDepth = prepassUncondition( prepassTex, prepassCoord ).w;
float startDepth = TORQUE_PREPASS_UNCONDITION( prepassTex, prepassCoord ).w;
// The water depth in world units of the undistorted pixel.
float startDelta = ( startDepth - pixelDepth );
@ -180,7 +180,7 @@ float4 main( ConnectData IN ) : COLOR
prepassCoord = viewportCoordToRenderTarget( distortPos, rtParams1 );
// Get prepass depth at the position of this distorted pixel.
float prepassDepth = prepassUncondition( prepassTex, prepassCoord ).w;
float prepassDepth = TORQUE_PREPASS_UNCONDITION( prepassTex, prepassCoord ).w;
if ( prepassDepth > 0.99 )
prepassDepth = 5.0;
@ -212,7 +212,7 @@ float4 main( ConnectData IN ) : COLOR
prepassCoord = viewportCoordToRenderTarget( distortPos, rtParams1 );
// Get prepass depth at the position of this distorted pixel.
prepassDepth = prepassUncondition( prepassTex, prepassCoord ).w;
prepassDepth = TORQUE_PREPASS_UNCONDITION( prepassTex, prepassCoord ).w;
if ( prepassDepth > 0.99 )
prepassDepth = 5.0;
delta = ( prepassDepth - pixelDepth ) * farPlaneDist;
@ -260,8 +260,8 @@ float4 main( ConnectData IN ) : COLOR
IN.foamTexCoords.xy += foamRippleOffset;
IN.foamTexCoords.zw += foamRippleOffset;
float4 foamColor = tex2D( foamMap, IN.foamTexCoords.xy );
foamColor += tex2D( foamMap, IN.foamTexCoords.zw );
float4 foamColor = TORQUE_TEX2D( foamMap, IN.foamTexCoords.xy );
foamColor += TORQUE_TEX2D( foamMap, IN.foamTexCoords.zw );
foamColor = saturate( foamColor );
// Modulate foam color by ambient color
@ -282,18 +282,18 @@ float4 main( ConnectData IN ) : COLOR
foamColor.rgb *= FOAM_OPACITY * foamAmt * foamColor.a;
// Get reflection map color.
float4 refMapColor = tex2D( reflectMap, reflectCoord );
float4 refMapColor = TORQUE_TEX2D( reflectMap, reflectCoord );
// If we do not have a reflection texture then we use the cubemap.
refMapColor = lerp( refMapColor, texCUBE( skyMap, reflectionVec ), NO_REFLECT );
refMapColor = lerp( refMapColor, TORQUE_TEXCUBE( skyMap, reflectionVec ), NO_REFLECT );
fakeColor = ( texCUBE( skyMap, reflectionVec ) );
fakeColor = ( TORQUE_TEXCUBE( skyMap, reflectionVec ) );
fakeColor.a = 1;
// Combine reflection color and fakeColor.
float4 reflectColor = lerp( refMapColor, fakeColor, fakeColorAmt );
// Get refract color
float4 refractColor = hdrDecode( tex2D( refractBuff, refractCoord ) );
float4 refractColor = hdrDecode( TORQUE_TEX2D( refractBuff, refractCoord ) );
// We darken the refraction color a bit to make underwater
// elements look wet. We fade out this darkening near the
@ -310,7 +310,7 @@ float4 main( ConnectData IN ) : COLOR
float fogAmt = 1.0 - saturate( exp( -FOG_DENSITY * fogDelta ) );
// Calculate the water "base" color based on depth.
float4 waterBaseColor = baseColor * tex1D( depthGradMap, saturate( delta / depthGradMax ) );
float4 waterBaseColor = baseColor * TORQUE_TEX1D( depthGradMap, saturate( delta / depthGradMax ) );
waterBaseColor = toLinear(waterBaseColor);
// Modulate baseColor by the ambientColor.
@ -354,7 +354,7 @@ float4 main( ConnectData IN ) : COLOR
#else
float4 refractColor = hdrDecode( tex2D( refractBuff, refractCoord ) );
float4 refractColor = hdrDecode( TORQUE_TEX2D( refractBuff, refractCoord ) );
float4 OUT = refractColor;
#endif

View file

@ -20,14 +20,14 @@
// IN THE SOFTWARE.
//-----------------------------------------------------------------------------
#include "shadergen:/autogenConditioners.h"
#include "../shaderModel.hlsl"
//-----------------------------------------------------------------------------
// Structures
//-----------------------------------------------------------------------------
struct VertData
{
float4 position : POSITION;
float3 position : POSITION;
float3 normal : NORMAL;
float2 undulateData : TEXCOORD0;
float4 horizonFactor : TEXCOORD1;
@ -35,7 +35,7 @@ struct VertData
struct ConnectData
{
float4 hpos : POSITION;
float4 hpos : TORQUE_POSITION;
// TexCoord 0 and 1 (xy,zw) for ripple texture lookup
float4 rippleTexCoord01 : TEXCOORD0;
@ -94,12 +94,12 @@ ConnectData main( VertData IN )
0.0, 0.0, 0.0, 1.0 };
IN.position.z = lerp( IN.position.z, eyePos.z, IN.horizonFactor.x );
OUT.objPos = IN.position;
OUT.objPos.w = mul( modelMat, IN.position ).z;
float4 inPos = float4( IN.position, 1.0);
OUT.objPos = inPos;
OUT.objPos.w = mul( modelMat, inPos ).z;
// Send pre-undulation screenspace position
OUT.posPreWave = mul( modelview, IN.position );
OUT.posPreWave = mul( modelview, inPos );
OUT.posPreWave = mul( texGen, OUT.posPreWave );
// Calculate the undulation amount for this vertex.
@ -132,7 +132,7 @@ ConnectData main( VertData IN )
OUT.rippleTexCoord2.w = saturate( OUT.rippleTexCoord2.w - 0.2 ) / 0.8;
// Apply wave undulation to the vertex.
OUT.posPostWave = IN.position;
OUT.posPostWave = inPos;
OUT.posPostWave.xyz += IN.normal.xyz * undulateAmt;
// Convert to screen
@ -197,7 +197,7 @@ ConnectData main( VertData IN )
for ( int i = 0; i < 3; i++ )
{
binormal.z += undulateFade * waveDir[i].x * waveData[i].y * cos( waveDir[i].x * undulatePos.x + waveDir[i].y * undulatePos.y + elapsedTime * waveData[i].x );
tangent.z += undulateFade * waveDir[i].y * waveData[i].y * cos( waveDir[i].x * undulatePos.x + waveDir[i].y * undulatePos.y + elapsedTime * waveData[i].x );
tangent.z += undulateFade * waveDir[i].y * waveData[i].y * cos( waveDir[i].x * undulatePos.x + waveDir[i].y * undulatePos.y + elapsedTime * waveData[i].x );
}
binormal = binormal;