home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GameStar 2005 April
/
Gamestar_72_2005-04_dvd.iso
/
Dema
/
Liquidator
/
Liquidator.tma
/
data
/
renderer
/
pixelshaders.fx
< prev
next >
Wrap
Text File
|
2004-11-04
|
41KB
|
1,098 lines
//--------------------------------------------------------------------------
// TMShaders
// Copyright (c) 2002 by Tools-Media Corp., All Right Reserved.
// Programmer: Tima Tcvetkov
//
// pixelshaders.fx
// system pixel shaders
//--------------------------------------------------------------------------
#ifndef __PIXELSHADERS_FX__
#define __PIXELSHADERS_FX__
extern float4 g_fSpecColor[8] : register(c0); // specular color
extern float4 g_fDiffuseColor[8] : register(c0); // diffuse color
extern float4 g_fBlinnProperties : register(c0); // blinn-bumpmap attenuation properties
extern float4 g_fProjectorColors[__MAX_TEXTCOORDS__] : register(c0); // projective light color array
// pixel shaders
sampler2D g_samNormalMap : register(s0); // normal map
sampler2D g_samAlphaMap; // alpha map
sampler2D g_samAlphaMap0 : register(s0); // alpha map
sampler2D g_samAlphaMap1 : register(s1); // alpha map
sampler2D g_samAlphaMap2 : register(s2); // alpha map
sampler2D g_samAlphaMap3 : register(s3); // alpha map
sampler2D g_samProjectiveLights[__MAX_TEXTCOORDS__] : register(s0); // projective lights texture array
sampler g_samProjectiveLights3D[__MAX_TEXTCOORDS__] : register(s0); // projective lights 3Dtexture array
sampler3D g_samAttenuationMap : register(s1); // distance attenuation map
samplerCUBE g_samNormalizationMap : register(s2); // normalization cubemap
samplerCUBE g_samCubeMap : register(s3); // cubemap for blinn bump-mapping
sampler2D g_samLightMap0 : register(s0); // lightmap
sampler2D g_samLightMap1 : register(s1); // lightmap
sampler2D g_samHeightMap0 : register(s0);
sampler2D g_samHeightMap1 : register(s1);
sampler2D g_samHeightMap2 : register(s2);
sampler2D g_samHeightMap3 : register(s3);
sampler2D g_samHeightMap4 : register(s4);
sampler2D g_samHeightMap5 : register(s5);
samplerCUBE g_samAngleCubeMap0 : register(s0); // cubemap for bump self shadow
samplerCUBE g_samAngleCubeMap1 : register(s1); // cubemap for bump self shadow
samplerCUBE g_samAngleCubeMap2 : register(s2); // cubemap for bump self shadow
samplerCUBE g_samAngleCubeMap3 : register(s3); // cubemap for bump self shadow
samplerCUBE g_samAngleCubeMap4 : register(s4); // cubemap for bump self shadow
samplerCUBE g_samAngleCubeMap5 : register(s5); // cubemap for bump self shadow
samplerCUBE g_samAngleCubeMap6 : register(s6); // cubemap for bump self shadow
samplerCUBE g_samAngleCubeMap7 : register(s7); // cubemap for bump self shadow
samplerCUBE g_samAngleCubeMap8 : register(s8); // cubemap for bump self shadow
sampler3D g_samHorMap0 : register(s0); // horizon map for bump self shadow
sampler3D g_samHorMap1 : register(s1); // horizon map for bump self shadow
sampler3D g_samHorMap2 : register(s2); // horizon map for bump self shadow
sampler3D g_samHorMap3 : register(s3); // horizon map for bump self shadow
sampler3D g_samHorMap4 : register(s4); // horizon map for bump self shadow
sampler3D g_samHorMap5 : register(s5); // horizon map for bump self shadow
sampler3D g_samHorMap6 : register(s6); // horizon map for bump self shadow
sampler3D g_samHorMap7 : register(s7); // horizon map for bump self shadow
sampler3D g_samHorMap8 : register(s8); // horizon map for bump self shadow
extern float4 constCubeLights[6] : register(c0);
extern float4 constBlurFadeFactor : register(c0);
float3 Bx2( float3 val ){
return val * (float3)2.0f - (float3)1.0f;
}
float SBx2( float val ){
return val * 2.0f - 1.0f;
}
/*
Computes new tex. coords. based on Height-map for parallax bumpmapping
*/
float2 ComputeHeightMapOffset( uniform int SamplerNumber, float2 TexCoords, float3 Eye,float HeightScale ){
float fHeight;
if( SamplerNumber == 0 ){
fHeight = SBx2(tex2D(g_samHeightMap0,TexCoords).x);
}
if( SamplerNumber == 1 ){
fHeight = SBx2(tex2D(g_samHeightMap1,TexCoords).x);
}
if( SamplerNumber == 2 ){
fHeight = SBx2(tex2D(g_samHeightMap2,TexCoords).x);
}
if( SamplerNumber == 3 ){
fHeight = SBx2(tex2D(g_samHeightMap3,TexCoords).x);
}
if( SamplerNumber == 4 ){
fHeight = SBx2(tex2D(g_samHeightMap4,TexCoords).x);
}
if( SamplerNumber == 5 ){
fHeight = SBx2(tex2D(g_samHeightMap5,TexCoords).x);
}
float3 fEyeNorm = normalize(Eye);
float2 fOffset = fEyeNorm.xy * fHeight * HeightScale;
return (TexCoords.xy + fOffset);
}
/*
Computes bum self shadow term
*/
float ComputeSelfShadow( uniform int AngleMapSampler, uniform int HorizonMapSampler, float3 LightVec, float2 TexCoords ){
float2 fAngle;
float fE,fHorizon;
if( AngleMapSampler == 0 ){
fAngle = texCUBE(g_samAngleCubeMap0,LightVec);
}
if( AngleMapSampler == 1 ){
fAngle = texCUBE(g_samAngleCubeMap1,LightVec);
}
if( AngleMapSampler == 2 ){
fAngle = texCUBE(g_samAngleCubeMap2,LightVec);
}
if( AngleMapSampler == 3 ){
fAngle = texCUBE(g_samAngleCubeMap3,LightVec);
}
if( AngleMapSampler == 4 ){
fAngle = texCUBE(g_samAngleCubeMap4,LightVec);
}
if( AngleMapSampler == 5 ){
fAngle = texCUBE(g_samAngleCubeMap5,LightVec);
}
if( AngleMapSampler == 6 ){
fAngle = texCUBE(g_samAngleCubeMap6,LightVec);
}
if( AngleMapSampler == 7 ){
fAngle = texCUBE(g_samAngleCubeMap7,LightVec);
}
if( AngleMapSampler == 8 ){
fAngle = texCUBE(g_samAngleCubeMap8,LightVec);
}
fE = 0.5f * sign(LightVec.y) * fAngle.y;
if( HorizonMapSampler == 0 ){
fHorizon = tex3D(g_samHorMap0,float3(TexCoords,fE));
}
if( HorizonMapSampler == 1 ){
fHorizon = tex3D(g_samHorMap1,float3(TexCoords,fE));
}
if( HorizonMapSampler == 2 ){
fHorizon = tex3D(g_samHorMap2,float3(TexCoords,fE));
}
if( HorizonMapSampler == 3 ){
fHorizon = tex3D(g_samHorMap3,float3(TexCoords,fE));
}
if( HorizonMapSampler == 4 ){
fHorizon = tex3D(g_samHorMap4,float3(TexCoords,fE));
}
if( HorizonMapSampler == 5 ){
fHorizon = tex3D(g_samHorMap5,float3(TexCoords,fE));
}
if( HorizonMapSampler == 6 ){
fHorizon = tex3D(g_samHorMap6,float3(TexCoords,fE));
}
if( HorizonMapSampler == 7 ){
fHorizon = tex3D(g_samHorMap7,float3(TexCoords,fE));
}
if( HorizonMapSampler == 8 ){
fHorizon = tex3D(g_samHorMap8,float3(TexCoords,fE));
}
return saturate(5.0f * (fAngle.x - (fHorizon*0.7f )) + 0.5f);
}
/*
Computes per-pixel cube lighting
*/
float3 ComputeCubeLight( float3 fTangentS, float3 fTangentT,float3 fTangentSxT, float3 fNormal ){
float3 fTangentNormal;
fTangentNormal.x = dot(fTangentS, fNormal);
fTangentNormal.y = dot(fTangentT, fNormal);
fTangentNormal.z = dot(fTangentSxT, fNormal);
fTangentNormal = normalize(fTangentNormal);
float3 Scale = fTangentNormal * fTangentNormal;
int3 Sample3 = (fTangentNormal < 0.0f);
float3 c1 = constCubeLights[Sample3.x+0] * Scale.x;
float3 c2 = constCubeLights[Sample3.y+2] * Scale.y;
float3 c3 = constCubeLights[Sample3.z+4] * Scale.z;
return (c1+c2+c3);
}
/*
perpixel cube lighting with diffuse color, lightmap, and alphamask
*/
float4 CubeAmbientLightingPS20( float4 TexCoord[8] : TEXCOORD0,
float4 Color : COLOR0, uniform int Index ) : COLOR0
{
float4 fFinalColor = Color;
if( Index == 2 ){ // diffuse with alphatest0
fFinalColor.w = tex2D(g_samAlphaMap0,TexCoord[0]).w;
return fFinalColor;
}
if( Index == 3 ){ // diffuse with lightmap0, alphatest1
fFinalColor.xyz += tex2D(g_samLightMap0,TexCoord[0]);
fFinalColor.w = tex2D(g_samAlphaMap1,TexCoord[1]).w;
return fFinalColor;
}
if( Index == 4 ){ // diffuse with lightmap0
fFinalColor.xyz += tex2D(g_samLightMap0,TexCoord[0]);
return fFinalColor;
}
if( Index == 5 ){ // diffuse with cubelight0
float3 Normal = Bx2(tex2D(g_samNormalMap,TexCoord[0]));
fFinalColor.xyz += ComputeCubeLight(TexCoord[1].xyz,TexCoord[2].xyz,TexCoord[3].xyz,Normal);
return fFinalColor;
}
if( Index == 6 ){ // diffuse with cubelight0 and lightmap1
float3 Normal = Bx2(tex2D(g_samNormalMap,TexCoord[0]));
fFinalColor.xyz += ComputeCubeLight(TexCoord[2].xyz,TexCoord[3].xyz,TexCoord[4].xyz,Normal);
fFinalColor.xyz += tex2D(g_samLightMap1,TexCoord[1]);
return fFinalColor;
}
if( Index == 7 ){ // diffuse with cubelight0 and lightmap1 and alphatest2
float3 Normal = Bx2(tex2D(g_samNormalMap,TexCoord[0]));
fFinalColor.xyz += ComputeCubeLight(TexCoord[2].xyz,TexCoord[3].xyz,TexCoord[4].xyz,Normal);
fFinalColor.xyz += tex2D(g_samLightMap1,TexCoord[1]);
fFinalColor.w = tex2D(g_samAlphaMap2,TexCoord[0]).w;
return fFinalColor;
}
if( Index == 8 ){ // diffuse with cubelight0 and alphatest1
float3 Normal = Bx2(tex2D(g_samNormalMap,TexCoord[0]));
fFinalColor.xyz += ComputeCubeLight(TexCoord[1].xyz,TexCoord[2].xyz,TexCoord[3].xyz,Normal);
fFinalColor.w = tex2D(g_samAlphaMap1,TexCoord[0]).w;
return fFinalColor;
}
if( Index == 9 ){ // diffuse with cubelight0 and parallax
float2 fTexCoord = ComputeHeightMapOffset(1,TexCoord[0],TexCoord[4],constCubeLights[0].w);
float3 Normal = Bx2(tex2D(g_samNormalMap,fTexCoord));
fFinalColor.xyz += ComputeCubeLight(TexCoord[1].xyz,TexCoord[2].xyz,TexCoord[3].xyz,Normal);
return fFinalColor;
}
if( Index == 10 ){ // diffuse with cubelight0 and lightmap1 and parallax
float2 fTexCoord = ComputeHeightMapOffset(2,TexCoord[0],TexCoord[5],constCubeLights[0].w);
float3 Normal = Bx2(tex2D(g_samNormalMap,fTexCoord));
fFinalColor.xyz += ComputeCubeLight(TexCoord[2].xyz,TexCoord[3].xyz,TexCoord[4].xyz,Normal);
fFinalColor.xyz += tex2D(g_samLightMap1,TexCoord[1]);
return fFinalColor;
}
if( Index == 11 ){ // diffuse with cubelight0 and lightmap1 and alphatest2 and parallax
float2 fTexCoord = ComputeHeightMapOffset(3,TexCoord[0],TexCoord[5],constCubeLights[0].w);
float3 Normal = Bx2(tex2D(g_samNormalMap,fTexCoord));
fFinalColor.xyz += ComputeCubeLight(TexCoord[2].xyz,TexCoord[3].xyz,TexCoord[4].xyz,Normal);
fFinalColor.xyz += tex2D(g_samLightMap1,TexCoord[1]);
fFinalColor.w = tex2D(g_samAlphaMap2,fTexCoord).w;
return fFinalColor;
}
if( Index == 12 ){ // diffuse with cubelight0 and alphatest1 and parallax
float2 fTexCoord = ComputeHeightMapOffset(2,TexCoord[0],TexCoord[4],constCubeLights[0].w);
float3 Normal = Bx2(tex2D(g_samNormalMap,fTexCoord));
fFinalColor.xyz += ComputeCubeLight(TexCoord[1].xyz,TexCoord[2].xyz,TexCoord[3].xyz,Normal);
fFinalColor.w = tex2D(g_samAlphaMap1,fTexCoord).w;
return fFinalColor;
}
// diffuse only
return fFinalColor;
}
float4 CubeAmbientLighting( float4 TexCoord[__MAX_TEXTCOORDS__] : TEXCOORD0,
float4 Color : COLOR0,
uniform int Index ) : COLOR0
{
float4 fFinalColor = Color;
if( Index == 2 ){ // diffuse with alphatest0
fFinalColor.w = tex2D(g_samAlphaMap0,TexCoord[0]).w;
return fFinalColor;
}
if( Index == 3 ){ // diffuse with lightmap0, alphatest1
fFinalColor.xyz += tex2D(g_samLightMap0,TexCoord[0]);
fFinalColor.w = tex2D(g_samAlphaMap1,TexCoord[1]).w;
return fFinalColor;
}
if( Index == 4 ){ // diffuse with lightmap0
fFinalColor.xyz += tex2D(g_samLightMap0,TexCoord[0]);
return fFinalColor;
}
// diffuse only
return fFinalColor;
}
// projective light with alpha test
float4 ProjectiveLightPS20( float4 TexCoord[__MAX_TEXTCOORDS__] : TEXCOORD0,
uniform int NumLights, uniform bool bAlphaTest,uniform bool bSelfShadow ) : COLOR
{
float4 fFinalColor = 0;
if( bAlphaTest ){
for( int i=0; i<NumLights; i++ ){
fFinalColor.xyz += tex2Dproj(g_samProjectiveLights[0],TexCoord[i]) * g_fProjectorColors[i];
}
fFinalColor.w = tex2D(g_samProjectiveLights[1],TexCoord[NumLights]).w;
}
else{
for( int i=0; i<NumLights; i++ ){
fFinalColor += tex2Dproj(g_samProjectiveLights[0],TexCoord[i]) * g_fProjectorColors[i];
}
}
return fFinalColor;
}
float4 ProjectiveLight(
#ifdef __MIN_PS__
float2 TexCoord[__MAX_TEXTCOORDS__] : TEXCOORD0,
#else
float4 TexCoord[__MAX_TEXTCOORDS__] : TEXCOORD0,
#endif
uniform int NumLights, uniform bool bAlphaTest, uniform bool bSelfShadow ) : COLOR
{
float4 fFinalColor = 0;
if( bAlphaTest ){
for( int i=0; i<NumLights; i++ ){
#ifdef __MIN_PS__
fFinalColor.xyz += tex2D(g_samProjectiveLights[i],TexCoord[i]) * g_fProjectorColors[i];
#else
fFinalColor.xyz += tex2Dproj(g_samProjectiveLights[i],TexCoord[i]) * g_fProjectorColors[i];
#endif
}
fFinalColor.w = tex2D(g_samProjectiveLights[NumLights],TexCoord[NumLights]).w;
}
else{
for( int i=0; i<NumLights; i++ ){
#ifdef __MIN_PS__
fFinalColor += tex2D(g_samProjectiveLights[i],TexCoord[i]) * g_fProjectorColors[i];
#else
fFinalColor += tex2Dproj(g_samProjectiveLights[i],TexCoord[i]) * g_fProjectorColors[i];
#endif
}
}
return fFinalColor;
}
float4 ProjectiveLight3D20( float3 TexCoord[__MAX_TEXTCOORDS__] : TEXCOORD0, uniform int NumLights, uniform bool bAlphaTest,uniform bool bSelfShadow ) : COLOR
{
float4 fFinalColor = 0;
if( bAlphaTest ){
for( int i=0; i<NumLights; i++ ){
fFinalColor.xyz += tex3D(g_samProjectiveLights3D[0],TexCoord[i]) * g_fProjectorColors[i];
}
//FIXME: we sample 2d map for alpha value
fFinalColor.w = tex2D(g_samAlphaMap1,TexCoord[NumLights]).w;
}
else{
for( int i=0; i<NumLights; i++ ){
fFinalColor += tex3D(g_samProjectiveLights3D[0],TexCoord[i]) * g_fProjectorColors[i];
}
}
return fFinalColor;
}
float4 ProjectiveLight3D( float3 TexCoord[__MAX_TEXTCOORDS__] : TEXCOORD0, uniform int NumLights, uniform bool bAlphaTest,uniform bool bSelfShadow ) : COLOR
{
float4 fFinalColor = 0;
if( bAlphaTest ){
for( int i=0; i<NumLights; i++ ){
fFinalColor.xyz += tex3D(g_samProjectiveLights3D[i],TexCoord[i]) * g_fProjectorColors[i];
}
//FIXME: we sample 2d map for alpha value
fFinalColor.w = tex2D(g_samProjectiveLights3D[NumLights],TexCoord[NumLights]).w;
}
else{
for( int i=0; i<NumLights; i++ ){
fFinalColor += tex3D(g_samProjectiveLights3D[i],TexCoord[i]) * g_fProjectorColors[i];
}
}
return fFinalColor;
}
float4 ProjectiveShadow( float3 TexCoord[__MAX_TEXTCOORDS__] : TEXCOORD0,
float4 DirMask1 : COLOR0,
float4 DirMask2 : COLOR1,
uniform int NumShadows,
uniform bool bNeedAlphaTest,uniform bool bSelfShadow ):COLOR{
float4 fFinalColor = 0.0f;
for( int i=0; i<NumShadows; i++ ){
float4 fDirMaks;
if( i ==0 ){
fDirMaks = DirMask1;
}
else if( i == 1 ){
fDirMaks = (float4)DirMask1.w;
}
else if( i == 2 ){
fDirMaks = DirMask2;
}
else if( i == 3 ){
fDirMaks = (float4)DirMask2.w;
}
float4 ColorMasked = g_fProjectorColors[i] * fDirMaks;
fFinalColor += tex2D(g_samProjectiveLights[i],TexCoord[i]) * ColorMasked;
}
if( bNeedAlphaTest ){
fFinalColor.w = tex2D(g_samProjectiveLights[NumShadows],TexCoord[NumShadows]).w;
}
return fFinalColor;
}
float4 Blur( float2 TexCoord[__MAX_TEXTCOORDS__] : TEXCOORD0 ):COLOR{
float4 fFinalColor = 0.0f;
for( int i=0; i<4; i++ ){
fFinalColor += float4(0.25f, 0.25f, 0.25f, 0.25f) * tex2D(g_samProjectiveLights[i],TexCoord[i]);
}
return saturate(fFinalColor);
}
float4 SpecularPointLight( uniform int NumLights,
uniform bool bParallax,
uniform bool bSelfShadow,
float2 NMCoords : TEXCOORD0,
float3 AttCoords : TEXCOORD1,
float3 HalfVector : TEXCOORD2,
float3 AttCoords2 : TEXCOORD3,
float3 HalfVector2 : TEXCOORD4,
float3 AttCoords3 : TEXCOORD5,
float3 HalfVector3 : TEXCOORD6,
float3 Eye : TEXCOORD7,
float4 BackCull : COLOR0,
float4 BackCull2 : COLOR1 ):COLOR
{
float2 fTexCoord;
if(bParallax){
if( NumLights == 1 ){
fTexCoord = ComputeHeightMapOffset(3,NMCoords.xy,AttCoords2,g_fSpecColor[0].w);
}
if( NumLights == 2 ){
fTexCoord = ComputeHeightMapOffset(3,NMCoords.xy,AttCoords3,g_fSpecColor[0].w);
}
if( NumLights == 3 ){
fTexCoord = ComputeHeightMapOffset(3,NMCoords.xy,Eye,g_fSpecColor[0].w);
}
}else{
fTexCoord = NMCoords.xy;
}
// unpack normal and half vector
float3 fNormal = Bx2(tex2D(g_samNormalMap,fTexCoord));
float3 fHalfVector = Bx2(texCUBE(g_samNormalizationMap,HalfVector));
float fDot = pow( saturate( dot(fNormal,fHalfVector) ),16);
if( bSelfShadow ){
fDot *= ComputeSelfShadow(4,5,fHalfVector,fTexCoord);
}
float4 fAttenuation = tex3D(g_samAttenuationMap,AttCoords);
float4 fFinalColor;
fFinalColor = (fAttenuation * (float4)fDot * g_fSpecColor[0] * BackCull);
if( NumLights > 1 ){
fHalfVector = Bx2(texCUBE(g_samNormalizationMap,HalfVector2));
fDot = pow( saturate( dot(fNormal,fHalfVector) ),16);
if( bSelfShadow ){
fDot *= ComputeSelfShadow(4,5,fHalfVector,fTexCoord);
}
fAttenuation = tex3D(g_samAttenuationMap,AttCoords2);
fFinalColor.xyz += (fAttenuation * (float4)fDot * g_fSpecColor[1] * BackCull.w);
}
if( NumLights > 2 ){
fHalfVector = Bx2(texCUBE(g_samNormalizationMap,HalfVector3));
fDot = pow( saturate( dot(fNormal,fHalfVector) ),16);
if( bSelfShadow ){
fDot *= ComputeSelfShadow(4,5,fHalfVector,fTexCoord);
}
fAttenuation = tex3D(g_samAttenuationMap,AttCoords3);
fFinalColor.xyz += (fAttenuation * (float4)fDot * g_fSpecColor[2] * BackCull2);
}
return fFinalColor;
}
float4 SpecularPointLightWithAlphaTest20( uniform int NumLights,
uniform bool bParallax,
uniform bool bSelfShadow,
float2 NMCoords : TEXCOORD0,
float3 AttCoords : TEXCOORD1,
float3 HalfVector : TEXCOORD2,
float3 Vector2 : TEXCOORD3,
float3 Vector3 : TEXCOORD4,
float3 Vector4 : TEXCOORD5,
float3 Vector5 : TEXCOORD6,
float3 Vector6 : TEXCOORD7,
float4 BackCull : COLOR0,
float4 BackCull2 : COLOR1 ):COLOR
{
float2 fTexCoord;
if(bParallax){
if( NumLights == 1 ){
fTexCoord = ComputeHeightMapOffset(4,NMCoords,Vector2,g_fSpecColor[0].w);
}
if( NumLights == 2 ){
fTexCoord = ComputeHeightMapOffset(4,NMCoords,Vector4,g_fSpecColor[0].w);
}
if( NumLights == 3 ){
fTexCoord = ComputeHeightMapOffset(4,NMCoords,Vector6,g_fSpecColor[0].w);
}
}else{
fTexCoord = NMCoords.xy;
}
// unpack normal and half vector
float3 fNormal = Bx2(tex2D(g_samNormalMap,fTexCoord));
float3 fHalfVector = Bx2(texCUBE(g_samNormalizationMap,HalfVector));
float fDot = pow( saturate( dot(fNormal,fHalfVector) ),16);
if( bSelfShadow ){
fDot *= ComputeSelfShadow(5,6,fHalfVector,fTexCoord);
}
float4 fAttenuation = tex3D(g_samAttenuationMap,AttCoords);
float4 fFinalColor;
fFinalColor = (fAttenuation * (float4)fDot * g_fSpecColor[0] * BackCull);
if( NumLights > 1 ){
fHalfVector = Bx2(texCUBE(g_samNormalizationMap,Vector3));
fDot = pow( saturate( dot(fNormal,fHalfVector) ),16);
if( bSelfShadow ){
fDot *= ComputeSelfShadow(5,6,fHalfVector,fTexCoord);
}
fAttenuation = tex3D(g_samAttenuationMap,Vector2);
fFinalColor.xyz += (fAttenuation * (float4)fDot * g_fSpecColor[1] * BackCull.w);
}
if( NumLights > 2 ){
fHalfVector = Bx2(texCUBE(g_samNormalizationMap,Vector5));
fDot = pow( saturate( dot(fNormal,fHalfVector) ),16);
if( bSelfShadow ){
fDot *= ComputeSelfShadow(5,6,fHalfVector,fTexCoord);
}
fAttenuation = tex3D(g_samAttenuationMap,Vector4);
fFinalColor.xyz += (fAttenuation * (float4)fDot * g_fSpecColor[2] * BackCull2);
}
fFinalColor.w = tex2D(g_samAlphaMap3,fTexCoord).w;
return fFinalColor;
}
float4 SpecularPointLightWithAlphaTest( uniform int NumLights,
float2 NMCoords : TEXCOORD0,
float3 AttCoords : TEXCOORD1,
float3 HalfVector : TEXCOORD2,
float3 Vector2 : TEXCOORD3,
float4 BackCull : COLOR0,
float4 BackCull2 : COLOR1 ):COLOR
{
// unpack normal and half vector
float3 fNormal = Bx2(tex2D(g_samNormalMap,NMCoords));
float3 fHalfVector = Bx2(texCUBE(g_samNormalizationMap,HalfVector));
float fDot = pow( saturate( dot(fNormal,fHalfVector) ),16);
float4 fAttenuation = tex3D(g_samAttenuationMap,AttCoords);
float4 fFinalColor;
fFinalColor = (fAttenuation * (float4)fDot * g_fSpecColor[0] * BackCull);
fFinalColor.w = tex2D(g_samAlphaMap3,Vector2).w;
return fFinalColor;
}
float4 SpecularPointLightWithGloss( uniform int NumLights,
uniform bool bParallax,
uniform bool bSelfShadow,
float2 NMCoords : TEXCOORD0,
float3 AttCoords : TEXCOORD1,
float3 HalfVector : TEXCOORD2,
float3 AttCoords2 : TEXCOORD3,
float3 HalfVector2 : TEXCOORD4,
float3 AttCoords3 : TEXCOORD5,
float3 HalfVector3 : TEXCOORD6,
float3 Eye : TEXCOORD7,
float4 BackCull : COLOR0,
float4 BackCull2 : COLOR1 ):COLOR
{
float2 fTexCoord;
if(bParallax){
if( NumLights == 1 ){
fTexCoord = ComputeHeightMapOffset(3,NMCoords,AttCoords2,g_fSpecColor[0].w);
}
if( NumLights == 2 ){
fTexCoord = ComputeHeightMapOffset(3,NMCoords,AttCoords3,g_fSpecColor[0].w);
}
if( NumLights == 3 ){
fTexCoord = ComputeHeightMapOffset(3,NMCoords,Eye,g_fSpecColor[0].w);
}
}else{
fTexCoord = NMCoords;
}
// unpack normal and half vector
float3 fNormal = Bx2(tex2D(g_samNormalMap,fTexCoord));
float3 fHalfVector = Bx2(texCUBE(g_samNormalizationMap,HalfVector));
// FIXME: we can not value raise to power of 16, under ps1.1 in this case
float fDot = pow( saturate( dot(fNormal,fHalfVector) ),8);
if( bSelfShadow ){
fDot *= ComputeSelfShadow(4,5,fHalfVector,fTexCoord);
}
float4 fAttenuation = tex3D(g_samAttenuationMap,AttCoords);
float4 fFinalColor;
fFinalColor = (fAttenuation * (float4)fDot * g_fSpecColor[0] * BackCull);
if( NumLights > 1 ){
fHalfVector = Bx2(texCUBE(g_samNormalizationMap,HalfVector2));
fDot = pow( saturate( dot(fNormal,fHalfVector) ),16);
if( bSelfShadow ){
fDot *= ComputeSelfShadow(4,5,fHalfVector,fTexCoord);
}
fAttenuation = tex3D(g_samAttenuationMap,AttCoords2);
fFinalColor.xyz += (fAttenuation * (float4)fDot * g_fSpecColor[1] * BackCull.w);
}
if( NumLights > 2 ){
fHalfVector = Bx2(texCUBE(g_samNormalizationMap,HalfVector3));
fDot = pow( saturate( dot(fNormal,fHalfVector) ),16);
if( bSelfShadow ){
fDot *= ComputeSelfShadow(4,5,fHalfVector,fTexCoord);
}
fAttenuation = tex3D(g_samAttenuationMap,AttCoords3);
fFinalColor.xyz += (fAttenuation * (float4)fDot * g_fSpecColor[2] * BackCull2);
}
return ( fFinalColor * tex2D(g_samNormalMap,fTexCoord).w);
}
float4 SpecularPointLightWithAlphaTestAndGloss20( uniform int NumLights,
uniform bool bParallax,
uniform bool bSelfShadow,
float2 NMCoords : TEXCOORD0,
float3 AttCoords : TEXCOORD1,
float3 HalfVector : TEXCOORD2,
float3 Vector2 : TEXCOORD3,
float3 Vector3 : TEXCOORD4,
float3 Vector4 : TEXCOORD5,
float3 Vector5 : TEXCOORD6,
float3 Vector6 : TEXCOORD7,
float4 BackCull : COLOR0,
float4 BackCull2 : COLOR1 ):COLOR
{
float2 fTexCoord;
if(bParallax){
if( NumLights == 1 ){
fTexCoord = ComputeHeightMapOffset(4,NMCoords,Vector2,g_fSpecColor[0].w);
}
if( NumLights == 2 ){
fTexCoord = ComputeHeightMapOffset(4,NMCoords,Vector4,g_fSpecColor[0].w);
}
if( NumLights == 3 ){
fTexCoord = ComputeHeightMapOffset(4,NMCoords,Vector6,g_fSpecColor[0].w);
}
}else{
fTexCoord = NMCoords.xy;
}
// unpack normal and half vector
float3 fNormal = Bx2(tex2D(g_samNormalMap,fTexCoord));
float3 fHalfVector = Bx2(texCUBE(g_samNormalizationMap,HalfVector));
float fDot = pow( saturate( dot(fNormal,fHalfVector) ),16);
if( bSelfShadow ){
fDot *= ComputeSelfShadow(5,6,fHalfVector,fTexCoord);
}
float4 fAttenuation = tex3D(g_samAttenuationMap,AttCoords);
float4 fFinalColor;
fFinalColor = (fAttenuation * (float4)fDot * g_fSpecColor[0] * BackCull);
if( NumLights > 1 ){
fHalfVector = Bx2(texCUBE(g_samNormalizationMap,Vector3));
fDot = pow( saturate( dot(fNormal,fHalfVector) ),16);
if( bSelfShadow ){
fDot *= ComputeSelfShadow(5,6,fHalfVector,fTexCoord);
}
fAttenuation = tex3D(g_samAttenuationMap,Vector2);
fFinalColor.xyz += (fAttenuation * (float4)fDot * g_fSpecColor[1] * BackCull.w);
}
if( NumLights > 2 ){
fHalfVector = Bx2(texCUBE(g_samNormalizationMap,Vector5));
fDot = pow( saturate( dot(fNormal,fHalfVector) ),16);
if( bSelfShadow ){
fDot *= ComputeSelfShadow(5,6,fHalfVector,fTexCoord);
}
fAttenuation = tex3D(g_samAttenuationMap,Vector4);
fFinalColor.xyz += (fAttenuation * (float4)fDot * g_fSpecColor[2] * BackCull2);
}
fFinalColor.xyz *= tex2D(g_samNormalMap,fTexCoord).w;
fFinalColor.w = tex2D(g_samAlphaMap3,fTexCoord).w;
return fFinalColor;
}
float4 SpecularPointLightWithAlphaTestAndGloss( uniform int NumLights,
float2 NMCoords : TEXCOORD0,
float3 AttCoords : TEXCOORD1,
float3 HalfVector : TEXCOORD2,
float3 Vector2 : TEXCOORD3,
float4 BackCull : COLOR0,
float4 BackCull2 : COLOR1 ):COLOR
{
// unpack normal and half vector
float3 fNormal = Bx2(tex2D(g_samNormalMap,NMCoords));
float3 fHalfVector = Bx2(texCUBE(g_samNormalizationMap,HalfVector));
float fDot = pow( saturate( dot(fNormal,fHalfVector) ),16);
float4 fAttenuation = tex3D(g_samAttenuationMap,AttCoords);
float4 fFinalColor;
fFinalColor = (fAttenuation * (float4)fDot * g_fSpecColor[0] * BackCull);
fFinalColor.w = tex2D(g_samAlphaMap3,Vector2).w;
return fFinalColor;
}
float4 SimpleSpecularPointLight( float2 NMCoords : TEXCOORD0, float4 HalfWithAttenuation : COLOR0 ):COLOR
{
// unpack normal and half vector
float3 fNormal = Bx2(tex2D(g_samNormalMap,NMCoords));
float3 fHalfVector = Bx2((float3)HalfWithAttenuation);
float fDot = pow( saturate( dot(fNormal,fHalfVector) ),16);
return (HalfWithAttenuation.w * (float4)fDot * g_fSpecColor[0]);
}
float4 SimpleSpecularPointLight20( uniform int NumLights, uniform bool bParallax,uniform bool bSelfShadow,float4 TexCoord[__MAX_TEXTCOORDS__] : TEXCOORD0 ):COLOR
{
float2 fTexCoord;
if(bParallax){
fTexCoord = ComputeHeightMapOffset(1,TexCoord[0],TexCoord[NumLights+1],g_fSpecColor[0].w);
}else{
fTexCoord = TexCoord[0].xy;
}
// unpack normal and half vector
float3 fNormal = Bx2(tex2D(g_samNormalMap,fTexCoord));
float fDot = pow( saturate( dot(fNormal,TexCoord[1]) ),16);
if( bSelfShadow ){
fDot *= ComputeSelfShadow(2,3,TexCoord[1],fTexCoord);
}
float4 fFinalColor;
fFinalColor = (TexCoord[1].w * (float4)fDot * g_fSpecColor[0]);
for( int i=1; i<NumLights; i++ ){
float fDot = pow( saturate( dot(fNormal,TexCoord[i+1]) ),16);
if( bSelfShadow ){
fDot *= ComputeSelfShadow(2,3,TexCoord[i+1],fTexCoord);
}
fFinalColor += (TexCoord[i+1].w * (float4)fDot * g_fSpecColor[i]);
}
return fFinalColor;
}
float4 SimpleSpecularPointLightWithAlphaTest20( uniform int NumLights, uniform bool bParallax, uniform bool bSelfShadow,float4 TexCoord[__MAX_TEXTCOORDS__] : TEXCOORD0 ):COLOR
{
float2 fTexCoord;
if(bParallax){
fTexCoord = ComputeHeightMapOffset(2,TexCoord[0],TexCoord[NumLights+1],g_fSpecColor[0].w);
}else{
fTexCoord = TexCoord[0].xy;
}
// unpack normal and half vector
float3 fNormal = Bx2(tex2D(g_samNormalMap,fTexCoord));
float fDot = pow( saturate( dot(fNormal,TexCoord[1]) ),16);
if( bSelfShadow ){
fDot *= ComputeSelfShadow(3,4,TexCoord[1],fTexCoord);
}
float4 fFinalColor;
fFinalColor = (TexCoord[1].w * (float4)fDot * g_fSpecColor[0]);
for( int i=1; i<NumLights; i++ ){
float fDot = pow( saturate( dot(fNormal,TexCoord[i+1]) ),16);
if( bSelfShadow ){
fDot *= ComputeSelfShadow(3,4,TexCoord[i+1],fTexCoord);
}
fFinalColor += (TexCoord[i+1].w * (float4)fDot * g_fSpecColor[i]);
}
fFinalColor.w = tex2D(g_samAlphaMap1,fTexCoord).w;
return fFinalColor;
}
float4 SimpleSpecularPointLightWithGloss20( uniform int NumLights,uniform bool bParallax, uniform bool bSelfShadow, float4 TexCoord[__MAX_TEXTCOORDS__] : TEXCOORD0 ):COLOR
{
float2 fTexCoord;
if(bParallax){
fTexCoord = ComputeHeightMapOffset(1,TexCoord[0],TexCoord[NumLights+1],g_fSpecColor[0].w);
}else{
fTexCoord = TexCoord[0].xy;
}
// unpack normal and half vector
float3 fNormal = Bx2(tex2D(g_samNormalMap,fTexCoord));
float fDot = pow( saturate( dot(fNormal,TexCoord[1]) ),16);
if( bSelfShadow ){
fDot *= ComputeSelfShadow(2,3,TexCoord[1],fTexCoord);
}
float4 fFinalColor;
fFinalColor = (TexCoord[1].w * (float4)fDot * g_fSpecColor[0]);
for( int i=1; i<NumLights; i++ ){
float fDot = pow( saturate( dot(fNormal,TexCoord[i+1]) ),16);
if( bSelfShadow ){
fDot *= ComputeSelfShadow(2,3,TexCoord[i+1],fTexCoord);
}
fFinalColor += (TexCoord[i+1].w * (float4)fDot * g_fSpecColor[i]);
}
fFinalColor *= tex2D(g_samNormalMap,fTexCoord).w;
return fFinalColor;
}
float4 SimpleSpecularPointLightWithAlphaTestAndGloss20( uniform int NumLights,uniform bool bParallax, uniform bool bSelfShadow, float4 TexCoord[__MAX_TEXTCOORDS__] : TEXCOORD0 ):COLOR
{
float2 fTexCoord;
if(bParallax){
fTexCoord = ComputeHeightMapOffset(2,TexCoord[0],TexCoord[NumLights+1],g_fSpecColor[0].w);
}else{
fTexCoord = TexCoord[0].xy;
}
// unpack normal and half vector
float3 fNormal = Bx2(tex2D(g_samNormalMap,fTexCoord));
float fDot = pow( saturate( dot(fNormal,TexCoord[1]) ),16);
if( bSelfShadow ){
fDot *= ComputeSelfShadow(3,4,TexCoord[1],fTexCoord);
}
float4 fFinalColor;
fFinalColor.xyz = (TexCoord[1].w * (float4)fDot * g_fSpecColor[0]);
for( int i=1; i<NumLights; i++ ){
float fDot = pow( saturate( dot(fNormal,TexCoord[i+1]) ),16);
if( bSelfShadow ){
fDot *= ComputeSelfShadow(3,4,TexCoord[i+1],fTexCoord);
}
fFinalColor.xyz += (TexCoord[i+1].w * (float4)fDot * g_fSpecColor[i]);
}
fFinalColor.w = tex2D(g_samAlphaMap1,fTexCoord).w;
fFinalColor.xyz *= tex2D(g_samNormalMap,fTexCoord).w;
return fFinalColor;
}
float4 SimpleSpecularPointLightWithAlphaTest( float2 NMCoords : TEXCOORD0, float3 AlphaCoords : TEXCOORD1, float4 HalfWithAttenuation : COLOR0 ):COLOR
{
// unpack normal and half vector
float3 fNormal = Bx2(tex2D(g_samNormalMap,NMCoords));
float3 fHalfVector = Bx2((float3)HalfWithAttenuation);
float fDot = pow( saturate( dot(fNormal,fHalfVector) ),16);
float4 fFinalColor;
fFinalColor.xyz = (HalfWithAttenuation.w * fDot * g_fSpecColor[0]);
fFinalColor.w = tex2D(g_samAlphaMap1,AlphaCoords).w;
return fFinalColor;
}
float4 SimpleSpecularPointLightWithGloss( float2 NMCoords : TEXCOORD0, float4 HalfWithAttenuation : COLOR0 ):COLOR
{
// unpack normal and half vector
float3 fNormal = Bx2(tex2D(g_samNormalMap,NMCoords));
float3 fHalfVector = Bx2((float3)HalfWithAttenuation);
float fDot = pow( saturate( dot(fNormal,fHalfVector) ),16);
return (HalfWithAttenuation.w * (float4)fDot * g_fSpecColor[0] * tex2D(g_samNormalMap,NMCoords).w );
}
float4 SimpleSpecularPointLightWithAlphaTestAndGloss( float2 NMCoords : TEXCOORD0, float3 AlphaCoords : TEXCOORD1, float4 HalfWithAttenuation : COLOR0 ):COLOR
{
// unpack normal and half vector
float3 fNormal = Bx2(tex2D(g_samNormalMap,NMCoords));
float3 fHalfVector = Bx2((float3)HalfWithAttenuation);
float fDot = pow( saturate( dot(fNormal,fHalfVector) ),16);
float4 fFinalColor;
fFinalColor.xyz = (HalfWithAttenuation.w * fDot * g_fSpecColor[0] * tex2D(g_samNormalMap,NMCoords).w);
fFinalColor.w = tex2D(g_samAlphaMap1,AlphaCoords).w;
return fFinalColor;
}
float4 DiffusePointLight( uniform int NumLights,
uniform bool bParallax,
uniform bool bSelfShadow,
float2 NMCoords : TEXCOORD0,
float3 AttCoords : TEXCOORD1,
float3 LightVector : TEXCOORD2,
float3 AttCoords2 : TEXCOORD3,
float3 LightVector2 : TEXCOORD4,
float3 AttCoords3 : TEXCOORD5,
float3 LightVector3 : TEXCOORD6,
float3 Eye : TEXCOORD7 ):COLOR
{
float2 fTexCoord;
if( bParallax ){
if( NumLights == 1 ){
fTexCoord = ComputeHeightMapOffset(3,NMCoords,AttCoords2,g_fDiffuseColor[0].w);
}
if( NumLights == 2 ){
fTexCoord = ComputeHeightMapOffset(3,NMCoords,AttCoords3,g_fDiffuseColor[0].w);
}
if( NumLights == 3 ){
fTexCoord = ComputeHeightMapOffset(3,NMCoords,Eye,g_fDiffuseColor[0].w);
}
}else{
fTexCoord = NMCoords.xy;
}
// unpack normal and half vector
float3 fNormal = Bx2(tex2D(g_samNormalMap,fTexCoord));
float3 fLightVector = Bx2(texCUBE(g_samNormalizationMap,LightVector));
float fDot = saturate( dot(fNormal,fLightVector) );
if( bSelfShadow ){
fDot *= ComputeSelfShadow(4,5,fLightVector,fTexCoord);
}
float4 Color1 = ( tex3D(g_samAttenuationMap,AttCoords) * (float4)fDot * g_fDiffuseColor[0]);
if( NumLights > 1){
fLightVector = Bx2(texCUBE(g_samNormalizationMap,LightVector2));
fDot = saturate( dot(fNormal,fLightVector) );
if( bSelfShadow ){
fDot *= ComputeSelfShadow(4,5,fLightVector,fTexCoord);
}
Color1 += ( tex3D(g_samAttenuationMap,AttCoords2) * (float4)fDot * g_fDiffuseColor[1]);
}
if( NumLights > 2){
fLightVector = Bx2(texCUBE(g_samNormalizationMap,LightVector3));
fDot = saturate( dot(fNormal,fLightVector) );
if( bSelfShadow ){
fDot *= ComputeSelfShadow(4,5,fLightVector,fTexCoord);
}
Color1 += ( tex3D(g_samAttenuationMap,AttCoords3) * (float4)fDot * g_fDiffuseColor[2]);
}
return Color1;
}
float4 DiffusePointLightWithAlphaTest20( uniform int NumLights,
uniform bool bParallax,
uniform bool bSelfShadow,
float4 NMCoords : TEXCOORD0,
float3 AttCoords : TEXCOORD1,
float3 LightVector : TEXCOORD2,
float3 Vector3 : TEXCOORD3,
float3 Vector4 : TEXCOORD4,
float3 Vector5 : TEXCOORD5,
float3 Vector6 : TEXCOORD6,
float3 Vector7 : TEXCOORD7 ):COLOR
{
float2 fTexCoord;
if(bParallax){
if( NumLights == 1 ){
fTexCoord = ComputeHeightMapOffset(4,NMCoords,Vector3,g_fDiffuseColor[0].w);
}
if( NumLights == 2 ){
fTexCoord = ComputeHeightMapOffset(4,NMCoords,Vector5,g_fDiffuseColor[0].w);
}
if( NumLights == 3 ){
fTexCoord = ComputeHeightMapOffset(4,NMCoords,Vector7,g_fDiffuseColor[0].w);
}
}else{
fTexCoord = NMCoords.xy;
}
// unpack normal and half vector
float3 fNormal = Bx2(tex2D(g_samNormalMap,fTexCoord));
float3 fLightVector = Bx2(texCUBE(g_samNormalizationMap,LightVector));
float fDot = saturate( dot(fNormal,fLightVector) );
if( bSelfShadow ){
fDot *= ComputeSelfShadow(5,6,fLightVector,fTexCoord);
}
float4 Color1;
Color1.xyz = ( tex3D(g_samAttenuationMap,AttCoords) * (float4)fDot * g_fDiffuseColor[0]);
if( NumLights > 1){
fLightVector = Bx2(texCUBE(g_samNormalizationMap,Vector4));
fDot = saturate( dot(fNormal,fLightVector) );
if( bSelfShadow ){
fDot *= ComputeSelfShadow(5,6,fLightVector,fTexCoord);
}
Color1.xyz += ( tex3D(g_samAttenuationMap,Vector3) * (float4)fDot * g_fDiffuseColor[1]);
}
if( NumLights > 2){
fLightVector = Bx2(texCUBE(g_samNormalizationMap,Vector6));
fDot = saturate( dot(fNormal,fLightVector) );
if( bSelfShadow ){
fDot *= ComputeSelfShadow(5,6,fLightVector,fTexCoord);
}
Color1.xyz += ( tex3D(g_samAttenuationMap,Vector5) * (float4)fDot * g_fDiffuseColor[2]);
}
Color1.w = tex2D(g_samAlphaMap3,fTexCoord).w;
return Color1;
}
float4 DiffusePointLightWithAlphaTest( uniform int NumLights,
float4 NMCoords : TEXCOORD0,
float3 AttCoords : TEXCOORD1,
float3 LightVector : TEXCOORD2,
float3 Vector3 : TEXCOORD3 ):COLOR
{
float2 fTexCoord = NMCoords.xy;
// unpack normal and half vector
float3 fNormal = Bx2(tex2D(g_samNormalMap,fTexCoord));
float3 fLightVector = Bx2(texCUBE(g_samNormalizationMap,LightVector));
float fDot = saturate( dot(fNormal,fLightVector) );
float4 Color1;
Color1.xyz = ( tex3D(g_samAttenuationMap,AttCoords) * (float4)fDot * g_fDiffuseColor[0]);
Color1.w = tex2D(g_samAlphaMap3,Vector3).w;
return Color1;
}
float4 SimpleDiffusePointLight( float2 NMCoords : TEXCOORD0, float4 LightWithAttenuation : COLOR0 ):COLOR
{
// unpack normal and half vector
float3 fNormal = Bx2(tex2D(g_samNormalMap,NMCoords));
float3 fLightVector = Bx2((float3)LightWithAttenuation);
float fDot = saturate( dot(fNormal,fLightVector) );
return ((float4)fDot * g_fDiffuseColor[0] * LightWithAttenuation.w);
}
float4 SimpleDiffusePointLight20( uniform int NumLights, uniform bool bParallax, uniform bool bSelfShadow, float4 TexCoord[__MAX_TEXTCOORDS__] : TEXCOORD0 ):COLOR
{
float2 fTexCoord;
if(bParallax){
fTexCoord = ComputeHeightMapOffset(1,TexCoord[0],TexCoord[NumLights+1],g_fDiffuseColor[0].w);
}else{
fTexCoord = TexCoord[0].xy;
}
// unpack normal and half vector
float3 fNormal = Bx2(tex2D(g_samNormalMap,fTexCoord));
float4 FinalColor;
float fDot = saturate( dot(fNormal,TexCoord[1]) );
if( bSelfShadow ){
fDot *= ComputeSelfShadow(2,3,TexCoord[1],fTexCoord);
}
FinalColor = ((float4)fDot * g_fDiffuseColor[0] * TexCoord[1].w);
for( int i=1; i<NumLights; i++ ){
fDot = saturate( dot(fNormal,TexCoord[i+1]) );
if( bSelfShadow ){
fDot *= ComputeSelfShadow(2,3,TexCoord[i+1],fTexCoord);
}
FinalColor += ((float4)fDot * g_fDiffuseColor[i] * TexCoord[i+1].w);
}
return FinalColor;
}
float4 SimpleDiffusePointLightWithAlphaTest( float2 NMCoords : TEXCOORD0, float2 AlphaCoords : TEXCOORD1,float4 LightWithAttenuation : COLOR0 ):COLOR
{
// unpack normal and half vector
float3 fNormal = Bx2( tex2D(g_samNormalMap,NMCoords));
float3 fLightVector = Bx2( (float3)LightWithAttenuation);
float fDot = saturate( dot(fNormal,fLightVector) );
float4 fFinalColor;
fFinalColor.xyz = ((float4)fDot * g_fDiffuseColor[0] * LightWithAttenuation.w);
fFinalColor.w = tex2D(g_samAlphaMap1,AlphaCoords).w;
return fFinalColor;
}
float4 SimpleDiffusePointLightWithAlphaTest20( uniform int NumLights, uniform bool bParallax,uniform bool bSelfShadow, float4 TexCoord[__MAX_TEXTCOORDS__] : TEXCOORD0 ):COLOR
{
float2 fTexCoord;
if( bParallax ){
fTexCoord = ComputeHeightMapOffset(2,TexCoord[0],TexCoord[NumLights+1],g_fDiffuseColor[0].w);
}
else{
fTexCoord = TexCoord[0].xy;
}
float3 fNormal = Bx2( tex2D(g_samNormalMap,fTexCoord) );
float4 FinalColor;
float fDot = saturate( dot(fNormal,TexCoord[1]) );
if( bSelfShadow ){
fDot *= ComputeSelfShadow(3,4,TexCoord[1],fTexCoord);
}
FinalColor = ((float4)fDot * g_fDiffuseColor[0] * TexCoord[1].w);
for( int i=1; i<NumLights; i++ ){
fDot = saturate( dot(fNormal,TexCoord[i+1]) );
if( bSelfShadow ){
fDot *= ComputeSelfShadow(3,4,TexCoord[i+1],fTexCoord);
}
FinalColor += ((float4)fDot * g_fDiffuseColor[i] * TexCoord[i+1].w);
}
FinalColor.w = tex2D(g_samAlphaMap1,fTexCoord).w;
return FinalColor;
}
float4 BlinnBumpMapping( float2 TexCoord : TEXCOORD0, float3 EnvXform[3] : TEXCOORD1 ) : COLOR
{
float3 N = tex2D(g_samNormalMap, TexCoord);
float3 Nworld;
Nworld.x = dot(N*2-1, EnvXform[0]);
Nworld.y = dot(N*2-1, EnvXform[1]);
Nworld.z = dot(N*2-1, EnvXform[2]);
float4 diffuse = texCUBE(g_samCubeMap, Nworld);
return (diffuse * g_fBlinnProperties);
}
#endif //__PIXELSHADERS_FX__