Показать сообщение отдельно
Старый 02.04.2009, 03:37   #2939
Corvin666

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: G3: Community Patch v1.7 (Исправляем G3)

По мотивам своего давнишнего поста:

Цитата:
Сообщение от Corvin666 link=board=gothic&t=1164204481&goto=4897552 date=03/31/09, в 05:32:37
<много всякого об улучшении графики>
сообщаю, что немного подолбавшись с шейдерами, пришел к выводу, что скорее всего причина пропавшей воды в океане на последней картинке в том, что движком перестает создаваться depth map для текстуры воды, начиная с какого-то, похоже, зашитого в движке, расстояния. В результате, глубина начиная с этого расстояния считается нулем, из-за чего мы и видим лажу.

Тщательно изучив шейдер для воды в океане и наэкспериментировавшись с ним, я понял, что там все запущено, завязано на переменных из движка, без комментариев, и вообще, требует знаний о том, как пишутся подобные вещи. Поэтому меня хватило на одну правку, которая не решает полностью проблему уродского океана, но заставляет все выглядеть все же несколько приличней:



На этом решил, что больше сделать не смогу.

Вот код исправленного шейдера:

Cпойлер(щелкните, чтобы прочесть):


//************************************************** ****************************
************
//*
//* File: * * * * * * * * *ge_ocean_3_0.fx * * * * * *(Version 2.0)
//*
//************************************************** ****************************
************
//*
//* *Copyright (c) 2006 Pluto 13 GmbH / Piranha Bytes
//* *All rights reserved.
//*
//************************************************** ****************************
************
//*
//* History:
//*
//* 07/02/2006 | 1.00 * * *## Initial release * * * * * * * * * * * * * * * * * * * * * * * * * * *(kp) * * * * * *##
//*
//************************************************** ****************************
************

//
//----------------------------------------------------------------------------- PREPROCESSOR
//

#ifndef WIN32

//
//----------------------------------------------------------------------------- DEPENDENCIES
//

#ifdef XFX_PS_STATICBUMPMAP
* * *#ifndef XFX_TANGENTSPACE
* * * * * *#define XFX_TANGENTSPACE 1
* * *#endif // XFX_TANGENTSPACE
#endif //XFX_PS_STATICBUMPMAP

#ifdef XFX_PS_FLOWINGBUMPMAP
* * *#ifndef XFX_TANGENTSPACE
* * * * * *#define XFX_TANGENTSPACE 1
* * *#endif // XFX_TANGENTSPACE
#endif //XFX_PS_FLOWINGBUMPMAP



#include "ge_globals.fx"


#define XFX_PS_TEX0 input.vTex0.xy
#define XFX_PS_TEX1 input.vTex1.xy
#define XFX_PS_TEX2 input.vTex0.zw
#define XFX_PS_TEX3 input.vTex1.zw

#define XFX_PS_VERTEXCOLOR input.vDiff

#ifndef XFX_VS_TEX0
* * *#define XFX_VS_TEX0 XFX_VS_INPUT_TEX0
#endif // XFX_VS_TEX0

#ifndef XFX_VS_TEX1
* * *#define XFX_VS_TEX1 XFX_VS_INPUT_TEX0
#endif // XFX_VS_TEX1

#ifndef XFX_VS_TEX2
* * *#define XFX_VS_TEX2 XFX_VS_INPUT_TEX0
#endif // XFX_VS_TEX2

#ifndef XFX_VS_TEX3
* * *#define XFX_VS_TEX3 XFX_VS_INPUT_TEX0
#endif // XFX_VS_TEX3

#ifdef XFX_SPECULAR
* * *#ifndef XFX_PS_SPECULARPOWER
* * * * * *#define XFX_PS_SPECULARPOWER 0.5f
* * *#endif // XFX_PS_SPECULARPOWER
#endif //XFX_SPECULAR

//
//------------------------------------------------------------------------- GLOBAL VARIABLES
//

float4 * * * * * * * * * * * * * * *vecWaterConstants; * * * * * * * * *// (1.0f-fFresnelConstant, fFresnelConstant, fShoreFadingScale, fDiffuseStrength)
float4 * * * * * * * * * * * * * * *colReflectionModulate;
float4 * * * * * * * * * * * * * * *vecDepthColorHalfLife;
float4x4 * * * * * * * * * * * *matView;
float4x4 * * * * * * * * * * * *matProjection;

