forked from aya/aya
101 lines
2.9 KiB
HLSL
101 lines
2.9 KiB
HLSL
#ifdef CLASSIC
|
|
#define PIN_SURFACE
|
|
#define ALREADY_HAS_PS
|
|
#include "default.hlsl"
|
|
|
|
#define SPEC_EXPON 70
|
|
#define KS .12
|
|
|
|
#define NOISE_SCALE float3(.02083, .0693, .2083)
|
|
#define SPREAD .3
|
|
#define RUST_THRESHOLD .8
|
|
#define CONTRAST float3(.1, .1, .1)
|
|
#define STUPID 0.125 * 1 //they do this stupid thing where different colors have assigned values for this coord val!!!!!
|
|
|
|
#define FADE_DIST 250 //133.33 fix!!!!!!!!!!
|
|
#define FADE_DIST_START 0
|
|
|
|
|
|
void DefaultPS(VertexOutput IN,
|
|
#ifdef PIN_GBUFFER
|
|
out float4 oColor1: COLOR1,
|
|
#endif
|
|
out float4 oColor0: COLOR0)
|
|
{
|
|
float fade = saturate(1 - (IN.View_Depth.w - FADE_DIST_START) / FADE_DIST);
|
|
|
|
float3 nn = normalize(IN.Normal);
|
|
|
|
float3x3 normalMatrix = {
|
|
IN.Tangent.xyz,
|
|
cross(nn, IN.Tangent.xyz),
|
|
nn
|
|
};
|
|
|
|
float2 uv = IN.Uv.xy;
|
|
|
|
float3 shiftPos = DisplaceCoord(IN.Pos);
|
|
float noiseval = tex3D(SpecularMap,shiftPos.xyz*NOISE_SCALE.x).x * 0.5;
|
|
float noiseval2 = tex3D(SpecularMap,shiftPos.zyx*NOISE_SCALE.y).x * 0.3;
|
|
float noiseval3 = tex3D(SpecularMap,shiftPos.zyx*NOISE_SCALE.z).x * 0.2;
|
|
noiseval += noiseval2+noiseval3;
|
|
|
|
float3 metalColor = IN.Color.xyz * 1.3 + CONTRAST * (noiseval - .5);
|
|
float3 rustColor = tex2D(DiffuseMap, float2(STUPID, 1 - noiseval)).xyz;
|
|
|
|
float3 tn = tex2D(NormalMap,uv).xyz - .5;
|
|
float tnSum = 0.65 + 0.35 * (tn.x + tn.y + tn.z);
|
|
|
|
float interp = (noiseval - RUST_THRESHOLD + SPREAD) / 2 / SPREAD + .5;
|
|
interp = clamp(interp, 0, 1);
|
|
tn = lerp(tn, float3(0,0,.5), interp - .4);
|
|
float3 albedo = lerp(rustColor, metalColor,interp);
|
|
float3 albedo2 = albedo * tnSum;
|
|
albedo = lerp(albedo, albedo2, interp);
|
|
tn = lerp(tn, float3(0,0,.5), interp);
|
|
|
|
tn = CalcBevel(IN.EdgeDistances, tn, IN.View_Depth.w);
|
|
nn = mul(tn, normalMatrix);
|
|
|
|
float3 vn = normalize(IN.View_Depth.xyz);
|
|
float4 light = lgridSample(TEXTURE(LightMap), TEXTURE(LightMapLookup), IN.LightPosition_Fog.xyz);
|
|
light.a = shadowSample(TEXTURE(ShadowMap), IN.PosLightSpace.xyz, light.a);
|
|
|
|
float3 diffuse;
|
|
float3 specular;
|
|
Shade(albedo, nn, vn, KS, SPEC_EXPON, light, diffuse, specular);
|
|
|
|
oColor0 = float4(diffuse + specular, IN.Color.w);
|
|
|
|
float fogAlpha = saturate((G(FogParams).z - length(IN.View_Depth.xyz)) * G(FogParams).w);
|
|
oColor0.xyz = lerp(G(FogColor), oColor0.rgb, fogAlpha);
|
|
|
|
#ifdef PIN_GBUFFER
|
|
oColor1 = gbufferPack(IN.View_Depth.w, diffuse.rgb, specular.rgb, fogAlpha);
|
|
#endif
|
|
}
|
|
#else
|
|
#define CFG_TEXTURE_TILING 1
|
|
|
|
#define CFG_DIFFUSE_SCALE 1
|
|
#define CFG_SPECULAR_SCALE 1
|
|
#define CFG_GLOSS_SCALE 256
|
|
#define CFG_REFLECTION_SCALE 0
|
|
|
|
#define CFG_NORMAL_SHADOW_SCALE 0.5
|
|
|
|
#define CFG_SPECULAR_LOD 0.35
|
|
#define CFG_GLOSS_LOD 103
|
|
|
|
#define CFG_NORMAL_DETAIL_TILING 0
|
|
#define CFG_NORMAL_DETAIL_SCALE 0
|
|
|
|
#define CFG_FAR_TILING 0.5
|
|
#define CFG_FAR_DIFFUSE_CUTOFF 0.6
|
|
#define CFG_FAR_NORMAL_CUTOFF 0
|
|
#define CFG_FAR_SPECULAR_CUTOFF 0
|
|
|
|
#define CFG_OPT_BLEND_COLOR
|
|
|
|
#include "material.hlsl"
|
|
#endif |