Novetus_src/clients/2010L/content/materials/programs/include/ice.cgh

72 lines
1.9 KiB
Plaintext

#ifdef FXCOMPOSER_VERSION // in fxcompser editor
#include "include/common.cgh"
#else
#include "common.cgh"
#endif
/********* pixel shader ********/
float4 icePSStuds(VertexOutput IN,
uniform float Ks,
uniform float SpecExpon,
uniform float3 Lamp0Color,
uniform float3 Lamp1Color,
uniform float3 AmbiColor,
uniform float NoiseScale,
uniform sampler2D StudsSamp,
uniform sampler3D NoiseSamp,
uniform sampler2D NormalSamp,
uniform samplerCUBE EnvSampler,
uniform float Kr,
uniform float FresnelVal
) : COLOR
{
float4 studShade = tex2D(StudsSamp, IN.ModelUV.xy);
float fade = 1-abs(IN.ObjectNormal.w);
if(fade < 0)
fade = 0;
float2 NormalUV = IN.ModelUV.zw;
float3 shiftPos = IN.TexPos3D.xyz;
// low frequency
float3 noiseval = tex3D(NoiseSamp,shiftPos.xyz/NoiseScale*0.1).xyz;
float3 noiseval2 = tex3D(NoiseSamp,shiftPos.xyz/NoiseScale*0.5).xyz * 0.7 + 0.5;
noiseval *= noiseval2;
noiseval = 0.3 + noiseval * 0.7;
float3 dColor = IN.Color.xyz + fade*(noiseval*0.5 - 0.3);
float3 tNorm = tex2D(NormalSamp,NormalUV).xyz - float3(0.5,0.5,0.5);
float tNormSum = 0.85+0.15*(tNorm.x + tNorm.y + tNorm.z);
dColor *= ((1-fade) + (fade*tNormSum));
float3 aWorldBinormal = cross(IN.WorldNormal, IN.WorldTangent);
float3 NnBump = normalize(tNorm.x*IN.WorldTangent + tNorm.y*aWorldBinormal + tNorm.z*IN.WorldNormal);
NnBump *= fade;
Ks *= fade;
float3 Nn = normalize(lerp(NnBump, IN.WorldNormal, 0.85 ));
float3 diffContrib;
float3 specContrib;
float3 reflContrib;
ps_shared_lighting_env(dColor, Nn, IN.WorldView,
IN.Light0Vec, IN.Light1Vec,
Lamp0Color, Lamp1Color,
AmbiColor,
Ks, SpecExpon,
Kr,
diffContrib,
specContrib,
EnvSampler,
reflContrib);
float3 result = lerp(diffContrib, studShade.xyz, studShade.w) + specContrib;
result += (FresnelVal*reflContrib) * fade;
return float4(result, 1);
}