#ifdef XFX_SPECULAR
* * *
* * *#ifdef XFX_PS_SPECULAR
* * *
* * * * * *SDirectionalLight * * * * * *DirLight;

* * *#endif //XFX_PS_SPECULAR

#endif //XFX_SPECULAR



#ifdef XFX_PS_DISTORTION

* * *sampler2D * * *smpRefract;
* * *float4 * * * * * *vecVPosToRefractmap;
* * *
#endif //XFX_PS_DISTORTION


sampler2D smpDepthMap;

//
// *SHADER CONSTANT MACRO
//
// *THIS IS NEEDED TO PUT IN ALL CONSTANTS DEFINED BY SHADER ELLEMENTS
//
#ifdef XFX_SHADER_CONSTANTS

* * *XFX_SHADER_CONSTANTS
* * *
#endif // XFX_SHADER_CONSTANTS

//
//------------------------------------------------------------------------------
--- SHADERS
//

struct VS_OUTPUT_3_0
{
* * *float4 vPos * * * * * * * * * * * * * * *: POSITION; * * * * * *// Position

* * *#ifndef XFX_ZPASS
* * *
* * * * * *float4 vDiff * * * * * * * * * * * *: COLOR0; * * * * * *// Blend component for alpha blend stage mixing
* * * * * *float3 vSpec * * * * * * * * * * * *: COLOR1; * * * * * *// Specular color
* * * * * *float4 vTex0 * * * * * * * * * * * *: TEXCOORD0; * * *// Texture coordinate set 0 (in .xy) and 2 (in .zw)]
* * * * * *float4 vTex1 * * * * * * * * * * * *: TEXCOORD1; * * *// Texture coordinate set 1 (in .xy) and 3 (in .zw)]
* * * * * *float4 vEyeNormal * * * * * * * * *: TEXCOORD2; * * *// Normalized eye vector and eye depth
* * * * * *float3 vFaceNormal * * * * * * * * *: TEXCOORD3; * * *// Face normal vector
* * * * * *
* * * * * *#ifdef XFX_TANGENTSPACE
* * * * * *
* * * * * * * * *float3 vFaceTangent * * * * * *: TEXCOORD4; * * *// Face tangent vector
* * * * * * * * *
* * * * * *#endif //XFX_TANGENTSPACE

* * * * * *float4 * * *vDepthMapAndDepth * * *: TEXCOORD5;
* * * * * *float * vFog * * * * * * * * * * * *: TEXCOORD6; * * *// Fog value
* * *
* * *#else
* * *
* * * * * *#ifdef XFX_SPECIALDEPTHPASS

* * * * * * * * *float * * *vDepth * * *: TEXCOORD0;

* * * * * *#endif // XFX_SPECIALDEPTHPASS
* * *
* * *#endif * * *//XFX_ZPASS
};

struct PS_INPUT_3_0
{
* * *float2 vPos * * * * * * * * * * * * * * * * * *: VPOS; * * * * * * * * *// Position

* * *#ifndef XFX_ZPASS
* * *
* * * * * *float4 vDiff * * * * * * * * * * * *: COLOR0; * * * * * *// Blend component for alpha blend stage mixing
* * * * * *float3 vSpec * * * * * * * * * * * *: COLOR1; * * * * * *// Specular color
* * * * * *float4 vTex0 * * * * * * * * * * * *: TEXCOORD0; * * *// Texture coordinate set 0 (in .xy) and 2 (in .zw)]
* * * * * *float4 vTex1 * * * * * * * * * * * *: TEXCOORD1; * * *// Texture coordinate set 1 (in .xy) and 3 (in .zw)]
* * * * * *float4 vEyeNormal * * * * * * * * *: TEXCOORD2; * * *// Normalized eye vector and eye depth
* * * * * *float3 vFaceNormal * * * * * * * * *: TEXCOORD3; * * *// Face normal vector
* * * * * *
* * * * * *#ifdef XFX_TANGENTSPACE
* * * * * *
* * * * * * * * *float3 vFaceTangent * * * * * *: TEXCOORD4; * * *// Face tangent vector
* * * * * * * * *
* * * * * *#endif //XFX_TANGENTSPACE

* * * * * *float4 * * *vDepthMapAndDepth * * *: TEXCOORD5;
* * * * * *float * vFog * * * * * * * * * * * *: TEXCOORD6; * * *// Fog value

* * *#else
* * *
* * * * * *#ifdef XFX_SPECIALDEPTHPASS

* * * * * * * * *float * * *vDepth * * *: TEXCOORD0;

* * * * * *#endif // XFX_SPECIALDEPTHPASS
* * *
* * *#endif * * *//XFX_ZPASS
};

