mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-16 09:04:38 +00:00
Direct3D11 common shader changes.
This commit is contained in:
parent
1ff6f221fb
commit
3a9b50f702
283 changed files with 3547 additions and 1834 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue