If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!

The Legend of Spyro: Dawn of the Dragon (PlayStation 3, Xbox 360, PlayStation 2, Wii)/Shader Source Code

From The Cutting Room Floor
Jump to navigation Jump to search

This is a sub-page of The Legend of Spyro: Dawn of the Dragon (PlayStation 3, Xbox 360, PlayStation 2, Wii).

Upon decrypting the EBOOT.BIN on the PlayStation 3 version, there exists some uncompiled shader code starting from offset 0xC19848. It is currently unknown which files, if any, the code is referencing.

Hmmm...
To do:
  • This is the raw code ripped directly from the decrypted EBOOT.ELF via a hex editor. See if the formatting can be fixed to something more readable/proper. Please.
  • Is this also present on the Xbox 360 release?

Raw Shader Code

#ifndef externBasicShader.#ifndef _shaderdefine_file_.#define _shaderdefine_file_.#ifdef CGFX_FOR_MAYA.#pragma once.#endif./*.*.internal global.*/.#ifndef externTransform..#error "externTransform undefined".#endif.#ifndef externWeightNb..#error "externWeightNb undefined".#endif.#ifndef externDirLight.#error "externDirLight undefined".#endif.#ifndef externTexCoordNb..#error "externTexCoordNb undefined".#endif.#ifndef externVertexColor..#error "externVertexColor undefined".#endif./*.#ifndef externModulateMaterial..#error "externModulateMaterial undefined".#endif.*/.#ifndef externFogType..#error "externFogType undefined".#endif.#if externDirLight>4..#error "Too much directional light!! 4 is the maximum".#endif.#if externFirstPass==0.#define internNoVertexColorButAlpha.#endif.#define internSpecialLightNb externSpecialLight.#define internTransform.#if defined (externX360) || defined (externPS3).#define internMatrixIndices.#endif.#define internSwapNormalColor.#if externWeightNb>0.#define internUseNormal.#if externWeightNb==1.#define internWeightNb 1.#elif externWeightNb==2.#define internWeightNb  2.#elif externWeightNb==3.#define internWeightNb 3.#elif externWeightNb==4.#define internWeightNb 4.#endif.#endif.#if externDirLight>0.#define internLightning.#define internUseNormal.#if externDirLight==1.#define internDirLightNb 1.#elif externDirLight==2.#define internDirLightNb 2.#elif externDirLight==3.#define internDirLightNb 3.#elif externDirLight==4.#define internDirLightNb 4.#else.#define internDirLightNb 0.#endif.#else.#define internDirLightNb 0.#endif .#if externPointLight>0.#define internLightning.#define internUseNormal.#if (externPointLight==1).#define internPointLightNb 1.#elif (externPointLight==2).#define internPointLightNb 2.#elif (externPointLight==3).#define internPointLightNb 3.#elif (externPointLight==4).#define internPointLightNb 4.#else.#define internPointLightNb 0.#endif.#else.#define internPointLightNb 0.#endif.#ifdef internLightning.#define internLightNb.(internPointLightNb+internDirLightNb).#else.#define internLightNb.0.#endif.#if externFogType > 0.#if externFogType==1.#define internFogType 1.#elif externFogType==2.#define internFogType 2.#elif externFogType==3.#define internFogType 3.#endif.#endif.#if externTexCoordNb>0.#define internUseBaseTex.#define useTexCoord0.#endif.#if externTexCoordNb>1.#error "cas à gérer".#endif.#ifdef externControlMap.#define internControlMap.#endif.#undef externControlMap.#ifdef externMATERIALFX_ENV.#ifdef internUseBaseTex.#define internUseNormal.#define internEnvmap.#define internViewPos.#endif.#endif.#undef externMATERIALFX_ENV.#ifdef externMATERIALFX_UVTRANSFORM.#ifdef internUseBaseTex.#define internUVTransformbasetex.#endif.#endif.#undef externMATERIALFX_UVTRANSFORM.#ifdef externMATERIALFX_DUALUVTRANSFORM.#ifdef internUseBaseTex.#define internUVTransformbasetex.#define internOutpuSecondTexCoor.#define internUVTransformSecondTex.#define internUseSecondTex.#if defined (externDualAlphaBlend).#define .internSecondTexAdditif.#endif.#endif.#endif.#undef externMATERIALFX_DUALUVTRANSFORM.#ifdef externMATERIALFX_NORMAL.#ifdef internUseBaseTex.#define internNormalMap.#define internUseNormal.#define internUseTangent.#define internUseTangentMatrix.#define internPixelLight.#if internDirLightNb>0.#define internOutputLight.#endif.#if internSpecialLightNb>0.#define internOutputSpecialLight.#endif.#if internPointLightNb>0.#define internOutputPointLight.#endif.#define internControlMap.#define internViewPos.#define internOutputViewTS.#define internOutputEnvmap.#define internFirstEnvmap.#define internViewPos.#define internOutputViewTS.#define internDualEnvmap.#define internOutputEnvmap.#endif.#if defined( externUseEnvMap) && defined(externUseNormalMap).#endif.#endif.#undef externMATERIALFX_NORMAL.#if defined(internNormalMap).#endif.#ifdef externMATERIALFXNORMANIM.#ifdef internUseBaseTex.#define internWaterAnimation.#define internNormalMap.#define internUseNormal.#define internUseTangent.#define internUseTangentMatrix.#define internPixelLight.#if internDirLightNb>0.#define internOutputLight.#endif.#if internSpecialLightNb>0.#define internOutputSpecialLight.#endif.#if internPointLightNb>0.#define internOutputPointLight.#endif.#define internControlMap.#define internViewPos.#define internOutputViewTS.#define internOutputEnvmap.#define internFirstEnvmap.#endif.#endif.#ifdef externMATERIALFX_POM.#ifdef internUseBaseTex.#define internParallaxOffset.#define internNormalMap.#define internUseTangent.#define internUseTangentMatrix.#define internUseNormal.#define internOutputViewLS.#define internViewPos.#define internOutputNormal.#define internPixelLight.#if internDirLightNb>0.#define internOutputLight.#endif.#if internPointLightNb>0.#define internOutputPointLight.#endif.#if internSpecialLightNb>0.#define internOutputSpecialLight.#endif.#endif.#endif.#undef externMATERIALFX_POM.#ifdef externLocalEnvMap.#define internLocalEnvMap.#endif.#ifdef externRenderFarTex.#ifdef internUseBaseTex.#define internRenderFarTex.#endif.#endif.#ifdef externShadowEnable.#ifdef internUseBaseTex.#define internShadowEnable.#endif.#endif.#ifdef externPixelLightning.#ifdef internUseNormal.#define internPixelLight.#endif.#endif.#if defined(internNormalMap).#ifdef internOutputTangentMatrix.#define internOutputNormal.#define internOutputViewLS.#endif.#endif.#ifdef externSpecular.#if defined(internNormalMap) || (defined(internPixelLight) && internLightNb>0.).#define internSpecular.#define internViewPos.#define internUseNormal.#define internUseTangent.#if defined(internNormalMap) /*&& !defined(internOutputEnvmap)*/.#define internOutputViewTS.#else.#define internOutputNormal.#define internOutputViewLS.#endif.#endif.#endif .#ifdef externRenderDepthOfField.#define internRenderDoF.#endif.#undef externRenderDepthOfField.#ifdef externPostRenderDepthOfField.#define internPostRenderDoF.#endif.#undef externPostRenderDepthOfField.#ifdef externGaussianBlur5x5.#define internGaussianBlur5x5.#endif.#undef externGaussianBlur5x5.#ifdef externDOFCopyAlpha.#define internCopyToAlpha.#endif.#undef externDOFCopyAlpha.#ifdef externDownSample4x4.#define internDownScale4x4.#endif.#undef externDownSample4x4.#ifdef externDownSample16x16.#define internDownScale16x16.#endif.#undef externDownSample16x16.#ifdef externBloom.#define internBloom.#endif.#undef externBloom.#ifdef externDontModulateAlphaTexture.#define internDontModulateAlphaTexture.#endif.#undef externDontModulateAlphaTexture./* we use envmap to substract alpha*/.#ifdef externEnvSubstractAlpha.#define internEnvAlphaSubstract.#endif.#undef externEnvSubstractAlpha.#ifdef externUseNormalInfluence.#define internUseNormalInfluence.#endif.#undef externUseNormalInfluence./***************************/./*   Semantic for TEXCOORD */./***************************/.#define TEXCOORDBaseTex .TEXCOORD0.#define useTexCoord0.#ifdef internOutpuSecondTexCoor.#define TEXCOORDSecondTexCoor.TEXCOORD1.#define useTexCoord1.#elif defined( internOutputEnvmap ).#define TEXCOORDEnv.TEXCOORD1.#define useTexCoord1.#elif defined( internEnvmap).#define TEXCOORDEnv.TEXCOORD1.#define useTexCoord1.#endif.#ifdef internOutputNormal.#if defined( useTexCoord1).#define TEXCOORDNormalLS.TEXCOORD2.#define useTexCoord2.#else.#define TEXCOORDNormalLS.TEXCOORD1.#define useTexCoord1.#endif.#endif .#ifdef internOutputViewLS.#if defined(useTexCoord2).#define TEXCOORDviewLS.TEXCOORD3.#define useTexCoord3.#elif defined(useTexCoord1).#define TEXCOORDviewLS.TEXCOORD2.#define useTexCoord2.#else.#define TEXCOORDviewTS.TEXCOORD1.#define useTexCoord1.#endif.#endif .#ifdef internParallaxOffset.#if defined(useTexCoord3).#define TEXCOORDParallaxTS.TEXCOORD4.#define useTexCoord4.#elif defined(useTexCoord2).#define TEXCOORDParallaxTS.TEXCOORD3.#define useTexCoord3.#elif defined(useTexCoord1).#define TEXCOORDParallaxTS.TEXCOORD2.#define useTexCoord2.#else.#define TEXCOORDParallaxTS.TEXCOORD1.#define useTexCoord1.#endif.#endif .#if  defined(internRenderFarTex) || defined(internRenderDoF).#if defined(useTexCoord4).#define TEXCOORDBkg TEXCOORD5.#define useTexCoord5.#elif defined(useTexCoord3).#define TEXCOORDBkg TEXCOORD4.#define useTexCoord4.#elif defined(useTexCoord2).#define TEXCOORDBkg TEXCOORD3.#define useTexCoord3.#elif defined(useTexCoord1).#define TEXCOORDBkg TEXCOORD2.#define useTexCoord2.#else.#define TEXCOORDBkg TEXCOORD1.#define useTexCoord1.#endif.#endif .#ifdef internOutputTangentMatrix.#ifdef useTexCoord5.#define TEXCOORDTangentLS TEXCOORD6.#define TEXCOORDBinormalLS TEXCOORD7.#define useTexCoord6.#define useTexCoord7.#elif defined( useTexCoord4).#define TEXCOORDTangentLS TEXCOORD5.#define TEXCOORDBinormalLS TEXCOORD6.#define useTexCoord5.#define useTexCoord6.#elif defined( useTexCoord3).#define TEXCOORDTangentLS TEXCOORD4.#define TEXCOORDBinormalLS TEXCOORD5.#define useTexCoord4.#define useTexCoord5.#elif defined( useTexCoord2).#define TEXCOORDTangentLS TEXCOORD3.#define TEXCOORDBinormalLS TEXCOORD4.#define useTexCoord3.#define useTexCoord4.#elif defined( useTexCoord1).#define TEXCOORDTangentLS TEXCOORD2.#define TEXCOORDBinormalLS TEXCOORD3.#define useTexCoord2.#define useTexCoord3.#endif.#else .#ifdef internOutputViewTS.#ifdef useTexCoord5.#define TEXCOORDviewTS.TEXCOORD6.#define useTexCoord6.#elif defined(useTexCoord4).#define TEXCOORDviewTS.TEXCOORD5.#define useTexCoord5.#elif defined(useTexCoord3).#define TEXCOORDviewTS.TEXCOORD4.#define useTexCoord4.#elif defined(useTexCoord2).#define TEXCOORDviewTS.TEXCOORD3.#define useTexCoord3.#else.#define TEXCOORDviewTS.TEXCOORD2.#define useTexCoord2.#endif.#endif .#if defined( internOutputLight) || defined( internOutputPointLight).#if internLightNb>0.#ifdef useTexCoord6.#define TEXCOORDLight1 TEXCOORD7.#define useTexCoord7.#elif defined( useTexCoord5).#define TEXCOORDLight1 TEXCOORD6.#define useTexCoord6.#elif defined(useTexCoord4).#define TEXCOORDLight1 TEXCOORD5.#define useTexCoord5.#elif defined(useTexCoord3).#define TEXCOORDLight1 TEXCOORD4.#define useTexCoord4.#elif defined(useTexCoord2).#define TEXCOORDLight1 TEXCOORD3.#define useTexCoord3.#elif defined(useTexCoord1).#define TEXCOORDLight1 TEXCOORD2.#define useTexCoord2.#else.#define TEXCOORDLight1 TEXCOORD1.#define useTexCoord1.#endif .#endif.#if internLightNb>1.#ifdef useTexCoord7.#ifdef internOutputViewTS.#error "il y a des lampe en trop car on output la vue TS".#endif.#error "il y a des lampe en trop".#elif defined( useTexCoord6).#define useTexCoord7.#elif defined( useTexCoord5).#define useTexCoord6.#elif defined(useTexCoord4).#define useTexCoord5.#elif defined(useTexCoord3).#define useTexCoord4.#elif defined(useTexCoord2).#define useTexCoord3.#elif defined(useTexCoord1).#define useTexCoord2.#else.#define useTexCoord1.#endif .#endif.#if internLightNb>2.#ifdef useTexCoord7.#error "il y a des lampe en trop".#elif defined( useTexCoord6).#define useTexCoord7.#elif defined( useTexCoord5).#define useTexCoord6.#elif defined(useTexCoord4).#define useTexCoord5.#elif defined(useTexCoord3).#define useTexCoord4.#elif defined(useTexCoord2).#define useTexCoord3.#elif defined(useTexCoord1).#define useTexCoord2.#else.#define useTexCoord1.#endif .#endif.#if internLightNb>3.#ifdef useTexCoord7.#error "il y a des lampe en trop".#elif defined( useTexCoord6).#define useTexCoord7.#elif defined( useTexCoord5).#define useTexCoord6.#elif defined(useTexCoord4).#define useTexCoord5.#elif defined(useTexCoord3).#define useTexCoord4.#elif defined(useTexCoord2).#define useTexCoord3.#elif defined(useTexCoord1).#define useTexCoord2.#else.#define useTexCoord1.#endif .#endif.#if internLightNb>4.#ifdef useTexCoord7.#error "il y a des lampe en trop".#elif defined( useTexCoord6).#define useTexCoord7.#elif defined( useTexCoord5).#define useTexCoord6.#elif defined(useTexCoord4).#define useTexCoord5.#elif defined(useTexCoord3).#define useTexCoord4.#elif defined(useTexCoord2).#define useTexCoord3.#elif defined(useTexCoord1).#define useTexCoord2.#else.#define useTexCoord1.#endif .#endif.#endif .#if defined( internOutputSpecialLight).#if externSpecialLight>0.#ifdef useTexCoord7.#error "il y a des lampe en trop".#elif defined( useTexCoord6).#define TEXCOORDSpeLight1 TEXCOORD7.#define useTexCoord7.#elif defined(useTexCoord5).#define TEXCOORDSpeLight1 TEXCOORD6.#define useTexCoord6.#elif defined(useTexCoord4).#define TEXCOORDSpeLight1 TEXCOORD5.#define useTexCoord5.#elif defined(useTexCoord3).#define TEXCOORDSpeLight1 TEXCOORD4.#define useTexCoord4.#elif defined(useTexCoord2).#define TEXCOORDSpeLight1 TEXCOORD3.#define useTexCoord3.#elif defined(useTexCoord1).#define TEXCOORDSpeLight1 TEXCOORD2.#define useTexCoord2.#else.#define TEXCOORDSpeLight1 TEXCOORD1.#define useTexCoord1.#endif.#endif./*.#if externSpecialLight>1.#ifdef useTexCoord7.#ifdef internOutputViewTS.#error "il y a des lampe en trop car on output la vue TS".#endif.#error "il y a des lampe en trop".#elif defined( useTexCoord6).#define useTexCoord7.#elif defined( useTexCoord5).#define useTexCoord6.#elif defined(useTexCoord4).#define useTexCoord5.#elif defined(useTexCoord3).#define useTexCoord4.#elif defined(useTexCoord2).#define useTexCoord3.#elif defined(useTexCoord1).#define useTexCoord2.#else.#define useTexCoord1.#endif.#endif.*/.#endif .#ifdef internUseShadFarTexCoords.#ifdef useTexCoord7.#error "Pas de texcoord pour le shadowing & fondu bkg".#elif defined(useTexCoord6).#define TEXCOORDShadAndFar TEXCOORD7.#define useTexCoord7.#elif defined(useTexCoord5).#define TEXCOORDShadAndFar TEXCOORD6.#define useTexCoord6.#elif defined(useTexCoord4).#define TEXCOORDShadAndFar TEXCOORD5.#define useTexCoord5.#elif defined(useTexCoord3).#define TEXCOORDShadAndFar TEXCOORD4.#define useTexCoord4.#elif defined(useTexCoord2).#define TEXCOORDShadAndFar TEXCOORD3.#define useTexCoord3.#elif defined(useTexCoord1).#define TEXCOORDShadAndFar TEXCOORD2.#define useTexCoord2.#else.#define TEXCOORDShadAndFar TEXCOORD1.#define useTexCoord1.#endif.#endif.#endif .#if externVertexColor> 0.#define internVertexColor.#endif.#if defined(internVertexColor) || !defined(internPixelLight).#define internColor0.#endif./* To change calculation of influence of prelit.light equation change from prelit+diffus+ambient to prelit*(diffus+ambient)*/.#ifdef  externVertexColorMultiplied.#define internMultiplyPrelit.#endif.#if externWeightNb>0.#define internSkinning.#if externWeightNb>1.#define internBlendWeight.#endif.#endif.#ifdef internUseTangentMatrix.#if defined(internOutputViewTS) ||  defined(internParallaxOffset).#define internUseViewTS.#endif.#endif .#if defined( internNormalMap ) && defined(internUseViewTS).#endif.#ifdef externModulateVertexColorFirst.#define internModulateVertexColorFirst.#endif.#ifdef externPS3.#define POINTLIGHTPOS TEXCOORD8.#else.#define POINTLIGHTPOS POSITION1.#endif.#ifdef externPS3.#define internPS3.#endif.#undef externVertexColorMultiplied.#undef externTransform.#undef externWeightNb.#undef externDirLight.#undef externTexCoordNb.#undef externVertexColor.#undef externFogType.#undef externDirLight.#undef externPixelLightning.#undef externModulateVertexColorFirst.#undef externRenderFarTex.#endif .#define _Compact_test./*.*.Uniform Variables déclaration.*/./*.*.Uniform Variables déclaration.*/.#define DeclareUniform(x_enum, x_type, x_name, x_register,  x_constantCount).\.uniform..x_type.x_name : register(c##x_register);.#define DeclareUniformArray(x_enum, x_type,.x_varname,x_arraysize, x_register,.x_numregister) \.DeclareUniform(x_enum, x_type,.x_varname[x_arraysize], x_register,.x_numregister)./* declaration des constantes flottantes pour le pixel shader*/./*..enum name,..type,..prefixe,.nom,.numero registre,.nombre de registre occupé*/.DeclareUniformArray(PSC_DIR_LIGHT_DIR, float4,...u_f4PixelDirLight, 4,..0,....4).DeclareUniformArray(PSC_DIR_LIGHT_COLOR, float4,...u_f4PixelDirLightColor, 4,..4,...4).DeclareUniform(PSC_AMBIENT_COLOR, float4,..u_f4PixelAmbientColor,.8,....1).DeclareUniformArray(PSC_POINT_LIGHT_POS, float4,...u_f4PixelPointLight, 4,..9,....4).DeclareUniformArray(PSC_POINT_LIGHT_COLOR, float4,...u_f4PixelPointLightColor, 4,..13,...4).DeclareUniform(PSC_NORMAL_PARAM, float4,.u_f4NormalParam,.....17,...1).DeclareUniform(PSC_POM_TEX_SHADOW, float3,.u_f3PomTextureShadow,.....18,...1).DeclareUniform(PSC_SPECULAR, float4,..u_f4Specular,...19,....1).DeclareUniform(PSC_SPECULAR_COLOR, float4,..u_f4SpecularColor,...20,....1).DeclareUniform(PSC_MATERIAL_COLOR, float4,..u_f4PixelMaterialColor,.21,....1).DeclareUniform(PSC_MATERIAL_FX, float4,..u_f4PixelMatFx,.22,....1).DeclareUniform(PSC_SPECIAL_LIGHT, float4,..u_f4SpecialLight,.23,....1).DeclareUniform(PSC_DOF_PARAM, float4,..u_f4DofParam,...24,....1).DeclareUniform(PSC_DOF_AJUST_TEX, float4,..u_f4DofAjustTex,...25,....1).DeclareUniform(PSC_DOF_PIXELSIZE, float4,..u_f4DofPixelSize,...26,....1).DeclareUniform(PSC_DOF_RADIUS, float4,..u_f4DofRadius,...27,....1).DeclareUniform(PSC_FAR_CAM, float2,..u_f2FarCameraAndTolerance,...28,....1).DeclareUniformArray(PSC_ANIM, float4,..u_f4AnimFx,.2,..29,....2).DeclareUniform(PSC_MINMAX_SHADOW, float3,..u_f3MinMaxShadow,...33,....1).DeclareUniform(PSC_WORLDVIEWPROJ, float4x4,..u_f44WorldViewProj,..34,....4).DeclareUniformArray(PSC_DOWNSAMPLE4x4_PARAM, float4,..u_af2SampleOffsets,8,.38,..8).DeclareUniformArray(PSC_GAUSSBLUR5x5_PARAM, float4,..u_af4Gauss5x5,32,...46,..32).#undef DeclareUniform.#undef DeclareUniformArray.#define DeclareUniform(x_enum, x_type, x_name, x_register,  x_constantCount).\.uniform..x_type.x_name : register(b##x_register);./* declaration des constantes booléennes */./**********************************************************************************************************/./*.EnumName,.type,.shader prefixe, .nom,..numero de registre,..nombre de registre occupé */./**********************************************************************************************************/.DeclareUniform(PSCB_VERT_FIRST,.bool,..u_bVertexColorFirst,....0,....1)./**********************************************************************************************************/./*.EnumName,.type,.shader prefixe, nom,.N° registre,..nb registre occupé */./**********************************************************************************************************/.#undef DeclareUniform.#ifndef _commonshadertools_file_.#define _commonshadertools_file_.#ifdef CGFX_FOR_MAYA.#pragma once.#endif.void GetLocalEnvTexCoord(out float2 a_of2EnvmapTexture,float3 a_f3Normal, float3 a_f3View).{.float3 f3Reflect = reflect(a_f3View,a_f3Normal);.a_of2EnvmapTexture.x = -f3Reflect.x*0.5f - 0.5f;.a_of2EnvmapTexture.y = -f3Reflect.y*0.5f - 0.5f;.}.void GetRwCameraEnvTexCoord(out float2 a_of2EnvmapTexture,float3 a_f3NormalLS, in float3 a_f3CameraEnv1, in float3 a_f3CameraEnv2).{.a_of2EnvmapTexture.x = dot(a_f3NormalLS, a_f3CameraEnv1) + 0.5f;.a_of2EnvmapTexture.y = dot(a_f3NormalLS, a_f3CameraEnv2) + 0.5f;.}.void GetCameraEnvTexCoord(out float2 a_of2txCoor,in float3 a_f3Normal,in float3 a_f3View,in float3 a_f3EnvmapCoef1).{.float3..f3Right = normalize(a_f3EnvmapCoef1);.float3..f3View = normalize(a_f3View);.float3..f3newUp = cross(f3View,f3Right);.float3..f3newRight = cross(f3newUp,f3View);.f3newRight = normalize(f3newRight);.f3newUp = normalize(f3newUp);.float3..f3NormVS = (a_f3Normal);.float..fRdot = dot(f3NormVS,f3newRight);.float..fUdot = dot(f3NormVS,f3newUp);..a_of2txCoor.x = (0.5f*fRdot*abs(fRdot) + 0.5f);..a_of2txCoor.y = (0.5f*fUdot*abs(fUdot) + 0.5f);.}.void GetCameraEnvTexCoordLS(out float2 a_of2txCoor,in float3 a_f3Normal,in float3 a_f3View,in float3 a_f3EnvmapCoef1).{.float3..f3Right = normalize(a_f3EnvmapCoef1);.float3..f3View = normalize(a_f3View);.float3..f3newUp = cross(f3View,f3Right);.float3..f3newRight = cross(f3newUp,f3View);.f3newRight = normalize(f3newRight);.f3newUp = normalize(f3newUp);.float3..f3NormVS = a_f3Normal;.float..fRdot = dot(f3NormVS,f3newRight);.float..fUdot = dot(f3NormVS,f3newUp);..a_of2txCoor.x = (0.5f*fRdot*abs(fRdot) + 0.5f);..a_of2txCoor.y = (-0.5f*fUdot*abs(fUdot) + 0.5f);.}.float4 GetDirLightColor(float4 a_f4Color,float3 a_f3Dirlight, float3 a_f3Normal).{.float.fDot = dot(-a_f3Dirlight,a_f3Normal);.return a_f4Color*max(fDot,0);.}.float GetInvertedDirLightColor(float a_fColorCoef,float3 a_f3Dirlight, float3 a_f3Normal).{.float.fDot = dot(-a_f3Dirlight,a_f3Normal);.return a_fColorCoef*min(fDot,0);.}.float4.ModulateLightColor(float4 a_f4Emissive,float4 a_f4diffuse ).{.float4 f4Color = a_f4Emissive;.f4Color.xyz *=a_f4diffuse.xyz;.return f4Color;.}.float4.AddLightColor(float4 a_f4Emissive,float4 a_f4diffuse ).{.float4 f4Color = a_f4Emissive;.f4Color.xyz +=a_f4diffuse.xyz;.return f4Color;.}.float4..GetSpecular(float3.a_f3View, float3 a_f3Normal, float3 a_f3Light,float4 a_f4Color).{.float.fExp.= u_f4Specular.y;.float3 f3Reflection = normalize( 2 * dot( -a_f3Light, a_f3Normal ) * a_f3Normal + a_f3Light );.float fRdotL =  dot( f3Reflection, a_f3View);.if( fRdotL>0 ).{.return a_f4Color*pow(fRdotL,fExp);.}.else.{.return float4(0,0,0,0);.}.}.void .TangentSpaceTransform(out float3 a_of3VectorTS,float3 a_f3VectorLS,float3x3 a_f33TangentToLocal).{.a_of3VectorTS = mul(a_f33TangentToLocal,a_f3VectorLS);.}.float3 .ComputeBinormal(float3 a_f3Normal, float3 a_f3Tangent).{.float3..f3BiNormalLS;.f3BiNormalLS = cross(a_f3Tangent,a_f3Normal);.f3BiNormalLS = normalize(f3BiNormalLS);.return f3BiNormalLS;.}.void .ComputeTangentToLocalMatrix(out float3x3.a_of33TangentToLocal, float3 a_f3NormalLS, float3 a_f3TangentLS).{.float3..f3BiNormalLS;.f3BiNormalLS = ComputeBinormal(a_f3NormalLS, a_f3TangentLS);.a_of33TangentToLocal = float3x3( a_f3TangentLS, f3BiNormalLS, a_f3NormalLS);.}./******************************.* Vertex Output.*******************************/.struct SVertexOutput.{.#ifdef internVertexOutput.float4..m_f4Position:POSITION0;.#endif.#ifdef internOutputPointLight.#ifdef internUseTangentMatrix.float4  m_f4PositionLS:POINTLIGHTPOS;.#endif.#endif.#ifdef TEST_GRASS.#endif.#ifdef internColor0.float4 ..m_f4Color:COLOR0;.#endif.#ifdef internUseBaseTex.float4..m_f4basetex:TEXCOORDBaseTex;.#endif.#ifdef internOutpuSecondTexCoor.float4..m_f4secondtex:TEXCOORDSecondTexCoor;.#endif.#ifdef internOutputViewLS.float3..m_f3ViewLS:TEXCOORDviewLS;.#endif.#ifdef internOutputNormal.float3..m_f3NormalLS:TEXCOORDNormalLS;.#endif.#ifdef internParallaxOffset.float2..m_f2ParallaxOffsetTS:TEXCOORDParallaxTS;.#endif.#ifdef internOutputTangentMatrix.float3.. m_f3TangentLS:TEXCOORDTangentLS;.float3.. m_f3BinormalLS:TEXCOORDBinormalLS;.#else.#if defined(internOutputLight) || defined(internOutputPointLight).float4.. m_af4LightTS[internLightNb]:TEXCOORDLight1;.#endif.#if defined( internOutputSpecialLight ).float4.. m_f4SpecialLightTS:TEXCOORDSpeLight1;.#endif.#ifdef internOutputViewTS.#ifndef internRenderFarTex.#ifdef internShadowEnable.float4..m_f4ViewTS:TEXCOORDviewTS;.#else.float3..m_f3ViewTS:TEXCOORDviewTS;.#endif.#else.float3..m_f3ViewTS:TEXCOORDviewTS;.#endif.#else.#ifndef internRenderFarTex.#ifdef internShadowEnable.float m_fHeight : TEXCOORD7;.#endif.#endif.#endif.#endif .#ifdef internOutputEnvmap.float3..m_f3EnvmapCoef:TEXCOORDEnv;.#elif defined( internEnvmap).float2..m_f2EnvmapTexture:TEXCOORDEnv;.#endif.#if defined(internRenderFarTex) || defined(internRenderDoF).float4.. m_f4FarTexHeight:TEXCOORDBkg;.#endif.float..m_fFogCoef.:FOG;.#ifdef internRenderDoF.float m_fDof : TEXCOORD7;.#endif.};.float.GetAttenuation(in float.a_fMaxDistance,in  float a_fDistance).{.return max(0,( 1 - (a_fDistance*a_fDistance)/(a_fMaxDistance*a_fMaxDistance)));.}.#endif ./****************************************.* Samplers.*****************************************/.#ifdef internUseBaseTex.sampler2D  DiffuseMap: register(s0);.#endif.#ifdef internUseSecondTex.sampler2D  sampler_secondtex: register(s1);.#endif.#if defined(internOutputEnvmap).sampler2D  EnvMap1: register(s2);.#elif defined(internEnvmap).sampler2D  EnvMap1: register(s1);.#endif.#ifdef internDualEnvmap.sampler2D.EnvMap2: register(s4);.#endif.#ifdef internShadowEnable.sampler2D.ShadowSampler: register(s5);.#endif.#ifdef internNormalMap.sampler2D  NormalControlMap: register(s1);.#ifdef TEST_GRASS.sampler2D  GrassBlade: register(s1);.#endif .#endif.#ifdef internRenderFarTex.sampler2D  BackgroundRenderedTexture: register(s6);.#endif.sampler2D  FogTexture: register(s7);.#if defined( internControlMap).#ifndef internNormalMap.sampler2D  sampler_ctrltex: register(s1);.#endif.#endif.#ifdef internGaussianBlur5x5.sampler2D  sampler_source: register(s0);.#endif.#ifdef internPostRenderDoF.sampler2D  sampler_source: register(s0);.sampler2D  sampler_blur: register(s1);.#endif.#ifdef internCopyToAlpha.sampler2D  sampler_depth: register(s0);.#endif.#ifdef internDownScale4x4.sampler2D  sampler_source: register(s0);.#endif./*.*.*.structures.*.*/./******************************.* Pixel input.*******************************/.typedef SVertexOutput SPixelInput;.#if internDirLightNb>0.float4..g_af4DirLight[internDirLightNb];.#endif.#if internPointLightNb>0.float4..g_af4PointLight[internPointLightNb];.#endif.#if internSpecialLightNb>0.float4..g_f4SpecialDirLight;.#endif./*.*..includes.*/.#ifdef internNormalMap.float4 .GetNormalTextureVector(float2 texCoord).{.#ifdef internSwapNormalColor.return tex2D( NormalControlMap, texCoord ).wyzx;.#else.return tex2D( NormalControlMap, texCoord );.#endif.}.float4 .GetUnswappedNormalTextureVector(float2 texCoord).{.return tex2D( NormalControlMap, texCoord );.}.float3 .GetNormalFromTextureVector(float4 a_f4TextureVector).{.return normalize(a_f4TextureVector.xyz * 2 - float3(1.0f,1.0f,1.0f) );.}.#endif ./* Pixel Methods */.float4 GetPixelColor(float4..a_f4VertexColor).{.return a_f4VertexColor;.}.float4 GetPixelColor(float4..a_f4VertexColor,float4..a_f4Lights).{.float4..f4Color;.#ifdef internMultiplyPrelit.f4Color = ModulateLightColor(a_f4VertexColor,a_f4Lights);.#else.f4Color = AddLightColor(a_f4VertexColor,a_f4Lights);.#endif.return f4Color;.}.void AddFogColor( inout float4 a_of4color, float a_fCoef, float3 a_f3FogColor).{.a_of4color.xyz =  a_fCoef * a_f3FogColor +  (1.0 - a_fCoef) * a_of4color.xyz;.}.float3.GetEnvAddedColor(out float2 a_f2TexCoord, in float3 a_f3Normal, in float3 a_fViewTS,in float fCtrlColor, in float3 a_f3EnvMapCoef).{.float3..f3EnvColor=float3(0.f,0.f,0.f);.#ifdef internNormalMap.GetLocalEnvTexCoord(a_f2TexCoord,a_f3Normal,a_fViewTS);.#endif.#ifdef internFirstEnvmap.f3EnvColor = u_f4PixelMatFx.x*fCtrlColor*tex2D(EnvMap1,a_f2TexCoord).xyz;.#endif.#ifdef internDualEnvmap.f3EnvColor += u_f4PixelMatFx.y*(1.0f-fCtrlColor)*tex2D(EnvMap2,a_f2TexCoord).xyz;.#endif.return f3EnvColor;.}.#ifdef internParallaxOffset.float GetOcclusionShadow(float3 a_vLightTS,float2 texSample,float2 dx,float2 dy).{.float.fShadowSoftening = u_f3PomTextureShadow.z;.float   fOcclusionShadow;.float fHScale...= u_f4NormalParam.x;.float2 vLightRayTS = -a_vLightTS.xy * fHScale;.float sh0 =  tex2Dgrad( NormalControlMap, texSample, dx, dy ).a;.float shA = (tex2Dgrad( NormalControlMap, texSample + vLightRayTS * 0.88, dx, dy ).a - sh0 - 0.88 ) *  1 * fShadowSoftening;.float sh9 = (tex2Dgrad( NormalControlMap, texSample + vLightRayTS * 0.77, dx, dy ).a - sh0 - 0.77 ) *  2 * fShadowSoftening;.float sh8 = (tex2Dgrad( NormalControlMap, texSample + vLightRayTS * 0.66, dx, dy ).a - sh0 - 0.66 ) *  4 * fShadowSoftening;.float sh7 = (tex2Dgrad( NormalControlMap, texSample + vLightRayTS * 0.55, dx, dy ).a - sh0 - 0.55 ) *  6 * fShadowSoftening;.float sh6 = (tex2Dgrad( NormalControlMap, texSample + vLightRayTS * 0.44, dx, dy ).a - sh0 - 0.44 ) *  8 * fShadowSoftening;.float sh5 = (tex2Dgrad( NormalControlMap, texSample + vLightRayTS * 0.33, dx, dy ).a - sh0 - 0.33 ) * 10 * fShadowSoftening;.float sh4 = (tex2Dgrad( NormalControlMap, texSample + vLightRayTS * 0.22, dx, dy ).a - sh0 - 0.22 ) * 12 * fShadowSoftening;.fOcclusionShadow = 1 - max( max( max( max( max( max( shA, sh9 ), sh8 ), sh7 ), sh6 ), sh5 ), sh4 );.fOcclusionShadow = fOcclusionShadow * 0.6 + 0.4;.return saturate(fOcclusionShadow);.}.float ShadowSoftening(float2 a_f2Tex,float2 dx,float2 dy,in SPixelInput a_In).{.float fOcclusionShadow = 1.0f;.#if internDirLightNb>0.#if internDirLightNb>0.fOcclusionShadow *= GetOcclusionShadow(g_af4DirLight[0],a_f2Tex, dx, dy);.#endif.#if internDirLightNb>1.fOcclusionShadow *= GetOcclusionShadow(g_af4DirLight[1],a_f2Tex, dx, dy);.#endif.#if internDirLightNb>2.fOcclusionShadow *= GetOcclusionShadow(g_af4DirLight[2],a_f2Tex, dx, dy);.#endif.#if internDirLightNb>3.fOcclusionShadow *= GetOcclusionShadow(g_af4DirLight[3],a_f2Tex, dx, dy);.#endif.#endif.#if internSpecialLightNb>0.fOcclusionShadow *= GetOcclusionShadow(g_f4SpecialDirLight,a_f2Tex, dx, dy);.#endif.return fOcclusionShadow;.}.void GetParallaxOffset(inout float2 a_iof2basetex.,in float3 a_f3NormalLS,in float3 a_f3ViewLS.,in  float2 a_f2ParallaxOffsetTS,.out float a_ofShadowCoef,.in SPixelInput a_In).{.float fLODThreshold..= u_f4NormalParam.y;.float fMinSample...= u_f4NormalParam.z;.float fMaxSample...= u_f4NormalParam.w;.float2 fTexCoordsPerSize = a_iof2basetex * u_f3PomTextureShadow.xy;.float2 dxSize, dySize;.float2 dx, dy;.float4( dxSize, dx ) = ddx( float4( fTexCoordsPerSize, a_iof2basetex ) );.float4( dySize, dy ) = ddy( float4( fTexCoordsPerSize, a_iof2basetex ) );.float  fMipLevel;.float  fMipLevelInt;    .float  fMipLevelFrac;   .float  fMinTexCoordDelta;.float2 dTexCoords;.dTexCoords = dxSize * dxSize + dySize * dySize;.fMinTexCoordDelta = max( dTexCoords.x, dTexCoords.y );.fMipLevel = max( 0.5 * log2( fMinTexCoordDelta ), 0 );.float2 texSample = a_iof2basetex;.a_ofShadowCoef = 1.0f;.if ( fMipLevel <= fLODThreshold ).{.int nNumSteps = (int) lerp( fMaxSample, fMinSample, dot( a_f3ViewLS, a_f3NormalLS ) );.float fCurrHeight = 0.0;.float fStepSize   = 1.0 / (float) nNumSteps;.float fPrevHeight = 1.0;.float fNextHeight = 0.0;.int    nStepIndex = 0;.bool   bCondition = true;.float2 vTexOffsetPerStep = fStepSize * a_f2ParallaxOffsetTS;.float2 vTexCurrentOffset = a_iof2basetex;.float  fCurrentBound     = 1.0;.float  fParallaxAmount   = 0.0;.float2 pt1 = 0;.float2 pt2 = 0;.while ( nStepIndex < nNumSteps ).{.fCurrHeight = tex2Dgrad( NormalControlMap, vTexCurrentOffset-nStepIndex*vTexOffsetPerStep, dx, dy ).a;.fCurrentBound -= fStepSize;.if ( fCurrHeight > fCurrentBound ).{.pt1 = float2( fCurrentBound, fCurrHeight );.pt2 = float2( fCurrentBound + fStepSize, fPrevHeight );.nStepIndex = nNumSteps + 1;.fPrevHeight = fCurrHeight;.}.else.{.nStepIndex++;.fPrevHeight = fCurrHeight;.}.}.float fDelta2 = pt2.x - pt2.y;.float fDelta1 = pt1.x - pt1.y;.float fDenominator = fDelta2 - fDelta1;.if ( fDenominator == 0.0f ).{.fParallaxAmount = 0.0f;.}.else.{.fParallaxAmount = (pt1.x * fDelta2 - pt2.x * fDelta1 ) / fDenominator;.}.float2 vParallaxOffset = a_f2ParallaxOffsetTS * (1 - fParallaxAmount );.float2 texSampleBase = a_iof2basetex - vParallaxOffset;.texSample = texSampleBase;.. ..if ( fMipLevel > (float)(fLODThreshold - 1) )..{.fMipLevelFrac = modf( fMipLevel, fMipLevelInt );..     texSample = lerp( texSampleBase, a_iof2basetex, fMipLevelFrac );..}.a_iof2basetex = texSample;.a_ofShadowCoef = 1.0f;.if( u_f3PomTextureShadow.z > 0 ).{.a_ofShadowCoef = ShadowSoftening(a_iof2basetex,dx,dy,a_In);.}.}.}.#endif .void ComputeDiffuse(inout float4 a_f4Color, in float3 a_f3Normal).{.int i=0;.#if internDirLightNb>0..for(i=0;i<internDirLightNb;i++).{.a_f4Color.xyz += GetDirLightColor(u_f4PixelDirLightColor[i], g_af4DirLight[i].xyz, a_f3Normal).xyz;.}.#endif.}.void ComputeDiffuseFromPointLight(inout float4 a_f4Color, in float3 a_f3Normal.#ifdef internUseBaseTex.,in float2 f2Basetex.#endif.#ifdef internOutputPointLight.#ifdef internUseTangentMatrix.,in float4 f4PosLs.#endif.#endif.).{.int i=0;.#if internPointLightNb>0..for(i=0;i<internPointLightNb;i++).{.#ifdef internOutputPointLight.#ifdef internUseTangentMatrix.float3 f3DirLightFromPt = f4PosLs.xyz - u_f4PixelPointLight[i].xyz;.float fAtten = GetAttenuation(u_f4PixelPointLight[i].w,length(f3DirLightFromPt));.float fIntensity = u_f4PixelPointLightColor[i].w;.#ifdef internUseBaseTex.a_f4Color.xyz += fAtten*GetDirLightColor(u_f4PixelPointLightColor[i], g_af4PointLight[i].xyz, a_f3Normal).xyz * tex2D(DiffuseMap,f2Basetex).xyz*float3(fIntensity,fIntensity,fIntensity);.#else.a_f4Color.xyz += fAtten*GetDirLightColor(u_f4PixelPointLightColor[i], g_af4PointLight[i].xyz, a_f3Normal).xyz * float3(fIntensity,fIntensity,fIntensity);.#endif.#endif.#endif.}.#endif.}.float4  ComputeSpecularFromPointLight(float3 a_f3ViewTS,float3 a_f3NormalTS ).{.int i=0;.float4..f4Spec= float4(0,0,0,0);.#if internPointLightNb >0.for(i=0;i<internPointLightNb;i++).{.float4..f4Light = g_af4PointLight[i];.f4Spec +=   g_af4PointLight[i].w*GetSpecular(a_f3ViewTS,a_f3NormalTS,f4Light.xyz,u_f4PixelPointLightColor[i]);.}.#endif.return f4Spec;.}.float GetNormalDeformation(float3 a_f3Normal).{.float fDot = a_f3Normal.z;.return (max(fDot,u_f4NormalParam.x));.}.void.ComputeNormalInfluence(inout float4 a_f4PixelColor,in float3 a_f3Normal).{.a_f4PixelColor.xyz *= .GetNormalDeformation(a_f3Normal);.}.float4 ComputeSpecular(float3 a_f3ViewTS,float3 a_f3NormalTS ).{.float4 f4Spec = float4(0,0,0,0);.#if internDirLightNb>0.#endif.#if internSpecialLightNb>0.float4.f4Color = float4(1.0,1.0,1.0,1.0);.f4Spec += GetSpecular(a_f3ViewTS,a_f3NormalTS,g_f4SpecialDirLight.xyz,f4Color);.#endif.return f4Spec;.}.void PreComputeAllLight(in  SPixelInput  a_In.#ifdef internOutputTangentMatrix.,in float3x3 a_f33TransformTSMatrix.#endif.).{.int i=0;.float4 f4 = float4(0,1,1,1);.#if internDirLightNb>0.for(i=0;i<internDirLightNb;i++).{..#ifdef internOutputLight.#ifdef internOutputTangentMatrix.TangentSpaceTransform((float3)g_af4DirLight[i],(float3)u_f4PixelDirLight[i],a_f33TransformTSMatrix);.#else.g_af4DirLight[i]= normalize(a_In.m_af4LightTS[i]);.#endif.#else.g_af4DirLight[i]=u_f4PixelDirLight[i];.#endif.}.#endif.#if internPointLightNb>0...for(i=0;i<internPointLightNb;i++).{.#ifdef internOutputPointLight.#ifdef internOutputTangentMatrix.g_af4PointLight[i] = float4(0,0,0,1.0);.#else.g_af4PointLight[i] = a_In.m_af4LightTS[internDirLightNb + i ];.#endif.#else.g_af4PointLight[i]=float4(0,0,0,1.0);.#endif.}.#endif.#if internSpecialLightNb>0..#ifdef internOutputSpecialLight.#ifdef internOutputTangentMatrix.TangentSpaceTransform((float3)g_f4SpecialDirLight,(float3)u_f4SpecialLight,a_f33TransformTSMatrix);.#else.g_f4SpecialDirLight = a_In.m_f4SpecialLightTS;.g_f4SpecialDirLight.w = 1.0;.#endif.#else.g_f4SpecialDirLight= float4(0,0,0,1.0);.#endif.#endif.}.#ifdef internRenderDoF.float ComputeDepthBlur( float.a_fCameraDepth ).{.float fDepthBlur = 0.0f;.float fDepth = a_fCameraDepth;.float fFocalPlaneDistance = u_f4DofParam.x;.float fNearBlurPlaneDistance = u_f4DofParam.y;.float fFarBlurPlaneDistance = u_f4DofParam.z;.float fFarBlurLimit = u_f4DofParam.w;.if( fDepth < fFocalPlaneDistance ).{.fDepthBlur = ( fDepth - fFocalPlaneDistance ) / ( fFocalPlaneDistance - fNearBlurPlaneDistance );.fDepthBlur = clamp( fDepthBlur, -fFarBlurLimit, 0);.}.else.{.fDepthBlur = ( fDepth - fFocalPlaneDistance ) / ( fFarBlurPlaneDistance - fFocalPlaneDistance );.fDepthBlur = clamp( fDepthBlur, 0, fFarBlurLimit );.}.return fDepthBlur * 0.5f + 0.5f;.}.#endif.#ifdef internPostRenderDoF.static const int NUM_POISSON_TAPS = 8;.static const float2 g_Poisson[8] =.{.float2( 0.000000f, 0.000000f ),.float2( 0.527837f,-0.085868f ),.float2(-0.040088f, 0.536087f ),.float2(-0.670445f,-0.179949f ),.float2(-0.419418f,-0.616039f ),.float2( 0.440453f,-0.639399f ),.float2(-0.757088f, 0.349334f ),.float2( 0.574619f, 0.685879f ),.};.float4 PoissonDOFFilterPS( float2 vTexCoord ).{..float2  f2PixelSizeLow={u_f4DofPixelSize.x,u_f4DofPixelSize.y};.float2  f2PixelSizeHigh={u_f4DofPixelSize.z,u_f4DofPixelSize.w};.float4 vOutColor = tex2D( sampler_source, vTexCoord );.float2  f4MaxCoC={u_f4DofRadius.x,u_f4DofRadius.y};.float  fRadiusScale = u_f4DofRadius.z;.float fCenterDepth = vOutColor.a;.float fDiscRadius = abs( fCenterDepth * f4MaxCoC.y - f4MaxCoC.x );.float fDiscRadiusLow = fDiscRadius * fRadiusScale;.float2.f2LowC = f2PixelSizeLow*fDiscRadiusLow;.float2.f2HiC = f2PixelSizeHigh*fDiscRadius;.float2 vCoordLow = vTexCoord;.float4 vBlurColor   = tex2D( sampler_blur, vCoordLow );.float4 vTapLow   = vBlurColor;.float2 vCoordHigh = vTexCoord;.float4 vTapHigh   = vOutColor;.float fTapBlur;.float4 vTap;.vOutColor = 0;.for( int t=1; t<NUM_POISSON_TAPS; t++ ).{.fTapBlur = abs( vTapHigh.a * 2.0f - 1.0f );.vTap = lerp( vTapHigh, vTapLow, fTapBlur );.vTap.a = ( vTap.a >= fCenterDepth ) ? 1.0f : abs( vTap.a * 2.0f - 1.0f );.vOutColor.rgb += vTap.rgb * vTap.a;.vOutColor.a   += vTap.a;.vCoordLow = vTexCoord + (f2LowC * g_Poisson[t] );.vTapLow   = tex2D( sampler_blur, vCoordLow );.vCoordHigh = vTexCoord + (f2HiC * g_Poisson[t] );.vTapHigh   = tex2D( sampler_source, vCoordHigh );.}.fTapBlur = abs( vTapHigh.a * 2.0f - 1.0f );.vTap = lerp( vTapHigh, vTapLow, fTapBlur );.vTap.a = ( vTap.a >= fCenterDepth ) ? 1.0f : abs( vTap.a * 2.0f - 1.0f );.vOutColor.rgb += vTap.rgb * vTap.a;.vOutColor.a   += vTap.a;.vOutColor = vOutColor / vOutColor.a;.vOutColor.a =  abs( fCenterDepth * 2.0f - 1.0f );.return vOutColor;.}.#endif.#ifdef internGaussianBlur5x5.float4 GaussBlur5x5PS( in float2 vScreenPosition ).{.float4 f4Color = 0.0f;.for( int i=0; i < 12; i++ ).{.f4Color += u_af4Gauss5x5[16+i] * tex2D( sampler_source, vScreenPosition + u_af4Gauss5x5[i].xy );.}.return f4Color;.}.#endif .#ifdef internCopyToAlpha.float4 CopyToAlpha(in float2 a_f2TexCoord).{.float4..f4OutColor = float4(0,0,0,0);.f4OutColor.a = tex2D(sampler_depth,a_f2TexCoord).x;.return f4OutColor;.}.#endif .float ComputeLuminance(float3 a_f3Color).{.return  dot( float3(0.299,0.587,0.114),a_f3Color);.}.#ifdef internDownScale4x4.float4 DownScale4x4PS( in float2 vScreenPosition  ).{.#ifdef FILTERABLE.float4 t0, t1, t2, t3;.asm.{.tfetch2D t0, vScreenPosition, s0, OffsetX = -1, OffsetY = -1.tfetch2D t1, vScreenPosition, s0, OffsetX = -1, OffsetY = +1.tfetch2D t2, vScreenPosition, s0, OffsetX = +1, OffsetY = -1.tfetch2D t3, vScreenPosition, s0, OffsetX = +1, OffsetY = +1.};.return ( t0 + t1 + t2 + t3 ) / 4.0f;.#else.const int NUM_SAMPLES = 8;.const int DOUBLE_NUM_SAMPLES = 16;.float4 vColor = 0.0f;.for( int i=0; i < NUM_SAMPLES; i++ ).{.vColor += tex2D( sampler_source, vScreenPosition + u_af2SampleOffsets[i].xy );.vColor += tex2D( sampler_source, vScreenPosition + u_af2SampleOffsets[i].zw );.}.return vColor/DOUBLE_NUM_SAMPLES;.#endif.}.#endif.#ifdef internDownScale16x16.float4 DownScale16x16PS( in float2 vScreenPosition  ).{.float4 vColor = float4(1,0,0,1);.float lum = ComputeLuminance(vColor.xyz);.vColor.xyz *= ( pow(0.8f+lum,2) );.return vColor;.}.#endif./*.void GetCameraEnvTexCoordTest(out float2 a_of2txCoor,in float3 a_f3NormalTS,in float3 a_f3ViewTS,in float3 a_f3EnvmapCoef1,in float3 a_f3EnvmapCoef2).{.float3..f3Right = normalize(a_f3EnvmapCoef1);.float3..f3Up = normalize(a_f3EnvmapCoef2);.float3..f3View = normalize(a_f3ViewTS);.float3..f3newUp = cross(f3View,f3Right);.float3..f3newRight = cross(f3newUp,f3View);.f3newRight = normalize(f3newRight);.f3newUp = normalize(f3newUp);.float3..f3NormVS = (a_f3NormalTS);.float..fRdot = dot(f3NormVS,f3newRight);.float..fUdot = dot(f3NormVS,f3newUp);..a_of2txCoor.x = (0.5f*fRdot*abs(fRdot) + 0.5f);..a_of2txCoor.y = (0.5f*fUdot*abs(fUdot) + 0.5f);.}*/.float4..GetFallOffColor(in float3 a_rf3NormalTS,in float3 a_rf3ViewTS).{.float4.f4Color1 = float4(1.0f,1.0f,0.0f,1.0f);.float4.f4Color2 = float4(1.0f,0.0f,0.0f,1.0f);.float fDot = dot(a_rf3NormalTS,a_rf3ViewTS);.if( fDot<0.5f ).{.return (1.0f-fDot)*f4Color1;.}.else.{.return 0;.}.}.#ifdef internBloom.float4 BloomPS( in float2 vScreenPosition, in float4 a_f4Color  ).{.float4 f4Bloom = float4(0,0,0,0);.float fThreashold = 0.8f;.float fThreasholdMin = 0.1f;.float fAlphaMin = 0.0f;.float fAlphaMax = 1.0f;.float4 f4Tint = float4(1,1,1,1);.float4  f4Color = a_f4Color*tex2D(DiffuseMap,vScreenPosition);.float lum = ComputeLuminance(f4Color.xyz);.float falpha = 1.0f;.if( lum > fThreashold ).{.f4Bloom = f4Tint;.f4Bloom.w = pow(0.5f, 1.0f+lum-fThreashold);.f4Bloom.w = 1;.}.else.{.f4Bloom = f4Tint;.f4Bloom.w = pow(lum,2);.}.f4Bloom = f4Color;.return f4Bloom;.}.#endif.#ifdef TEST_GRASS.#define MAX_RAYDEPTH 10 .#define PLANE_NUM 64.0f .#define PLANE_NUM_INV (1.0/PLANE_NUM).#define PLANE_NUM_INV_DIV2 (PLANE_NUM_INV/2).#define GRASS_SLICE_NUM 8.0f .#define GRASS_SLICE_NUM_INV (1.0f/GRASS_SLICE_NUM).#define GRASS_SLICE_NUM_INV_DIV2 (GRASS_SLICE_NUM_INV/2).#define GRASSDEPTH GRASS_SLICE_NUM_INV .#define TC1_TO_TC2_RATIO 8 .#define PREMULT (GRASS_SLICE_NUM_INV*PLANE_NUM) .#define AVERAGE_COLOR float4(0.32156,0.513725,0.0941176,1.0) .void  BillboardGrass_PS(.in float4 vertColor,.in float2 texCoord ,.in float3 eyeDirTan,.in float4 positionViewProj,.out float4 color.,.out float depth.).{.color = float4(0.0,0.0,0.0,0.0);..float2 plane_offset = float2(0.0,0.0);..float3 rayEntry = float3(texCoord.xy,0.0);.float zOffset = 0.0;.bool zFlag = 1;.float fTime = fmod(u_f4AnimFx[0].x,8.0f);.float2 texCoord2 =  (0.5f,0.5f);....float2 sign = float2(sign(eyeDirTan.x),sign(eyeDirTan.y));..float2 plane_correct = float2((sign.x+1)*GRASS_SLICE_NUM_INV_DIV2,..                              (sign.y+1)*GRASS_SLICE_NUM_INV_DIV2);..float2 planemod = float2(floor(rayEntry.x*PLANE_NUM)/PLANE_NUM,..                         floor(rayEntry.y*PLANE_NUM)/PLANE_NUM);.float2 pre_dir_correct = float2((sign.x+1)*PLANE_NUM_INV_DIV2,.(sign.y+1)*PLANE_NUM_INV_DIV2);.int hitcount;..for(hitcount =0; hitcount < MAX_RAYDEPTH % (MAX_RAYDEPTH+1); hitcount++) ..{...float2 dir_correct = float2(sign.x*plane_offset.x+pre_dir_correct.x,...                            sign.y*plane_offset.y+pre_dir_correct.y);.float2 distance = float2((planemod.x + dir_correct.x - rayEntry.x)/(eyeDirTan.x),.(planemod.y + dir_correct.y - rayEntry.y)/(eyeDirTan.y));...float3 rayHitpointX = rayEntry + eyeDirTan *distance.x;...float3 rayHitpointY = rayEntry + eyeDirTan *distance.y;...if ((rayHitpointX.z <= -GRASSDEPTH)&& (rayHitpointY.z <= -GRASSDEPTH))...{....float distanceZ = (-GRASSDEPTH)/eyeDirTan.z; ....float3 rayHitpointZ = rayEntry + eyeDirTan *distanceZ;.float2 orthoLookupZ = float2(rayHitpointZ.x,rayHitpointZ.y);....color = (color)+((1.0-color.w) * tex2D(DiffuseMap,orthoLookupZ));....if(zFlag ==1) zOffset = distanceZ; ....zFlag = 0; ...}...else...{....float2 orthoLookup; .....if(distance.x <= distance.y)....{.....float4 windX;.windX = float4(0,1,1,1);.float lookupX = -(rayHitpointX.z+(planemod.x+sign.x*plane_offset.x)*PREMULT)-plane_correct.x;.orthoLookup=float2(rayHitpointX.y+windX.x*(GRASSDEPTH+rayHitpointX.z),lookupX);.plane_offset.x += PLANE_NUM_INV; .if(zFlag==1) zOffset = distance.x;.}.else {.float4 windY;.....windY = float4(1,0,1,1);.float lookupY = -(rayHitpointY.z+(planemod.y+sign.y*plane_offset.y)*PREMULT)-plane_correct.y;.orthoLookup = float2(rayHitpointY.x+windY.y*(GRASSDEPTH+rayHitpointY.z) ,lookupY);.plane_offset.y += PLANE_NUM_INV;  .if(zFlag==1) zOffset = distance.y;....}...... ..color += (1.0-color.w)*tex2D(GrassBlade,orthoLookup);.. ..if(color.w >= 0.49){zFlag = 0;}....}.}.color += (1.0-color.w)*AVERAGE_COLOR; .float4.positionView = positionViewProj + mul(eyeDirTan.xzy*zOffset,u_f44WorldViewProj);.depth = positionView.z/positionView.w;.}.#endif .#ifdef internWaterAnimation.float3.BlendNormal(float3 a_f3Norm1,float a_fScale1,float3 a_f3Norm2,float a_fScale2).{.float3 f3Res;.f3Res.x = a_fScale1 * a_f3Norm1.x * a_f3Norm2.z + a_fScale2 * a_f3Norm2.x * a_f3Norm1.z;.f3Res.y = a_fScale1 * a_f3Norm1.y * a_f3Norm2.z + a_fScale2 * a_f3Norm2.y * a_f3Norm1.z;.f3Res.z = a_f3Norm1.z * a_f3Norm2.z;.return f3Res;.}.float3 GetWaterNormal(in float2 a_f2basetex).{.float2 f2Speed1 = float2( u_f4AnimFx[0].z/100.0, u_f4AnimFx[0].w/100.0 );.float2 f2Speed2 = float2( u_f4AnimFx[1].x/100.0, u_f4AnimFx[1].y/100.0 );.float2 f2Speed3 = float2( u_f4AnimFx[1].z/100.0, u_f4AnimFx[1].w/100.0 );.float fTime = u_f4AnimFx[0].x;.float2 f2Tex1 = a_f2basetex + f2Speed1*fTime;.float2 f2Tex2 = a_f2basetex + f2Speed2*fTime;.float2 f2Tex3 = a_f2basetex + f2Speed3*fTime;.float3 f3Norm;.float3 f3Norm1 = tex2D(NormalControlMap, f2Tex1).xyz*2-float3(1,1,1);.float3 f3Norm2 = (/*f3Norm1,*/tex2D(NormalControlMap, f2Tex2).xyz*2-float3(1,1,1));.float3 f3Norm3 = (/*f3Norm2,*/tex2D(NormalControlMap, f2Tex3).xyz*2-float3(1,1,1));.f3Norm.xy = f3Norm1.xy + f3Norm2.xy + f3Norm3.xy;.f3Norm.z = f3Norm1.z*f3Norm2.z*f3Norm3.z;.f3Norm.xy *=   (u_f4AnimFx[0].y/10.0) * float2(0.0,1.0);.f3Norm = normalize(f3Norm);.return f3Norm;.}.#endif./****************************************.*.Pixel output.******************************************/.struct SPixelOutput.{.float4 ..m_f4Color:COLOR0;.#ifdef TEST_GRASS.float..m_fDepth:DEPTH;.#endif.#ifdef internRenderDoF.float4..m_f4DoFColor:COLOR1;.#endif.};./* Global */./*************************************************.*.*..Main Function for Pixel Shader.*.**************************************************/.SPixelOutput .PixelShaderMain(SPixelInput  a_In).{.SPixelOutput...psout;.#ifdef internRenderDoF.psout.m_f4DoFColor = 0.0f;.#endif.#ifdef TEST_GRASS.float fDepth;.BillboardGrass_PS( a_In.m_f4Color,a_In.m_f4basetex.xy, -normalize( a_In.m_f3ViewTS ),a_In.m_f4ViewProjPos,.psout.m_f4Color,fDepth);.psout.m_fDepth = fDepth;.#elif defined (internCopyToAlpha).psout.m_f4Color = CopyToAlpha( a_In.m_f4basetex.xy );.#elif defined( internGaussianBlur5x5 ).psout.m_f4Color = GaussBlur5x5PS( a_In.m_f4basetex.xy );.#elif defined( internPostRenderDoF ).psout.m_f4Color = a_In.m_f4Color*PoissonDOFFilterPS( a_In.m_f4basetex.xy );.#elif defined( internDownScale4x4 ).psout.m_f4Color = a_In.m_f4Color*DownScale4x4PS( a_In.m_f4basetex.xy );.#else.float4.....f4PixelColor=float4(1,1,1,1);.float4.....f4VertexColor=float4(1,1,1,1);.float.....fCtrlColor = 1;.#ifdef internColor0.f4VertexColor = a_In.m_f4Color;.#endif.#ifdef internUseBaseTex.float2...f2Basetex = a_In.m_f4basetex.xy;.#endif.#ifdef internOutputViewLS.float3 f3ViewLS   = normalize( a_In.m_f3ViewLS  );.#endif.#ifdef internOutputNormal.float3 f3NormalLS = normalize( a_In.m_f3NormalLS );.#endif.#ifdef internNormalMap.float4..f4NormalVector = GetNormalTextureVector(f2Basetex);.float3..f3NormalTS = GetNormalFromTextureVector(f4NormalVector);.#ifdef internWaterAnimation.f3NormalTS = GetWaterNormal(f2Basetex);.#endif.#ifdef internControlMap.fCtrlColor = f4NormalVector.w;.#endif.#else.#ifdef internControlMap.fCtrlColor = sampler_ctrltex.w;.#endif.#endif.#ifdef internOutputTangentMatrix.float3x3 f33TransformTS = float3x3( normalize(a_In.m_f3TangentLS), normalize(a_In.m_f3BinormalLS), f3NormalLS);.PreComputeAllLight(.a_In,f33TransformTS );.#ifdef internOutputViewTS.float3 f3ViewTS;.TangentSpaceTransform(f3ViewTS,f3ViewLS,f33TransformTS);.#endif.#else.PreComputeAllLight(.a_In );.#ifdef internOutputViewTS.float3 f3ViewTS;.#if defined(internShadowEnable) && !defined(internRenderFarTex).f3ViewTS   = normalize( a_In.m_f4ViewTS.xyz  );.#else.f3ViewTS   = normalize( a_In.m_f3ViewTS  );.#endif.#endif.#endif.#ifdef internParallaxOffset.float2 f2ParallaxOffsetTS = a_In.m_f2ParallaxOffsetTS;..float .fShadowCoef = 1.0f;.GetParallaxOffset(f2Basetex,f3NormalLS,f3ViewLS,f2ParallaxOffsetTS,fShadowCoef,a_In);.#endif.float4..f4PtLight = float4(0,0,0,0);.float4..f4Light=float4(1,1,1,1);.#ifdef internPixelLight.#ifdef internVertexColor.f4VertexColor.xyzw *=  u_f4PixelMaterialColor.xyzw;.#else.f4VertexColor.xyzw =  u_f4PixelMaterialColor.xyzw;.#endif.#ifdef internNormalMap.float3 f3NormTmp = f3NormalTS;.#else.float3 f3NormTmp = f3NormalLS;.#endif .float4..f4Diffuse = float4(0,0,0,0);.ComputeDiffuse(f4Diffuse,f3NormTmp);.#ifndef internVertexColor.f4Light.. = saturate(.u_f4PixelAmbientColor.+ f4Diffuse);.#else.f4Light = float4(1,1,1,1);.#endif.ComputeDiffuseFromPointLight(f4PtLight,f3NormTmp.#ifdef internUseBaseTex.,f2Basetex.#endif.#ifdef internOutputPointLight.#ifdef internUseTangentMatrix.,a_In.m_f4PositionLS.#endif.#endif.);.#ifdef internSpecular.float4 f4Spec = float4(0,0,0,0);.#ifdef internOutputViewTS.float3 f3View = f3ViewTS;.#else.float3 f3View = f3ViewLS;.#endif .f4Spec = ComputeSpecular(f3View,f3NormTmp);.f4Spec += ComputeSpecularFromPointLight(f3View,f3NormTmp);.f4Spec = u_f4SpecularColor*f4Spec*u_f4Specular.x;.#endif.#else.f4Light = float4(1.0f,1.0f,1.0f,1.0f);.f4PtLight = float4(0.0f,0.0f,0.0f,0.0f);.#endif .psout.m_f4Color.xyz = f4Light.xyz;.psout.m_f4Color.w = f4VertexColor.w;.#ifdef internNormalMap.#ifdef _Compact_test.ComputeNormalInfluence(psout.m_f4Color,f3NormalTS);.#else.#ifdef internUseNormalInfluence.ComputeNormalInfluence(psout.m_f4Color,f3NormalTS);.#endif.#endif.#endif .psout.m_f4Color.w = f4VertexColor.w;.#ifdef internUseSecondTex.float4 f4ColorTex1;.float4 f4ColorTex2;.f4ColorTex1 = tex2D(DiffuseMap,f2Basetex);.f4ColorTex2 = tex2D(sampler_secondtex,a_In.m_f4secondtex.xy);.#if defined (internSecondTexAdditif).f4ColorTex1 *= psout.m_f4Color;.f4ColorTex2 *= psout.m_f4Color;.float ftest = /*saturate*/(f4ColorTex2.w/f4ColorTex1.w);...psout.m_f4Color = f4ColorTex1 + (ftest)*f4ColorTex2;.psout.m_f4Color.w = (f4ColorTex1.w);.#else.psout.m_f4Color *= ((1-f4ColorTex2.w)*f4ColorTex1 + f4ColorTex2.w*f4ColorTex2);.#endif.#elif defined( internUseBaseTex ).#ifdef internDontModulateAlphaTexture.psout.m_f4Color.xyz *= tex2D(DiffuseMap,f2Basetex).xyz;.#else.psout.m_f4Color *= tex2D(DiffuseMap,f2Basetex);.#endif.#endif.float3 f3AddColor = float3(0,0,0);.#ifdef internPixelLight.#ifdef internSpecular.f3AddColor += fCtrlColor*f4Spec.xyz;.#endif.#endif .#ifdef internOutputEnvmap.float2..f2txCoor=0;.float4..f4EnvColor=float4(0.f,0.f,0.f,0.f);.#ifdef internNormalMap.#if defined( internOutputViewTS ) && defined(internLocalEnvMap).GetLocalEnvTexCoord(f2txCoor,f3NormalTS,f3ViewTS);.#else.GetCameraEnvTexCoord(f2txCoor,f3NormalTS,f3ViewTS,a_In.m_f3EnvmapCoef);.#endif.#endif.#ifdef internFirstEnvmap.f4EnvColor = u_f4PixelMatFx.x*fCtrlColor*tex2D(EnvMap1,f2txCoor);.#endif.#ifdef _Compact_test.psout.m_f4Color.w -=  u_f4NormalParam.w*tex2D(EnvMap1,f2txCoor).w;.#else.#ifdef internEnvAlphaSubstract.psout.m_f4Color.w -=  tex2D(EnvMap1,f2txCoor).w;.#endif.#endif.#ifdef internDualEnvmap.f4EnvColor += u_f4PixelMatFx.y*(1.0f-fCtrlColor)*tex2D(EnvMap2,f2txCoor);.#endif.f3AddColor += f4EnvColor.xyz;.#elif defined( internEnvmap).f3AddColor += fCtrlColor*u_f4PixelMatFx.x*tex2D(EnvMap1,a_In.m_f2EnvmapTexture).xyz;.#ifdef _Compact_test.psout.m_f4Color.w -=  u_f4NormalParam.w*tex2D(EnvMap1,a_In.m_f2EnvmapTexture).w;.#else.#ifdef internEnvAlphaSubstract.psout.m_f4Color.w -=  tex2D(EnvMap1,a_In.m_f2EnvmapTexture).w;.#endif.#endif.#endif.float fLuminance = 0;.#ifdef _Compact_test.fLuminance = ComputeLuminance(f4VertexColor.xyz);.psout.m_f4Color.xyz = f4VertexColor.xyz*psout.m_f4Color.xyz ;.psout.m_f4Color.xyz += f3AddColor*(fLuminance*u_f4NormalParam.y + u_f4NormalParam.z);.#else.#.ifdef internModulateVertexColorFirst.fLuminance = ComputeLuminance(f4VertexColor.xyz);.psout.m_f4Color.xyz = f4VertexColor.xyz*psout.m_f4Color.xyz + f3AddColor*fLuminance;.#.else.psout.m_f4Color.xyz =   f4VertexColor.xyz*psout.m_f4Color.xyz + f3AddColor;.#.endif.#endif.#ifdef internPixelLight.#if internPointLightNb>0.psout.m_f4Color.xyz +=  f4PtLight.xyz;.#endif.#endif.#ifdef internParallaxOffset.psout.m_f4Color.xyz *= fShadowCoef;.#endif.#ifdef internRenderDoF.psout.m_f4DoFColor.xyz = ComputeDepthBlur( a_In.m_fDof );.psout.m_f4DoFColor.w = psout.m_f4Color.w;.#endif.#endif .#ifdef debugShaders.#ifndef externBasicShader.#ifdef debugShaders.#ifdef internVertexColor.#endif.#ifdef internNormalMap.#ifdef internPixelLight.#ifdef internSpecular.#endif.#endif .#endif.#ifdef internBloom.psout.m_f4Color = BloomPS(f2Basetex,a_In.m_f4Color);.#endif./*#ifdef internUseBaseTex.psout.m_f4Color = tex2D(DiffuseMap, a_In.m_f4basetex.xy);.#endif*/./*#ifdef internUseSecondTex.psout.m_f4Color = tex2D(sampler_secondtex, a_In.m_f4basetex.xy);.#endif*/.#endif.#endif .#endif.#ifdef internShadowEnable.float2 f2ShadCoords = a_In.m_f4basetex.zw;.float4..f4ShadowSampler = tex2D(ShadowSampler,f2ShadCoords);.float fHeight;.#ifdef internRenderFarTex.fHeight = a_In.m_f4FarTexHeight.w;.#else.#ifdef internOutputViewTS.fHeight = a_In.m_f4ViewTS.w;.#else.fHeight = a_In.m_fHeight;.#endif.#endif.float fMaxHeight = f4ShadowSampler.w;.fMaxHeight = fMaxHeight*(u_f3MinMaxShadow.y - u_f3MinMaxShadow.x)+ u_f3MinMaxShadow.x;.fMaxHeight += u_f3MinMaxShadow.z;.float fShadeShadow =   (fMaxHeight - fHeight) /u_f3MinMaxShadow.z;.fShadeShadow = clamp(fShadeShadow,0.0,1.0);.psout.m_f4Color.xyz *= (1.0 - fShadeShadow) * float3(1.0,1.0,1.0) +  fShadeShadow*f4ShadowSampler.xyz;.#endif.{.float4 f4Fog = tex2D(FogTexture,float2( a_In.m_fFogCoef , 0) );.AddFogColor(psout.m_f4Color , f4Fog.w , f4Fog.xyz);.}.#ifdef internUseBaseTex.#ifdef internRenderFarTex.float m_fRatio  = ( u_f2FarCameraAndTolerance.x - a_In.m_f4FarTexHeight.z ) / u_f2FarCameraAndTolerance.y;.m_fRatio = clamp(m_fRatio,0.0,1.0);.psout.m_f4Color.xyz = m_fRatio * psout.m_f4Color.xyz + (1.0 - m_fRatio)*tex2D(BackgroundRenderedTexture,a_In.m_f4FarTexHeight.xy).xyz;.#endif.#endif.return .psout;.}.#else .float4 .PixelShaderMain() : COLOR0.{.float4...f4Color = {0,0,0,1};.return f4Color;.}.#endif ..#pragma pack_matrix (row_major).#ifndef _shaderdefine_file_.#define _shaderdefine_file_.#ifdef CGFX_FOR_MAYA.#pragma once.#endif./*.*.internal global.*/.#ifndef externTransform..#error "externTransform undefined".#endif.#ifndef externWeightNb..#error "externWeightNb undefined".#endif.#ifndef externDirLight.#error "externDirLight undefined".#endif.#ifndef externTexCoordNb..#error "externTexCoordNb undefined".#endif.#ifndef externVertexColor..#error "externVertexColor undefined".#endif./*.#ifndef externModulateMaterial..#error "externModulateMaterial undefined".#endif.*/.#ifndef externFogType..#error "externFogType undefined".#endif.#if externDirLight>4..#error "Too much directional light!! 4 is the maximum".#endif.#if externFirstPass==0.#define internNoVertexColorButAlpha.#endif.#define internSpecialLightNb externSpecialLight.#define internTransform.#if defined (externX360) || defined (externPS3).#define internMatrixIndices.#endif.#define internSwapNormalColor.#if externWeightNb>0.#define internUseNormal.#if externWeightNb==1.#define internWeightNb 1.#elif externWeightNb==2.#define internWeightNb  2.#elif externWeightNb==3.#define internWeightNb 3.#elif externWeightNb==4.#define internWeightNb 4.#endif.#endif.#if externDirLight>0.#define internLightning.#define internUseNormal.#if externDirLight==1.#define internDirLightNb 1.#elif externDirLight==2.#define internDirLightNb 2.#elif externDirLight==3.#define internDirLightNb 3.#elif externDirLight==4.#define internDirLightNb 4.#else.#define internDirLightNb 0.#endif.#else.#define internDirLightNb 0.#endif .#if externPointLight>0.#define internLightning.#define internUseNormal.#if (externPointLight==1).#define internPointLightNb 1.#elif (externPointLight==2).#define internPointLightNb 2.#elif (externPointLight==3).#define internPointLightNb 3.#elif (externPointLight==4).#define internPointLightNb 4.#else.#define internPointLightNb 0.#endif.#else.#define internPointLightNb 0.#endif.#ifdef internLightning.#define internLightNb.(internPointLightNb+internDirLightNb).#else.#define internLightNb.0.#endif.#if externFogType > 0.#if externFogType==1.#define internFogType 1.#elif externFogType==2.#define internFogType 2.#elif externFogType==3.#define internFogType 3.#endif.#endif.#if externTexCoordNb>0.#define internUseBaseTex.#define useTexCoord0.#endif.#if externTexCoordNb>1.#error "cas à gérer".#endif.#ifdef externControlMap.#define internControlMap.#endif.#undef externControlMap.#ifdef externMATERIALFX_ENV.#ifdef internUseBaseTex.#define internUseNormal.#define internEnvmap.#define internViewPos.#endif.#endif.#undef externMATERIALFX_ENV.#ifdef externMATERIALFX_UVTRANSFORM.#ifdef internUseBaseTex.#define internUVTransformbasetex.#endif.#endif.#undef externMATERIALFX_UVTRANSFORM.#ifdef externMATERIALFX_DUALUVTRANSFORM.#ifdef internUseBaseTex.#define internUVTransformbasetex.#define internOutpuSecondTexCoor.#define internUVTransformSecondTex.#define internUseSecondTex.#if defined (externDualAlphaBlend).#define .internSecondTexAdditif.#endif.#endif.#endif.#undef externMATERIALFX_DUALUVTRANSFORM.#ifdef externMATERIALFX_NORMAL.#ifdef internUseBaseTex.#define internNormalMap.#define internUseNormal.#define internUseTangent.#define internUseTangentMatrix.#define internPixelLight.#if internDirLightNb>0.#define internOutputLight.#endif.#if internSpecialLightNb>0.#define internOutputSpecialLight.#endif.#if internPointLightNb>0.#define internOutputPointLight.#endif.#define internControlMap.#define internViewPos.#define internOutputViewTS.#define internOutputEnvmap.#define internFirstEnvmap.#define internViewPos.#define internOutputViewTS.#define internDualEnvmap.#define internOutputEnvmap.#endif.#if defined( externUseEnvMap) && defined(externUseNormalMap).#endif.#endif.#undef externMATERIALFX_NORMAL.#if defined(internNormalMap).#endif.#ifdef externMATERIALFXNORMANIM.#ifdef internUseBaseTex.#define internWaterAnimation.#define internNormalMap.#define internUseNormal.#define internUseTangent.#define internUseTangentMatrix.#define internPixelLight.#if internDirLightNb>0.#define internOutputLight.#endif.#if internSpecialLightNb>0.#define internOutputSpecialLight.#endif.#if internPointLightNb>0.#define internOutputPointLight.#endif.#define internControlMap.#define internViewPos.#define internOutputViewTS.#define internOutputEnvmap.#define internFirstEnvmap.#endif.#endif.#ifdef externMATERIALFX_POM.#ifdef internUseBaseTex.#define internParallaxOffset.#define internNormalMap.#define internUseTangent.#define internUseTangentMatrix.#define internUseNormal.#define internOutputViewLS.#define internViewPos.#define internOutputNormal.#define internPixelLight.#if internDirLightNb>0.#define internOutputLight.#endif.#if internPointLightNb>0.#define internOutputPointLight.#endif.#if internSpecialLightNb>0.#define internOutputSpecialLight.#endif.#endif.#endif.#undef externMATERIALFX_POM.#ifdef externLocalEnvMap.#define internLocalEnvMap.#endif.#ifdef externRenderFarTex.#ifdef internUseBaseTex.#define internRenderFarTex.#endif.#endif.#ifdef externShadowEnable.#ifdef internUseBaseTex.#define internShadowEnable.#endif.#endif.#ifdef externPixelLightning.#ifdef internUseNormal.#define internPixelLight.#endif.#endif.#if defined(internNormalMap).#ifdef internOutputTangentMatrix.#define internOutputNormal.#define internOutputViewLS.#endif.#endif.#ifdef externSpecular.#if defined(internNormalMap) || (defined(internPixelLight) && internLightNb>0.).#define internSpecular.#define internViewPos.#define internUseNormal.#define internUseTangent.#if defined(internNormalMap) /*&& !defined(internOutputEnvmap)*/.#define internOutputViewTS.#else.#define internOutputNormal.#define internOutputViewLS.#endif.#endif.#endif .#ifdef externRenderDepthOfField.#define internRenderDoF.#endif.#undef externRenderDepthOfField.#ifdef externPostRenderDepthOfField.#define internPostRenderDoF.#endif.#undef externPostRenderDepthOfField.#ifdef externGaussianBlur5x5.#define internGaussianBlur5x5.#endif.#undef externGaussianBlur5x5.#ifdef externDOFCopyAlpha.#define internCopyToAlpha.#endif.#undef externDOFCopyAlpha.#ifdef externDownSample4x4.#define internDownScale4x4.#endif.#undef externDownSample4x4.#ifdef externDownSample16x16.#define internDownScale16x16.#endif.#undef externDownSample16x16.#ifdef externBloom.#define internBloom.#endif.#undef externBloom.#ifdef externDontModulateAlphaTexture.#define internDontModulateAlphaTexture.#endif.#undef externDontModulateAlphaTexture./* we use envmap to substract alpha*/.#ifdef externEnvSubstractAlpha.#define internEnvAlphaSubstract.#endif.#undef externEnvSubstractAlpha.#ifdef externUseNormalInfluence.#define internUseNormalInfluence.#endif.#undef externUseNormalInfluence./***************************/./*   Semantic for TEXCOORD */./***************************/.#define TEXCOORDBaseTex .TEXCOORD0.#define useTexCoord0.#ifdef internOutpuSecondTexCoor.#define TEXCOORDSecondTexCoor.TEXCOORD1.#define useTexCoord1.#elif defined( internOutputEnvmap ).#define TEXCOORDEnv.TEXCOORD1.#define useTexCoord1.#elif defined( internEnvmap).#define TEXCOORDEnv.TEXCOORD1.#define useTexCoord1.#endif.#ifdef internOutputNormal.#if defined( useTexCoord1).#define TEXCOORDNormalLS.TEXCOORD2.#define useTexCoord2.#else.#define TEXCOORDNormalLS.TEXCOORD1.#define useTexCoord1.#endif.#endif .#ifdef internOutputViewLS.#if defined(useTexCoord2).#define TEXCOORDviewLS.TEXCOORD3.#define useTexCoord3.#elif defined(useTexCoord1).#define TEXCOORDviewLS.TEXCOORD2.#define useTexCoord2.#else.#define TEXCOORDviewTS.TEXCOORD1.#define useTexCoord1.#endif.#endif .#ifdef internParallaxOffset.#if defined(useTexCoord3).#define TEXCOORDParallaxTS.TEXCOORD4.#define useTexCoord4.#elif defined(useTexCoord2).#define TEXCOORDParallaxTS.TEXCOORD3.#define useTexCoord3.#elif defined(useTexCoord1).#define TEXCOORDParallaxTS.TEXCOORD2.#define useTexCoord2.#else.#define TEXCOORDParallaxTS.TEXCOORD1.#define useTexCoord1.#endif.#endif .#if  defined(internRenderFarTex) || defined(internRenderDoF).#if defined(useTexCoord4).#define TEXCOORDBkg TEXCOORD5.#define useTexCoord5.#elif defined(useTexCoord3).#define TEXCOORDBkg TEXCOORD4.#define useTexCoord4.#elif defined(useTexCoord2).#define TEXCOORDBkg TEXCOORD3.#define useTexCoord3.#elif defined(useTexCoord1).#define TEXCOORDBkg TEXCOORD2.#define useTexCoord2.#else.#define TEXCOORDBkg TEXCOORD1.#define useTexCoord1.#endif.#endif .#ifdef internOutputTangentMatrix.#ifdef useTexCoord5.#define TEXCOORDTangentLS TEXCOORD6.#define TEXCOORDBinormalLS TEXCOORD7.#define useTexCoord6.#define useTexCoord7.#elif defined( useTexCoord4).#define TEXCOORDTangentLS TEXCOORD5.#define TEXCOORDBinormalLS TEXCOORD6.#define useTexCoord5.#define useTexCoord6.#elif defined( useTexCoord3).#define TEXCOORDTangentLS TEXCOORD4.#define TEXCOORDBinormalLS TEXCOORD5.#define useTexCoord4.#define useTexCoord5.#elif defined( useTexCoord2).#define TEXCOORDTangentLS TEXCOORD3.#define TEXCOORDBinormalLS TEXCOORD4.#define useTexCoord3.#define useTexCoord4.#elif defined( useTexCoord1).#define TEXCOORDTangentLS TEXCOORD2.#define TEXCOORDBinormalLS TEXCOORD3.#define useTexCoord2.#define useTexCoord3.#endif.#else .#ifdef internOutputViewTS.#ifdef useTexCoord5.#define TEXCOORDviewTS.TEXCOORD6.#define useTexCoord6.#elif defined(useTexCoord4).#define TEXCOORDviewTS.TEXCOORD5.#define useTexCoord5.#elif defined(useTexCoord3).#define TEXCOORDviewTS.TEXCOORD4.#define useTexCoord4.#elif defined(useTexCoord2).#define TEXCOORDviewTS.TEXCOORD3.#define useTexCoord3.#else.#define TEXCOORDviewTS.TEXCOORD2.#define useTexCoord2.#endif.#endif .#if defined( internOutputLight) || defined( internOutputPointLight).#if internLightNb>0.#ifdef useTexCoord6.#define TEXCOORDLight1 TEXCOORD7.#define useTexCoord7.#elif defined( useTexCoord5).#define TEXCOORDLight1 TEXCOORD6.#define useTexCoord6.#elif defined(useTexCoord4).#define TEXCOORDLight1 TEXCOORD5.#define useTexCoord5.#elif defined(useTexCoord3).#define TEXCOORDLight1 TEXCOORD4.#define useTexCoord4.#elif defined(useTexCoord2).#define TEXCOORDLight1 TEXCOORD3.#define useTexCoord3.#elif defined(useTexCoord1).#define TEXCOORDLight1 TEXCOORD2.#define useTexCoord2.#else.#define TEXCOORDLight1 TEXCOORD1.#define useTexCoord1.#endif .#endif.#if internLightNb>1.#ifdef useTexCoord7.#ifdef internOutputViewTS.#error "il y a des lampe en trop car on output la vue TS".#endif.#error "il y a des lampe en trop".#elif defined( useTexCoord6).#define useTexCoord7.#elif defined( useTexCoord5).#define useTexCoord6.#elif defined(useTexCoord4).#define useTexCoord5.#elif defined(useTexCoord3).#define useTexCoord4.#elif defined(useTexCoord2).#define useTexCoord3.#elif defined(useTexCoord1).#define useTexCoord2.#else.#define useTexCoord1.#endif .#endif.#if internLightNb>2.#ifdef useTexCoord7.#error "il y a des lampe en trop".#elif defined( useTexCoord6).#define useTexCoord7.#elif defined( useTexCoord5).#define useTexCoord6.#elif defined(useTexCoord4).#define useTexCoord5.#elif defined(useTexCoord3).#define useTexCoord4.#elif defined(useTexCoord2).#define useTexCoord3.#elif defined(useTexCoord1).#define useTexCoord2.#else.#define useTexCoord1.#endif .#endif.#if internLightNb>3.#ifdef useTexCoord7.#error "il y a des lampe en trop".#elif defined( useTexCoord6).#define useTexCoord7.#elif defined( useTexCoord5).#define useTexCoord6.#elif defined(useTexCoord4).#define useTexCoord5.#elif defined(useTexCoord3).#define useTexCoord4.#elif defined(useTexCoord2).#define useTexCoord3.#elif defined(useTexCoord1).#define useTexCoord2.#else.#define useTexCoord1.#endif .#endif.#if internLightNb>4.#ifdef useTexCoord7.#error "il y a des lampe en trop".#elif defined( useTexCoord6).#define useTexCoord7.#elif defined( useTexCoord5).#define useTexCoord6.#elif defined(useTexCoord4).#define useTexCoord5.#elif defined(useTexCoord3).#define useTexCoord4.#elif defined(useTexCoord2).#define useTexCoord3.#elif defined(useTexCoord1).#define useTexCoord2.#else.#define useTexCoord1.#endif .#endif.#endif .#if defined( internOutputSpecialLight).#if externSpecialLight>0.#ifdef useTexCoord7.#error "il y a des lampe en trop".#elif defined( useTexCoord6).#define TEXCOORDSpeLight1 TEXCOORD7.#define useTexCoord7.#elif defined(useTexCoord5).#define TEXCOORDSpeLight1 TEXCOORD6.#define useTexCoord6.#elif defined(useTexCoord4).#define TEXCOORDSpeLight1 TEXCOORD5.#define useTexCoord5.#elif defined(useTexCoord3).#define TEXCOORDSpeLight1 TEXCOORD4.#define useTexCoord4.#elif defined(useTexCoord2).#define TEXCOORDSpeLight1 TEXCOORD3.#define useTexCoord3.#elif defined(useTexCoord1).#define TEXCOORDSpeLight1 TEXCOORD2.#define useTexCoord2.#else.#define TEXCOORDSpeLight1 TEXCOORD1.#define useTexCoord1.#endif.#endif./*.#if externSpecialLight>1.#ifdef useTexCoord7.#ifdef internOutputViewTS.#error "il y a des lampe en trop car on output la vue TS".#endif.#error "il y a des lampe en trop".#elif defined( useTexCoord6).#define useTexCoord7.#elif defined( useTexCoord5).#define useTexCoord6.#elif defined(useTexCoord4).#define useTexCoord5.#elif defined(useTexCoord3).#define useTexCoord4.#elif defined(useTexCoord2).#define useTexCoord3.#elif defined(useTexCoord1).#define useTexCoord2.#else.#define useTexCoord1.#endif.#endif.*/.#endif .#ifdef internUseShadFarTexCoords.#ifdef useTexCoord7.#error "Pas de texcoord pour le shadowing & fondu bkg".#elif defined(useTexCoord6).#define TEXCOORDShadAndFar TEXCOORD7.#define useTexCoord7.#elif defined(useTexCoord5).#define TEXCOORDShadAndFar TEXCOORD6.#define useTexCoord6.#elif defined(useTexCoord4).#define TEXCOORDShadAndFar TEXCOORD5.#define useTexCoord5.#elif defined(useTexCoord3).#define TEXCOORDShadAndFar TEXCOORD4.#define useTexCoord4.#elif defined(useTexCoord2).#define TEXCOORDShadAndFar TEXCOORD3.#define useTexCoord3.#elif defined(useTexCoord1).#define TEXCOORDShadAndFar TEXCOORD2.#define useTexCoord2.#else.#define TEXCOORDShadAndFar TEXCOORD1.#define useTexCoord1.#endif.#endif.#endif .#if externVertexColor> 0.#define internVertexColor.#endif.#if defined(internVertexColor) || !defined(internPixelLight).#define internColor0.#endif./* To change calculation of influence of prelit.light equation change from prelit+diffus+ambient to prelit*(diffus+ambient)*/.#ifdef  externVertexColorMultiplied.#define internMultiplyPrelit.#endif.#if externWeightNb>0.#define internSkinning.#if externWeightNb>1.#define internBlendWeight.#endif.#endif.#ifdef internUseTangentMatrix.#if defined(internOutputViewTS) ||  defined(internParallaxOffset).#define internUseViewTS.#endif.#endif .#if defined( internNormalMap ) && defined(internUseViewTS).#endif.#ifdef externModulateVertexColorFirst.#define internModulateVertexColorFirst.#endif.#ifdef externPS3.#define POINTLIGHTPOS TEXCOORD8.#else.#define POINTLIGHTPOS POSITION1.#endif.#ifdef externPS3.#define internPS3.#endif.#undef externVertexColorMultiplied.#undef externTransform.#undef externWeightNb.#undef externDirLight.#undef externTexCoordNb.#undef externVertexColor.#undef externFogType.#undef externDirLight.#undef externPixelLightning.#undef externModulateVertexColorFirst.#undef externRenderFarTex.#endif .#define _Compact_test.#define DeclareUniform(x_enum, x_type, x_name, x_register,  x_constantCount).\.uniform..x_type.x_name : register(c##x_register);.#define DeclareUniformArray(x_enum, x_type,.x_varname,x_arraysize, x_register,.x_numregister) \.DeclareUniform(x_enum, x_type,.x_varname[x_arraysize], x_register,.x_numregister).#define DeclareUniformArrayRowMaj(x_enum, x_type,.x_varname,x_arraysize, x_register,.x_numregister, x_rowmaj) \.uniform..x_rowmaj x_type.x_varname[x_arraysize] : register(c##x_register);./* declaration des constantes flottantes */./**********************************************************************************************************/./*.EnumName,.type,.shader prefixe, .nom,..numero de registre,..nombre de registre occupé */./**********************************************************************************************************/.DeclareUniform(VSC_FOG, float4,..u_f4Fog,.0,..1).DeclareUniform(VSC_WORLDVIEWPROJ, float4x4,..u_f44WorldViewProj,..1,....4).DeclareUniform(VSC_AMBIENT_COLOR, float4,..u_f4AmbientColor,.5,....1).DeclareUniform(VSC_MATERIAL_COLOR, float4,..u_f4MaterialColor,.6,....1).DeclareUniformArray(VSC_DIR_LIGHT_DIR, float4,..u_f4DirLight,...4,..7,....4).DeclareUniformArray(VSC_DIR_LIGHT_COLOR, float4,..u_f4DirLightColor,.4,..11,....4).DeclareUniformArray(VSC_POINT_LIGHT_POS, float4,..u_f4PointLight,...4,..15,....4).DeclareUniformArray(VSC_POINT_LIGHT_COLOR, float4,..u_f4PointLightColor,.4,..19,....4).DeclareUniformArray(VSC_UVTRANSF, float4,.u_f4UvAnimMatrix, 2,...23,...2).DeclareUniform(VSC_VIEW_POMHEIGHT, float4,.u_fViewPomH,.....25,...1).DeclareUniform(VSC_SPECULAR, float4,..u_f4Specular,...26,....1).DeclareUniformArray(VSC_DUALUVTRANSF, float4,.u_f4SecondUvAnimMatrix, 2,...27,...2).DeclareUniform(VSC_SPECIAL_LIGHT, float4,..u_f4SpecialLightDir,.29,....1).DeclareUniform(VSC_WORLD_VIEWMATRIX, float4x4,..u_f44WorldView,...30,....4).DeclareUniform(VSC_WORLD_MATRIX, float4x4,..u_f44World,...34,....4).DeclareUniform(VSC_INFOQUAD_SHADOW, float4,..u_f4InfoQuadShadow,...38,....1).DeclareUniform(VSC_BONES_WEIGHT, float4,..u_f4BoneWeight,...39,....1).DeclareUniformArrayRowMaj(VSC_BONE_MATRICES, float3x4,.u_f34BoneMatrix, 70,.40,....210, row_major)./**********************************************************************************************************/./*.EnumName,.type,.shader prefixe, nom,.N° registre,..nb registre occupé */./**********************************************************************************************************/.#undef DeclareUniform.#undef DeclareUniformArray.#undef DeclareUniformArrayRowMaj.#define DeclareUniform(x_enum, x_type, x_name, x_register,  x_constantCount).\.uniform..x_type.x_name : register(b##x_register);./* declaration des constantes booleennes */./**********************************************************************************************************/./*.EnumName,.type,.shader prefixe, .nom,..numero de registre,..nombre de registre occupé */./**********************************************************************************************************/.DeclareUniform(VSCB_MOD_VTX, bool,..u_bModulateVertex,..0,....1)./**********************************************************************************************************/./*.EnumName,.type,.shader prefixe, nom,.N° registre,..nb registre occupé */./**********************************************************************************************************/.#undef DeclareUniform.#ifndef externBasicShader./*.*..includes.*/.#define internVertexOutput.#ifndef _commonshadertools_file_.#define _commonshadertools_file_.#ifdef CGFX_FOR_MAYA.#pragma once.#endif.void GetLocalEnvTexCoord(out float2 a_of2EnvmapTexture,float3 a_f3Normal, float3 a_f3View).{.float3 f3Reflect = reflect(a_f3View,a_f3Normal);.a_of2EnvmapTexture.x = -f3Reflect.x*0.5f - 0.5f;.a_of2EnvmapTexture.y = -f3Reflect.y*0.5f - 0.5f;.}.void GetRwCameraEnvTexCoord(out float2 a_of2EnvmapTexture,float3 a_f3NormalLS, in float3 a_f3CameraEnv1, in float3 a_f3CameraEnv2).{.a_of2EnvmapTexture.x = dot(a_f3NormalLS, a_f3CameraEnv1) + 0.5f;.a_of2EnvmapTexture.y = dot(a_f3NormalLS, a_f3CameraEnv2) + 0.5f;.}.void GetCameraEnvTexCoord(out float2 a_of2txCoor,in float3 a_f3Normal,in float3 a_f3View,in float3 a_f3EnvmapCoef1).{.float3..f3Right = normalize(a_f3EnvmapCoef1);.float3..f3View = normalize(a_f3View);.float3..f3newUp = cross(f3View,f3Right);.float3..f3newRight = cross(f3newUp,f3View);.f3newRight = normalize(f3newRight);.f3newUp = normalize(f3newUp);.float3..f3NormVS = (a_f3Normal);.float..fRdot = dot(f3NormVS,f3newRight);.float..fUdot = dot(f3NormVS,f3newUp);..a_of2txCoor.x = (0.5f*fRdot*abs(fRdot) + 0.5f);..a_of2txCoor.y = (0.5f*fUdot*abs(fUdot) + 0.5f);.}.void GetCameraEnvTexCoordLS(out float2 a_of2txCoor,in float3 a_f3Normal,in float3 a_f3View,in float3 a_f3EnvmapCoef1).{.float3..f3Right = normalize(a_f3EnvmapCoef1);.float3..f3View = normalize(a_f3View);.float3..f3newUp = cross(f3View,f3Right);.float3..f3newRight = cross(f3newUp,f3View);.f3newRight = normalize(f3newRight);.f3newUp = normalize(f3newUp);.float3..f3NormVS = a_f3Normal;.float..fRdot = dot(f3NormVS,f3newRight);.float..fUdot = dot(f3NormVS,f3newUp);..a_of2txCoor.x = (0.5f*fRdot*abs(fRdot) + 0.5f);..a_of2txCoor.y = (-0.5f*fUdot*abs(fUdot) + 0.5f);.}.float4 GetDirLightColor(float4 a_f4Color,float3 a_f3Dirlight, float3 a_f3Normal).{.float.fDot = dot(-a_f3Dirlight,a_f3Normal);.return a_f4Color*max(fDot,0);.}.float GetInvertedDirLightColor(float a_fColorCoef,float3 a_f3Dirlight, float3 a_f3Normal).{.float.fDot = dot(-a_f3Dirlight,a_f3Normal);.return a_fColorCoef*min(fDot,0);.}.float4.ModulateLightColor(float4 a_f4Emissive,float4 a_f4diffuse ).{.float4 f4Color = a_f4Emissive;.f4Color.xyz *=a_f4diffuse.xyz;.return f4Color;.}.float4.AddLightColor(float4 a_f4Emissive,float4 a_f4diffuse ).{.float4 f4Color = a_f4Emissive;.f4Color.xyz +=a_f4diffuse.xyz;.return f4Color;.}.float4..GetSpecular(float3.a_f3View, float3 a_f3Normal, float3 a_f3Light,float4 a_f4Color).{.float.fExp.= u_f4Specular.y;.float3 f3Reflection = normalize( 2 * dot( -a_f3Light, a_f3Normal ) * a_f3Normal + a_f3Light );.float fRdotL =  dot( f3Reflection, a_f3View);.if( fRdotL>0 ).{.return a_f4Color*pow(fRdotL,fExp);.}.else.{.return float4(0,0,0,0);.}.}.void .TangentSpaceTransform(out float3 a_of3VectorTS,float3 a_f3VectorLS,float3x3 a_f33TangentToLocal).{.a_of3VectorTS = mul(a_f33TangentToLocal,a_f3VectorLS);.}.float3 .ComputeBinormal(float3 a_f3Normal, float3 a_f3Tangent).{.float3..f3BiNormalLS;.f3BiNormalLS = cross(a_f3Tangent,a_f3Normal);.f3BiNormalLS = normalize(f3BiNormalLS);.return f3BiNormalLS;.}.void .ComputeTangentToLocalMatrix(out float3x3.a_of33TangentToLocal, float3 a_f3NormalLS, float3 a_f3TangentLS).{.float3..f3BiNormalLS;.f3BiNormalLS = ComputeBinormal(a_f3NormalLS, a_f3TangentLS);.a_of33TangentToLocal = float3x3( a_f3TangentLS, f3BiNormalLS, a_f3NormalLS);.}./******************************.* Vertex Output.*******************************/.struct SVertexOutput.{.#ifdef internVertexOutput.float4..m_f4Position:POSITION0;.#endif.#ifdef internOutputPointLight.#ifdef internUseTangentMatrix.float4  m_f4PositionLS:POINTLIGHTPOS;.#endif.#endif.#ifdef TEST_GRASS.#endif.#ifdef internColor0.float4 ..m_f4Color:COLOR0;.#endif.#ifdef internUseBaseTex.float4..m_f4basetex:TEXCOORDBaseTex;.#endif.#ifdef internOutpuSecondTexCoor.float4..m_f4secondtex:TEXCOORDSecondTexCoor;.#endif.#ifdef internOutputViewLS.float3..m_f3ViewLS:TEXCOORDviewLS;.#endif.#ifdef internOutputNormal.float3..m_f3NormalLS:TEXCOORDNormalLS;.#endif.#ifdef internParallaxOffset.float2..m_f2ParallaxOffsetTS:TEXCOORDParallaxTS;.#endif.#ifdef internOutputTangentMatrix.float3.. m_f3TangentLS:TEXCOORDTangentLS;.float3.. m_f3BinormalLS:TEXCOORDBinormalLS;.#else.#if defined(internOutputLight) || defined(internOutputPointLight).float4.. m_af4LightTS[internLightNb]:TEXCOORDLight1;.#endif.#if defined( internOutputSpecialLight ).float4.. m_f4SpecialLightTS:TEXCOORDSpeLight1;.#endif.#ifdef internOutputViewTS.#ifndef internRenderFarTex.#ifdef internShadowEnable.float4..m_f4ViewTS:TEXCOORDviewTS;.#else.float3..m_f3ViewTS:TEXCOORDviewTS;.#endif.#else.float3..m_f3ViewTS:TEXCOORDviewTS;.#endif.#else.#ifndef internRenderFarTex.#ifdef internShadowEnable.float m_fHeight : TEXCOORD7;.#endif.#endif.#endif.#endif .#ifdef internOutputEnvmap.float3..m_f3EnvmapCoef:TEXCOORDEnv;.#elif defined( internEnvmap).float2..m_f2EnvmapTexture:TEXCOORDEnv;.#endif.#if defined(internRenderFarTex) || defined(internRenderDoF).float4.. m_f4FarTexHeight:TEXCOORDBkg;.#endif.float..m_fFogCoef.:FOG;.#ifdef internRenderDoF.float m_fDof : TEXCOORD7;.#endif.};.float.GetAttenuation(in float.a_fMaxDistance,in  float a_fDistance).{.return max(0,( 1 - (a_fDistance*a_fDistance)/(a_fMaxDistance*a_fMaxDistance)));.}.#endif ./*.*..definition of usefull methods for vertex shader.*/.void Transform(float4 a_f4PositionLS, out float4 a_of4PositionLS).{.a_of4PositionLS = mul( u_f44WorldViewProj,a_f4PositionLS);.}.void Transform(float4 a_f4PositionLS,out float4 a_of4PositionLS,.float3 a_f3NormalLS,out float3 a_of3Normal).{.a_of3Normal = mul((float3x3)u_f44WorldViewProj, a_f3NormalLS);.a_of4PositionLS = mul(u_f44WorldViewProj, a_f4PositionLS);.}.void Transform(inout float4 a_f4PositionLS,out float4 a_of4PositionLS,.float4 a_i4Indices.#ifdef internBlendWeight.,float4 .a_f4Weight.#endif.#ifdef internUseNormal..,float3 a_f3NormalLS,out float3 a_of3Normal.#endif.#ifdef internUseTangent.,float3 a_f3TangentLS,out float3 a_of3Tangent.#endif....).{.float4...f4Pos=0.0f;.#ifdef internUseNormal.a_of3Normal = 0.0f;.#endif.#ifdef internUseTangent.a_of3Tangent = 0.0f;.#endif.int numWeights = 0;.#ifdef internWeightNb.numWeights = internWeightNb;.#if internWeightNb>1.numWeights = 4;.#endif.#endif.#ifdef internMatrixIndices.float4..f4Indices .= a_i4Indices;.#else.float4..f4Indices .= a_i4Indices/3.0f;.#endif.int...wi=0;.for (wi = 0; wi < numWeights; wi++).{./* Transform position */.float fweight = u_f4BoneWeight[wi];.#ifdef internBlendWeight.fweight = a_f4Weight[wi]*u_f4BoneWeight[wi];.#endif./*float4x3 f43Temp = (u_f43BoneMatrix[f4Indices[wi]]);.float3 fTempi = mul( a_f4PositionLS, (f43Temp));.f4Pos.xyz += fweight*fTempi;*/./*float3x4 f34Temp = transpose(u_f43BoneMatrix[f4Indices[wi]]);.float3 fTempi = mul(  (f34Temp), a_f4PositionLS);.f4Pos.xyz += fweight*fTempi;*/.float3x4 f34Temp = (u_f34BoneMatrix[f4Indices[wi]]);.float3 fTempi = mul(  (f34Temp), a_f4PositionLS);.f4Pos.xyz += fweight*fTempi;./* Transform normal */.#ifdef internUseNormal.float4 f4normTemp;.f4normTemp.xyz = a_f3NormalLS;.f4normTemp.w = 0.0f;.a_of3Normal += fweight*mul(u_f34BoneMatrix[f4Indices[wi]], f4normTemp);.#endif.#ifdef internUseTangent./* Transform tangent */.float4 f4tangTemp;.f4tangTemp.xyz = a_f3TangentLS;.f4tangTemp.w = 0.0f;.a_of3Tangent += fweight*mul(u_f34BoneMatrix[f4Indices[wi]], f4tangTemp);.#endif.}.f4Pos.w = a_f4PositionLS.w;.a_f4PositionLS = f4Pos;.#ifdef internUseNormal.a_of3Normal = normalize(a_of3Normal);.#endif.#ifdef internUseTangent.a_of3Tangent = normalize(a_of3Tangent);.#endif.a_of4PositionLS = mul(u_f44WorldViewProj, f4Pos);.}.void ComputeVertexSpecular(float3 a_f3ViewLS,float3 a_f3NormalLS, out float4 a_of4Spec).{.a_of4Spec = 0;.#ifdef internDirLightNb.for(int i=0;i<internDirLightNb;i++).{.a_of4Spec += GetSpecular(a_f3ViewLS,a_f3NormalLS,u_f4DirLight[i].xyz,u_f4DirLightColor[i]);.}.#endif .}.void ComputeVertexSpecular(float3 a_f3ViewLS,float3 a_f3NormalLS, float3 a_f3WorldPos,out float4 a_of4Spec).{.a_of4Spec = 0;.#ifdef internDirLightNb.for(int i=0;i<internDirLightNb;i++).{.a_of4Spec += GetSpecular(a_f3ViewLS,a_f3NormalLS,u_f4DirLight[i].xyz,u_f4DirLightColor[i]);.}.#endif .#if internPointLightNb>0..for(i=0;i<internPointLightNb;i++).{.float3 f3DistFromPoint = a_f3WorldPos - u_f4PointLight[i].xyz;.float fAtten = GetAttenuation(u_f4PointLight[i].w,length(f3DistFromPoint));.a_of4Spec +=  fAtten*GetSpecular(a_f3ViewLS,a_f3NormalLS,u_f4PointLight[i].xyz,u_f4PointLightColor[i]);.}.#endif.}.float4 GetVertexLightning(float3 a_f3Normal).{.float4..f4Diffuse = 0;.#ifdef internDirLightNb.for(int i=0;i<internDirLightNb;i++).{.f4Diffuse += GetDirLightColor(u_f4DirLightColor[i], u_f4DirLight[i].xyz, a_f3Normal);.}.#endif.f4Diffuse.xyz += u_f4AmbientColor.xyz;.return f4Diffuse;.}.float4 GetVertexLightning(float3 a_f3VertexColor,float3 a_f3Normal,float3 a_f3WorldPos).{.float4..f4Diffuse = float4(0,0,0,0);.#ifdef internDirLightNb.for(int i=0;i<internDirLightNb;i++).{.f4Diffuse += GetDirLightColor(u_f4DirLightColor[i], u_f4DirLight[i].xyz, a_f3Normal);.}.#endif.#if internPointLightNb>0..for(int i=0;i<internPointLightNb;i++).{.float3 f3DistFromPoint = a_f3WorldPos - u_f4PointLight[i].xyz;.float fAtten = GetAttenuation(u_f4PointLight[i].w,length(f3DistFromPoint));.float fIntensity =  u_f4PointLightColor[i].w;.f4Diffuse.xyz +=fAtten*GetDirLightColor(u_f4PointLightColor[i],f3DistFromPoint, a_f3Normal).xyz * float3(fIntensity,fIntensity,fIntensity);.}.#endif.f4Diffuse.xyz += u_f4AmbientColor.xyz;.return f4Diffuse;.}.float4 .ComputeVertexLightning(float4 a_f4Color).{.#ifdef internPixelLight.return a_f4Color;.#else.#ifdef internVertexColor.....a_f4Color*=u_f4MaterialColor;.#else.a_f4Color=u_f4MaterialColor;.#endif.return a_f4Color;.#endif.}.float4 ComputeVertexLightning(inout float4 a_f4Color,in float3 a_f3Normal).{.#ifdef internPixelLight.return a_f4Color;.#else.float4 f4Diffus = 0;.f4Diffus = GetVertexLightning(a_f3Normal);.a_f4Color.xyz = AddLightColor(a_f4Color,f4Diffus).xyz;.a_f4Color*=u_f4MaterialColor;.return a_f4Color;.#endif.}.float4 ComputeVertexLightning(inout float4 a_f4Color,in float3 a_f3Normal,in float4 a_f4WorldPos).{.#ifdef internPixelLight.return a_f4Color;.#else.float4 f4Diffus = 0;.f4Diffus = GetVertexLightning(a_f4Color.xyz,a_f3Normal,a_f4WorldPos.xyz);.a_f4Color.xyz = AddLightColor(a_f4Color,f4Diffus).xyz;.a_f4Color*=u_f4MaterialColor;.return a_f4Color;.#endif.}.float4 ComputeVertexLightning(float4 a_f4Color,float3 a_f3Normal,float3.a_f3View).{.float4 f4tmp = ComputeVertexLightning(a_f4Color, a_f3Normal);.#ifndef internPixelLight.#ifdef internspecular.float4.f4Spec=0;.ComputeVertexSpecular(a_f3View,a_f3Normal,f4Spec);.f4tmp.xyz += f4Spec.xyz;.#endif.#endif.return f4tmp;.}.float4 ComputeVertexLightning(float4 a_f4Color,float3 a_f3Normal,float3.a_f3View,float4 a_f4WorldPos).{.a_f4Color = ComputeVertexLightning(a_f4Color, a_f3Normal, a_f4WorldPos);.#ifndef internPixelLight.#ifdef internspecular.float4.f4Spec=0;.ComputeVertexSpecular(a_f3View,a_f3Normal,a_f4WorldPos.xyz,f4Spec);.a_f4Color.xyz += f4Spec.xyz;.#endif.#endif.return a_f4Color;.}.void GetRwCameraEnvTexCoord(out float2 a_of2EnvmapTexture,float3 a_f3NormalLS).{.a_of2EnvmapTexture.x = dot(a_f3NormalLS, u_f44WorldView[0].xyz) + 0.5f;.a_of2EnvmapTexture.y = dot(a_f3NormalLS, u_f44WorldView[1].xyz) + 0.5f;.}.void GetUVAnimTransform(out float2 a_of2TexCoord, float2 a_f2basetexcoord).{.float4..f4Textmp = {a_f2basetexcoord.x, a_f2basetexcoord.y,1,1};.a_of2TexCoord.x = dot(f4Textmp, u_f4UvAnimMatrix[0]);.a_of2TexCoord.y = dot(f4Textmp, u_f4UvAnimMatrix[1]);.}.void GetSecondUVAnimTransform(out float2 a_of2TexCoord, float2 a_f2basetexcoord).{.float4..f4Textmp = {a_f2basetexcoord.x, a_f2basetexcoord.y,1,1};.a_of2TexCoord.x = dot(f4Textmp, u_f4SecondUvAnimMatrix[0]);.a_of2TexCoord.y = dot(f4Textmp, u_f4SecondUvAnimMatrix[1]);.}./*.float ComputeLinearFog( float4 a_f4PositionLS).{.float fDistance =  dot( a_f4PositionLS , u_f44WorldViewProj._m30_m31_m32_m33 );.if(fDistance < 0.0).{.fDistance = 0.0;.}.float.fFog;.float fDistanceStart = (1.0 - u_f4Fog.x / 100.0) * u_f4Fog.y;.fFog =  (fDistance - fDistanceStart ) / 500.0 ;.fFog = clamp(fFog,0.0,1.0);.return  fFog;.}.float ComputeExponentialFog( float4 a_f4PositionLS).{.float fDistance =  dot( a_f4PositionLS , u_f44WorldViewProj._m30_m31_m32_m33 ) - u_f4Fog.x;.if(fDistance < 0.0).{.fDistance = 0.0;.}.float.fFog;.fFog = ((u_f4Fog.z/100.0)*fDistance) * ((u_f4Fog.z/100.0)*fDistance);.fFog =  1.0 /  exp(fFog * u_f4Fog.y );.return 1.0f-fFog;.}.float ComputeExponentialSquaredFog( float4 a_f4PositionLS).{.float fDistance =  dot( a_f4PositionLS , u_f44WorldViewProj._m30_m31_m32_m33 ) - u_f4Fog.x;.if(fDistance < 0.0).{.fDistance = 0.0;.}.float.fFog;.fFog = ((u_f4Fog.z/100.0)*fDistance) * ((u_f4Fog.z/100.0)*fDistance);.fFog =  1.0 / exp(( fFog*fFog ) * u_f4Fog.y );.return 1.0f-fFog;.}.*/.void GetParallaxOutput(out float2 a_of2ParallaxOffset, float3 a_f3ViewTS).{..float2 vParallaxDirection = normalize(  a_f3ViewTS.xy );.float fLength         = length( a_f3ViewTS );.float fParallaxLength = sqrt( fLength * fLength - a_f3ViewTS.z * a_f3ViewTS.z ) / a_f3ViewTS.z;.a_of2ParallaxOffset = vParallaxDirection * fParallaxLength;.a_of2ParallaxOffset *=u_fViewPomH.w;..}./*.*.*.structures.*.*/./******************************.Vertex Input.*******************************/.struct SVertexInput.{.float4..m_f4PositionLS:POSITION;.#ifdef internUseBaseTex.float2..m_f2TexCoord0:TEXCOORDBaseTex;.#endif.#ifdef internVertexColor.float4 ..m_f4Color:COLOR0;.#endif.#ifdef internUseNormal.float3..m_f3NormalLS:NORMAL;.#endif.#ifdef internUseTangent.float3..m_f3TangentLS:TANGENT;.#endif.#ifdef internSkinning.#ifdef internBlendWeight.float4..m_f4Weight:BLENDWEIGHT;.#endif.float4..m_i4Indices:BLENDINDICES;.#endif.};./****************************************************************************************.*.VertexShaderMain().*..Main Function for Vertex Shader.*.****************************************************************************************/.SVertexOutput .VertexShaderMain(SVertexInput  a_Vin).{.SVertexOutput...Vout;.float4.....f4PositionLS = a_Vin.m_f4PositionLS;.#ifdef internUseNormal.float3.....f3inNormalLS = a_Vin.m_f3NormalLS;.float3.....f3NormalLS = a_Vin.m_f3NormalLS;.#ifdef internPS3.if(!any(f3inNormalLS)).{.f3inNormalLS = f3NormalLS= float3(0,-1,0);.}.#endif .#endif.#ifdef internUseTangent.float3.....f3inTangentLS = a_Vin.m_f3TangentLS;.float3.....f3TangentLS = a_Vin.m_f3TangentLS;.#ifdef internPS3.if(!any(f3inTangentLS)).{.f3TangentLS = f3inTangentLS = float3(1,0,0);.}.#endif .#endif.#ifdef internUseTangentMatrix.float3x3....f33TangentToLocal;.#endif.Vout.m_f4Position = float4(0.0f,0.0f,0.0f,0.0f);.#ifdef internTransform.#ifdef internSkinning.Transform(f4PositionLS,Vout.m_f4Position.,a_Vin.m_i4Indices.#ifdef internBlendWeight.,a_Vin.m_f4Weight.#endif.#ifdef internUseNormal.,f3inNormalLS,f3NormalLS.#endif.#ifdef internUseTangent.,f3inTangentLS,f3TangentLS.#endif.);.#else.Transform(f4PositionLS,Vout.m_f4Position);.#endif.#else.Vout.m_f4Position = f4PositionLS;.#endif.#ifdef internUseTangentMatrix.f3TangentLS = normalize(f3TangentLS);.f3NormalLS = normalize(f3NormalLS);.#ifdef internOutputTangentMatrix.Vout.m_f3TangentLS = f3TangentLS;.Vout.m_f3BinormalLS = ComputeBinormal(f3NormalLS,f3TangentLS);.#else.ComputeTangentToLocalMatrix(f33TangentToLocal,f3NormalLS,f3TangentLS);.#endif .#endif .#ifdef internViewPos.#ifdef CGFX_FOR_MAYA.float4 f3ViewPos = u_f44view[3].xyzw;.float3 f3ViewPosLS = mul(f3ViewPos,u_f44WorldInvT).xyz;.float3 f3ViewLS = f3ViewPosLS.xyz - f4PositionLS.xyz;.#else.float3 f3ViewLS = u_f44WorldView[3].xyz - f4PositionLS.xyz;.#endif.#endif.float4.f4VertexColor;.#ifdef internVertexColor.f4VertexColor = a_Vin.m_f4Color;.#ifdef internNoVertexColorButAlpha.f4VertexColor.xyz = 0;.#endif.#else.f4VertexColor = 0;.f4VertexColor.w = 1;.#endif .#ifdef internColor0.Vout.m_f4Color = ComputeVertexLightning(f4VertexColor.#ifdef internUseNormal., f3NormalLS.#ifdef internViewPos., f3ViewLS.#endif.#if (internPointLightNb > 0).,f4PositionLS.#endif.#endif.);.#endif.#ifdef internUseBaseTex.Vout.m_f4basetex.xy = a_Vin.m_f2TexCoord0;.Vout.m_f4basetex.zw = float2(0,0);.#endif.#ifdef internOutpuSecondTexCoor.Vout.m_f4secondtex.xy = a_Vin.m_f2TexCoord0;.Vout.m_f4secondtex.zw = float2(0,0);.#endif.#ifdef internOutputEnvmap.#ifdef internOutputTangentMatrix.Vout.m_f3EnvmapCoef = (float3)u_f44WorldView[0];.#else.TangentSpaceTransform(Vout.m_f3EnvmapCoef,(float3)u_f44WorldView[0],f33TangentToLocal);.#endif.#elif defined(internEnvmap).#ifdef internEnvMapRw.GetCameraEnvTexCoord(Vout.m_f2EnvmapTexture,f3NormalLS);.#else.GetCameraEnvTexCoordLS(Vout.m_f2EnvmapTexture,f3NormalLS,f3ViewLS,(float3)u_f44WorldView[0]);.#endif .#endif.#ifdef internUVTransformbasetex.GetUVAnimTransform(Vout.m_f4basetex.xy,a_Vin.m_f2TexCoord0);.#endif.#ifdef internUVTransformSecondTex.GetSecondUVAnimTransform(Vout.m_f4secondtex.xy, a_Vin.m_f2TexCoord0 );.#endif.#ifdef internOutputNormal.Vout.m_f3NormalLS = f3NormalLS;.#endif.#ifdef internOutputTangentLS.Vout.m_f3TangentLS = f3TangentLS;.#endif.#ifdef internOutputBinormalLS.Vout.m_f3BinormalLS = f3BinormalLS;.#endif.#ifdef internOutputViewLS.Vout.m_f3ViewLS = f3ViewLS;.#endif.#ifndef internOutputTangentMatrix.#ifdef internUseViewTS.float3..f3ViewTS;.TangentSpaceTransform(f3ViewTS,f3ViewLS,f33TangentToLocal);.#ifdef internParallaxOffset.GetParallaxOutput(Vout.m_f2ParallaxOffsetTS,f3ViewTS);.#endif.#ifdef internOutputViewTS.#ifndef internRenderFarTex.#ifdef internShadowEnable.Vout.m_f4ViewTS.xyz = f3ViewTS;.#else.Vout.m_f3ViewTS = f3ViewTS;.#endif.#else.Vout.m_f3ViewTS = f3ViewTS;.#endif.#endif.#endif .int i=0;.#ifdef internOutputLight.for(i=0;i<internDirLightNb;i++).{.#ifdef internUseTangentMatrix.TangentSpaceTransform(Vout.m_af4LightTS[i].xyz,u_f4DirLight[i].xyz,f33TangentToLocal);.#else.Vout.m_af4LightTS[i].xyz = float3(0,0,0);.#endif.Vout.m_af4LightTS[i].w = 1.0f;.}.#endif.#ifdef internOutputSpecialLight.#ifdef internUseTangentMatrix.TangentSpaceTransform(Vout.m_f4SpecialLightTS.xyz,u_f4SpecialLightDir.xyz,f33TangentToLocal);.#else.Vout.m_f4SpecialLightTS.xyz = float3(0,0,0);.#endif.Vout.m_f4SpecialLightTS.w = 1;.#endif.#ifdef internOutputPointLight.for(i=0;i<internPointLightNb;i++).{.#ifdef internUseTangentMatrix.float3 f3DirLightFromPt = f4PositionLS.xyz - u_f4PointLight[i].xyz;.Vout.m_af4LightTS[internDirLightNb + i].w = GetAttenuation(u_f4PointLight[i].w,length(f3DirLightFromPt));.f3DirLightFromPt = normalize(f3DirLightFromPt);.TangentSpaceTransform(Vout.m_af4LightTS[internDirLightNb + i].xyz,f3DirLightFromPt,f33TangentToLocal);.Vout.m_f4PositionLS = f4PositionLS;.#else.Vout.m_af4LightTS[internDirLightNb + i] = float4(0,0,0,0);.#endif.}.#endif.#endif .#ifdef TEST_GRASS.Vout.m_f4ViewProjPos = Vout.m_f4Position;.#endif.#ifdef internRenderDoF.Vout.m_f4FarTexHeight = float4(0,0,0,0);.float4.f4Pos = a_Vin.m_f4PositionLS;.f4Pos.w = 1;.float4 vCameraPos = mul(u_f44WorldView,f4Pos);.Vout.m_fDof = vCameraPos.z;.#elif defined(internRenderFarTex).Vout.m_f4FarTexHeight.w = 0;.#endif.#ifdef internShadowEnable.float3 f3WorldPos =  mul(u_f44World,f4PositionLS ).xyz;.float2 f2ShadCoords;.f2ShadCoords.x = (f3WorldPos.x- ( u_f4InfoQuadShadow.z - u_f4InfoQuadShadow.x/2.0 ) ) / u_f4InfoQuadShadow.x;.f2ShadCoords.y = (f3WorldPos.z - ( u_f4InfoQuadShadow.w - u_f4InfoQuadShadow.y/2.0 ) ) / u_f4InfoQuadShadow.y;.Vout.m_f4basetex.zw = f2ShadCoords;.#ifdef internRenderFarTex.Vout.m_f4FarTexHeight.w = f3WorldPos.y;.#else.#ifdef internOutputViewTS.Vout.m_f4ViewTS.w = f3WorldPos.y;.#else.Vout.m_fHeight = f3WorldPos.y;.#endif.#endif.#endif.#ifdef internRenderFarTex.Vout.m_f4FarTexHeight.x =  Vout.m_f4Position.x / (2.0 *Vout.m_f4Position.z) + 0.5 ;.Vout.m_f4FarTexHeight.y =  1.0 - ( Vout.m_f4Position.y/ (2.0 *Vout.m_f4Position.z) + 0.5 );.Vout.m_f4FarTexHeight.z = dot( f4PositionLS ,u_f44WorldViewProj._m30_m31_m32_m33 );.#endif./*#ifndef internNoFog...#if internFogType==1....Vout.m_fFogCoef.= ComputeLinearFog(f4PositionLS);...#elif internFogType==2....Vout.m_fFogCoef.= ComputeExponentialFog(f4PositionLS);...#elif internFogType==3....Vout.m_fFogCoef.= ComputeExponentialSquaredFog(f4PositionLS);...#else....Vout.m_fFogCoef.= 1.0;...#endif.#endif*/.Vout.m_fFogCoef.= 0.0f;.{.#ifdef internRenderFarTex.float fDist = Vout.m_f4FarTexHeight.z ;.#else.float fDist = dot( f4PositionLS ,u_f44WorldViewProj._m30_m31_m32_m33 );.#endif.Vout.m_fFogCoef = (fDist - u_f4Fog.x ) / (u_f4Fog.y - u_f4Fog.x);.Vout.m_fFogCoef = u_f4Fog.z*clamp(Vout.m_fFogCoef,0.0,1.0);.}.#ifdef debugShaders.#ifndef externBasicShader.#ifdef debugShaders.#ifdef internVertexColor.#ifdef internUseTangent.#endif.#ifdef internOutputLight.#endif.#ifdef internUseNormal.#endif.#ifdef internUseViewTS.#ifdef internOutputViewTS.#endif.#endif .#ifdef internOutputViewLS.#endif.#ifdef internOutputNormal.#endif.#ifdef internOutputTangentLS.#endif.#ifdef internViewPos.#endif.#endif .#endif.#else .#endif .#endif.return .Vout;.}.#else .float4 .VertexShaderMain(float4.a_f4PositionLS: POSITION) : POSITION.{.float4...f4Position;.f4Position = mul(u_f44WorldViewProj, a_f4PositionLS);.return f4Position;.}.#endif