#ifdef XFX_VS

//************************************************** *************************
// * * *VERTEXSHADER VS
// * * *Default vertex for sv 3_0
//************************************************** *************************
VS_OUTPUT_3_0 VS( const VS_INPUT input )
{
* * *VS_OUTPUT_3_0 output = (VS_OUTPUT_3_0)0;

* * *#ifdef XFX_ZPASS

* * * * * *//
* * * * * *// *LOCALS
* * * * * *//
* * * * * *float3 vecWorldPosition;
* * * * * *Transform( input, vecWorldPosition );

* * * * * *#ifdef XFX_SPECIALDEPTHPASS

* * * * * * * * *float4 vecProjectedPos ** * * * * *= mul( float4( vecWorldPosition, 1.0f ), matViewProjection );
* * * * * * * * *output.vPos * * * * * * * * * * * * * * *= vecProjectedPos; * * * * * * * * * * * *
* * * * * * * * *output.vDepth * * * * * * * * * * * *= vecProjectedPos.w * 0.0001f;

* * * * * *#else // XFX_SPECIALDEPTHPASS

* * * * * * * * *output.vPos = mul( float4( vecWorldPosition, 1.0f ), matViewProjection );

* * * * * *#endif // else XFX_SPECIALDEPTHPASS
* * * * * * * * * * * *
* * *#else //XFX_ZPASS

* * * * * *//
* * * * * *// *LOCALS
* * * * * *//
* * * * * *float3 vecWorldPosition;
* * * * * *float3 vecWorldNormal;
* * * * * *
* * * * * *#ifdef XFX_TANGENTSPACE
* * * * * *
* * * * * * * * *float3 vecWorldTangent;
* * * * * * * * *float3 vecWorldBiNormal;
* * * * * * * * *
* * * * * *#endif //XFX_TANGENTSPACE
* * * * * * * * *
* * * * * * * * *
* * * * * *//
* * * * * *// *TRANSFORM VERTICES
* * * * * *//
* * * * * *#ifdef XFX_TANGENTSPACE
* * * * * *
* * * * * * * * *Transform( input, vecWorldPosition, vecWorldNormal, vecWorldTangent, vecWorldBiNormal );
* * * * * * * * *
* * * * * *#else //XFX_TANGENTSPACE
* * * * * *
* * * * * * * * *Transform( input, vecWorldPosition, vecWorldNormal );
* * * * * * * * *
* * * * * *#endif //XFX_TANGENTSPACE
* * * * * *
* * * * * * * * *
* * * * * *//
* * * * * *// *EYE VECTOR & LENGTH
* * * * * *//
* * * * * *float3 vecEye * * * * * * * * *= vecCamPos - vecWorldPosition ;
* * * * * *float *fRcpEyeLength * * *= rsqrt( dot( vecEye, vecEye ) );
* * * * * * * * *
* * * * * * * * *
* * * * * *//
* * * * * *// *TEX COORDS
* * * * * *//
* * * * * *output.vTex0.xy = XFX_VS_TEX0;
* * * * * *output.vTex1.xy = XFX_VS_TEX1;
* * * * * *output.vTex0.zw = XFX_VS_TEX2;
* * * * * *output.vTex1.zw = XFX_VS_TEX3;
* * * * * *
* * * * * *
* * * * * *//
* * * * * *// *FILL OUTPUT
* * * * * *//
* * * * * *float4 vecProjectedPos ** * * * * *= mul( float4( vecWorldPosition, 1.0f ), matViewProjection );
* * * * * *output.vPos * * * * * * * * * * * * * * *= vecProjectedPos;
* * * * * *output.vDiff * * * * * * * * * * * *= input.vCol0;
* * * * * *output.vFog * * * * * * * * * * * * * * *= CalcRadialFog( 1.0f / fRcpEyeLength );
* * * * * *output.vEyeNormal * * * * * * * * *= float4( vecEye, fRcpEyeLength );
* * * * * *output.vFaceNormal * * * * * * * * *= vecWorldNormal;
* * * * * *
* * * * * *#ifdef XFX_TANGENTSPACE
* * * * * *
* * * * * * * * *output.vFaceTangent * * * * * *= vecWorldTangent;
* * * * * * * * *
* * * * * *#endif //XFX_TANGENTSPACE
* * * * * *
* * * * * *output.vDepthMapAndDepth * * *= float4( vecProjectedPos.xy * float2( 0.5f, -0.5f ) + vecProjectedPos.w ** 0.5f, vecProjectedPos.w * 0.0001f, vecProjectedPos.w );

* * *#endif //XFX_ZPASS
* * *
* * * * * *
* * *//
* * *// *RESULT
* * *//
* * *return output;
}

