mirror of
https://git.rip/DMCA_FUCKER/re3.git
synced 2025-04-06 20:39:27 +00:00
54 lines
1.4 KiB
HLSL
54 lines
1.4 KiB
HLSL
struct VS_out {
|
|
float4 Position : POSITION;
|
|
float3 TexCoord0 : TEXCOORD0;
|
|
float2 TexCoord1 : TEXCOORD1;
|
|
float2 ReflData : TEXCOORD2;
|
|
float4 Color : COLOR0;
|
|
};
|
|
|
|
#define NdotV (input.ReflData.x)
|
|
#define lightingCont (input.ReflData.y)
|
|
|
|
sampler2D diffTex : register(s0);
|
|
sampler2D envTex : register(s1);
|
|
|
|
float4 fogColor : register(c0);
|
|
|
|
float4 fxparams : register(c2);
|
|
float3 skyTop : register(c3);
|
|
float3 skyBot : register(c4);
|
|
|
|
#define shininess (fxparams.x)
|
|
|
|
#define power (4.0)
|
|
|
|
#define preMult (1.0)
|
|
#define postMult (1.0)
|
|
#define minRefl (0.25)
|
|
#define maxRefl (3.0)
|
|
#define minOpacity (1.0)
|
|
#define maxOpacity (1.0)
|
|
|
|
|
|
float4 main(VS_out input) : COLOR
|
|
{
|
|
float4 pass1 = input.Color*tex2D(diffTex, input.TexCoord0.xy);
|
|
|
|
float3 envtex = tex2D(envTex, float2(input.TexCoord1.x, 1.0-input.TexCoord1.y)).rgb; // V flipped
|
|
float3 skyColour = lerp(skyBot, skyTop, envtex.g);
|
|
float3 envOut = lerp(envtex.rrr, skyColour, envtex.b);
|
|
|
|
float fresnel = lerp(shininess, shininess * 2.0, NdotV);
|
|
fresnel = pow(NdotV * preMult, power);
|
|
fresnel = clamp(fresnel * postMult, 0.0, 1.0);
|
|
float reflectivity = lightingCont * lerp(minRefl, maxRefl, fresnel)*shininess;
|
|
|
|
float opacity = lerp(minOpacity, maxOpacity, fresnel)*pass1.a;
|
|
float4 color = pass1 + float4(reflectivity * envOut, 0.0);
|
|
color.a = opacity;
|
|
|
|
color.rgb = lerp(fogColor.rgb, color.rgb, input.TexCoord0.z);
|
|
|
|
return color;
|
|
}
|