#endif // XFX_VS

#ifdef XFX_PS

//************************************************** *************************
// * * *PIXELSHADER PS
// * * *Default pixel shader for sv 3_0
//************************************************** *************************
float4 PS( const PS_INPUT_3_0 input ) : COLOR
{ * * *
* * *#ifdef XFX_ZPASS
* * *
* * * * * *#ifdef XFX_SPECIALDEPTHPASS

* * * * * * * * *float4 colResult = input.vDepth;

* * * * * *#else // XFX_SPECIALDEPTHPASS

* * * * * * * * *float4 colResult = 0.0f;

* * * * * *#endif // else XFX_SPECIALDEPTHPASS

* * *
* * *#else //XFX_ZPASS

* * * * * *//
* * * * * *// *XFX_TANGENTSPACE
* * * * * *//
* * * * * *#ifdef XFX_TANGENTSPACE
* * * * * *
* * * * * * * * *float3 vecFaceNormal * * *= normalize( (half3)input.vFaceNormal );
* * * * * * * * *float3 vecFaceTangent * * *= normalize( (half3)input.vFaceTangent );
* * * * * * * * *float3 vecFaceBiNormal * * *= cross( vecFaceNormal, vecFaceTangent );
* * * * * * * * *
* * * * * *#endif //XFX_TANGENTSPACE
* * * * * *
* * * * * *
* * * * * *//
* * * * * *// *XFX_PS_STATICBUMPMAP && XFX_PS_FLOWINGBUMPMAP
* * * * * *//
* * * * * *#ifdef XFX_PS_STATICBUMPMAP
* * * * * * * * *
* * * * * * * * *#ifdef XFX_PS_FLOWINGBUMPMAP
* * * * * * * * *
* * * * * * * * * * * *float4 vecInputBump * * * * * *= ( lerp( XFX_PS_FLOWINGBUMPMAP, XFX_PS_STATICBUMPMAP, input.vDiff.a ) - 0.5f ) * 2.0f;
* * * * * * * * * * * *float3 vecBumpNormal * * *= float3( vecInputBump.w, vecInputBump.y, sqrt(1.0 - vecInputBump.w*vecInputBump.w - vecInputBump.y*vecInputBump.y) );
* * * * * *
* * * * * * * * * * * *float3 vecWorldBumpNormal = mul( vecBumpNormal, float3x3( vecFaceTangent, vecFaceBiNormal, vecFaceNormal ) );

* * * * * * * * * * * *vecWorldBumpNormal * * * * * *= lerp( input.vFaceNormal, vecWorldBumpNormal, input.vDiff.b );
* * * * * * * * * * * *vecWorldBumpNormal * * * * * *= normalize( (half3)vecWorldBumpNormal );

* * * * * * * * *#else //XFX_PS_FLOWINGBUMPMAP
* * * * * * * * *
* * * * * * * * * * * *float4 vecInputBump * * * * * *= ( XFX_PS_STATICBUMPMAP - 0.5f ) * 2.0f;
* * * * * * * * * * * *float3 vecBumpNormal * * *= float3( vecInputBump.w, vecInputBump.y, sqrt(1.0 - vecInputBump.w*vecInputBump.w - vecInputBump.y*vecInputBump.y) );

* * * * * * * * * * * *float3 vecWorldBumpNormal = mul( vecBumpNormal, float3x3( vecFaceTangent, vecFaceBiNormal, vecFaceNormal ) );

* * * * * * * * * * * *vecWorldBumpNormal * * * * * *= lerp( input.vFaceNormal,vecWorldBumpNormal, input.vDiff.b );
* * * * * * * * * * * *vecWorldBumpNormal * * * * * *= normalize( (half3)vecWorldBumpNormal );
* * * * * * * * * * * *
* * * * * * * * *#endif //XFX_PS_FLOWINGBUMPMAP
* * * * * * * * *
* * * * * *#else //XFX_PS_STATICBUMPMAP
* * * * * * * * *
* * * * * * * * *#ifdef XFX_PS_FLOWINGBUMPMAP
* * * * * * * * *
* * * * * * * * * * * *float4 vecInputBump * * * * * *= ( XFX_PS_FLOWINGBUMPMAP - 0.5f ) * 2.0f;
* * * * * * * * * * * *float3 vecBumpNormal * * *= float3( vecInputBump.w, vecInputBump.y, sqrt(1.0 - vecInputBump.w*vecInputBump.w - vecInputBump.y*vecInputBump.y) );

* * * * * * * * * * * *float3 vecWorldBumpNormal = mul( vecBumpNormal, float3x3( vecFaceTangent, vecFaceBiNormal, vecFaceNormal ) );

* * * * * * * * * * * *vecWorldBumpNormal * * * * * *= lerp( input.vFaceNormal, vecWorldBumpNormal, input.vDiff.b );
* * * * * * * * * * * *vecWorldBumpNormal * * * * * *= normalize( (half3)vecWorldBumpNormal );

* * * * * * * * *#else //XFX_PS_FLOWINGBUMPMAP
* * * * * * * * *
* * * * * * * * * * * *float3 vecBumpNormal * * *= input.vFaceNormal;
* * * * * * * * * * * *vecWorldBumpNormal * * * * * *= normalize( (half3)vecBumpNormal );
* * * * * * * * * * * *
* * * * * * * * *#endif //XFX_PS_FLOWINGBUMPMAP
* * * * * * * * *
* * * * * *#endif //XFX_PS_STATICBUMPMAP
* * * * * *
* * * * * *float fLocalDepth = *saturate( tex2Dproj( smpDepthMap, input.vDepthMapAndDepth).r - input.vDepthMapAndDepth.z );
* * * * * *if (fLocalDepth == 0) fLocalDepth = 0.3;
* * * * * *
* * * * * *//
* * * * * *// *XFX_PS_REFLECTIONMAP && XFX_PS_DISTORTION && XFX_PS_DIFFUSEMAP && XFX_SHOREFADING
* * * * * *//
* * * * * *#ifdef XFX_PS_REFLECTIONMAP

* * * * * * * * *float3 vecEyeNormal * * * * * *= input.vEyeNormal.xyz * input.vEyeNormal.w;

* * * * * * * * *float fFresnel * * * * * * * * *= CalcFresnelReflection( vecEyeNormal, vecWorldBumpNormal, float2( vecWaterConstants.x, vecWaterConstants.y) );

* * * * * * * * *float3 vecReflect * * * * * *= reflect( -vecEyeNormal, vecWorldBumpNormal );
* * * * * * * * *#define XFX_PS_REFLECT vecReflect
* * * * * * * * *
* * * * * * * * *float4 colResult;

* * * * * * * * *#ifdef XFX_SHOREFADING
* * * * * * * * *
* * * * * * * * * * * *colResult.a * * * * * *= sqrt( saturate( fLocalDepth * vecWaterConstants.z ) );

* * * * * * * * *#else //XFX_SHOREFADING
* * * * * * * * *
* * * * * * * * * * * *colResult.a * * * * * *= 1.0f;
* * * * * * * * * * * *
* * * * * * * * *#endif //XFX_SHOREFADING

* * * * * * * * *float4 vecDepthDimmer = saturate( exp( -fLocalDepth*vecDepthColorHalfLife ) );
* * * * * * * * * * * *
* * * * * * * * *#ifdef XFX_PS_DISTORTION
* * * * * * * * *
* * * * * * * * * * * *float2 vecRefract * * * * * *= vecBumpNormal*XFX_PS_DISTORTION*fLocalDepth;
* * * * * * * * * * * *float2 vecTexRefrect * * *= input.vPos.xy*vecVPosToRefractmap.xy;
* * * * * * * * * * * *float4 colRefractA * * * * * *= tex2D( smpRefract, vecTexRefrect + vecRefract );
* * * * * * * * * * * *float4 colRefractB * * * * * *= tex2D( smpRefract, vecTexRefrect );
* * * * * * * * * * * *
* * * * * * * * * * * *colResult.rgb * * * * * * * * *= lerp( colRefractA.rgb, colRefractB.rgb, colRefractA.w*colResult.a );
* * * * * * * * * * * *
* * * * * * * * * * * *#ifdef XFX_PS_DIFFUSEMAP

* * * * * * * * * * * * * * *float4 colDiffuse ** * * * * *= XFX_PS_DIFFUSEMAP;
* * * * * * * * * * * * * * *colResult.rgb * * * * * * * * *= lerp( lerp( colResult*vecDepthDimmer, XFX_PS_REFLECTIONMAP*colReflectionModulate, fFresnel ), colDiffuse.rgb, colDiffuse.a );
* * * * * * * * * * * * * * *
* * * * * * * * * * * *#else //XFX_PS_DIFFUSEMAP
* * * * * * * * * * * *
* * * * * * * * * * * * * * *colResult.rgb * * * * * * * * *= lerp( colResult*vecDepthDimmer, XFX_PS_REFLECTIONMAP*colReflectionModulate, fFresnel );
* * * * * * * * * * * * * * *
* * * * * * * * * * * *#endif //XFX_PS_DIFFUSEMAP
* * * * * * * * * * * *
* * * * * * * * *#else //XFX_PS_DISTORTION
* * * * * * * * *
* * * * * * * * * * * *#ifdef XFX_PS_DIFFUSEMAP
* * * * * * * * * * * *
* * * * * * * * * * * * * * *colResult.rgb * * * * * * * * *= lerp( XFX_PS_DIFFUSEMAP*vecDepthDimmer, XFX_PS_REFLECTIONMAP*colReflectionModulate, fFresnel );
* * * * * * * * * * * * * * *
* * * * * * * * * * * *#else //XFX_PS_DIFFUSEMAP
* * * * * * * * * * * *
* * * * * * * * * * * * * * *colResult.rgb * * * * * * * * *= XFX_PS_REFLECTIONMAP*colReflectionModulate;
* * * * * * * * * * * *
* * * * * * * * * * * *#endif //XFX_PS_DIFFUSEMAP
* * * * * * * * * * * *
* * * * * * * * *#endif //XFX_PS_DISTORTION

* * * * * *#else //XFX_PS_REFLECTIONMAP
* * * * * * * * *
* * * * * * * * *#ifdef XFX_PS_DIFFUSEMAP
* * * * * * * * *
* * * * * * * * * * * *half4 colResult * * *= XFX_PS_DIFFUSEMAP;
* * * * * * * * * * * *
* * * * * * * * *#else //XFX_PS_DIFFUSEMAP
* * * * * * * * *
* * * * * * * * * * * *half4 colResult * * *= input.vDiff;
* * * * * * * * * * * *
* * * * * * * * *#endif //XFX_PS_DIFFUSEMAP
* * * * * *
* * * * * * * * *colResult.a * * * * * *= 1.0f;

* * * * * *#endif //XFX_PS_REFLECTIONMAP
* * * * * *
* * * * * *
* * * * * *//
* * * * * *// * * *XFX_SPECULAR
* * * * * *//
* * * * * *#ifdef XFX_SPECULAR
* * * * * *
* * * * * * * * *#ifdef XFX_PS_SPECULAR
* * * * * * * * *
* * * * * * * * * * * *float3 vecHalf * * *= normalize( (half3)( DirLight.vecInvDir + vecEyeNormal ));
* * * * * * * * * * * *float fNDotH * * *= saturate( dot( vecHalf, vecWorldBumpNormal ) ); * * *
* * * * * * * * * * * *float fSpecular = pow( fNDotH, XFX_PS_SPECULARPOWER * 127.0f ) + smoothstep( 1.0, 0.97, vecBumpNormal.z );
* * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * *colResult.rgb += DirLight.colSpecular * fSpecular * (float3)( XFX_PS_SPECULAR );

* * * * * * * * *#endif //XFX_PS_SPECULAR

* * * * * *#endif //XFX_SPECULAR
* * * * * *
* * * * * *//
* * * * * *// *CALC FOG
* * * * * *//
* * * * * *#ifndef XFX_ADDITIONAL_PASS

* * * * * * * * *colResult.xyz = lerp( colFog, colResult.xyz, input.vFog );

* * * * * *#endif // XFX_ADDITIONAL_PASS
* * *
* * *#endif //XFX_ZPASS

* * *//
* * *// *RESULT
* * *//
* * *return colResult;

}

#endif // XFX_PS

//
//----------------------------------------------------------------------------- PREPROCESSOR
//

#endif //WIN32



Добавленная строка выделена жирным. Содержимое спойлера надо сохранить в файл Data\Materials\ShaderMaterial\Effects\ge_ocean_3_0 .fx

Теоретически из этого можно сделать мод, но не знаю, насколько это нужно. Надеюсь, это будет кому-то полезным :)
Ответить с цитированием