|
Server : Apache/2.4.58 (Win64) OpenSSL/3.1.3 PHP/8.2.12 System : Windows NT SERVER-PC 10.0 build 26200 (Windows 11) AMD64 User : ServerPC ( 0) PHP Version : 8.2.12 Disable Function : NONE Directory : C:/Program Files (x86)/Steam/steamapps/common/wallpaper_engine/assets/shaders/ |
Upload File : |
#include "common_fragment.h"
uniform vec4 g_LightsColorRadius[4];
uniform float g_Metallic; // {"material":"Metal","default":0,"range":[0,1]}
uniform float g_Roughness; // {"material":"Rough","default":0,"range":[0,1]}
uniform float g_Light; // {"material":"Light","default":0,"range":[0,1]}
#if DIFFUSETINT
uniform vec3 g_TintColor; // {"material":"Color", "type": "color", "default":"1 1 1"}
uniform float g_TintAlpha; // {"material":"Alpha","default":0,"range":[0,1]}
#endif
uniform sampler2D g_Texture0;
#if NORMALMAP
uniform sampler2D g_Texture1;
#define g_NormalMapSampler g_Texture1
#if LIGHTMAP
uniform sampler2D g_Texture2;
#define g_LightmapMapSampler g_Texture2
#endif
#else
#if LIGHTMAP
uniform sampler2D g_Texture1;
#define g_LightmapMapSampler g_Texture1
#endif
varying vec3 v_Normal;
#endif
#if REFLECTION
uniform sampler2D g_Texture3;
#define g_ReflectionSampler g_Texture3
varying vec3 v_ScreenPos;
uniform vec2 g_TexelSizeHalf;
#endif
#if LIGHTMAP
varying vec4 v_TexCoord;
#else
varying vec2 v_TexCoord;
#endif
varying vec3 v_ViewDir;
varying vec4 v_Light0DirectionL3X;
varying vec4 v_Light1DirectionL3Y;
varying vec4 v_Light2DirectionL3Z;
varying vec3 v_LightAmbientColor;
void main() {
// Vars
vec4 albedo = texSample2D(g_Texture0, v_TexCoord.xy);
vec3 specularResult = vec3(0, 0, 0);
#if DIFFUSETINT
albedo.rgb *= g_TintColor;
albedo.a *= g_TintAlpha;
#endif
#if DETAILINALPHA
albedo.rgb *= texSample2D(g_Texture0, v_TexCoord.xy * 3).a * 2.0;
#endif
vec3 viewDir = normalize(v_ViewDir);
float specularPower = ComputeMaterialSpecularPower(g_Roughness, g_Metallic);
float specularStrength = ComputeMaterialSpecularStrength(g_Roughness, g_Metallic);
#if NORMALMAP
vec3 normal = DecompressNormal(texSample2D(g_NormalMapSampler, v_TexCoord.xy));
#else
vec3 normal = normalize(v_Normal);
#endif
// Compute fragment
vec3 light = ComputeLightSpecular(normal, v_Light0DirectionL3X.xyz, g_LightsColorRadius[0].rgb, g_LightsColorRadius[0].w, viewDir, specularPower, specularStrength, g_Light, g_Metallic, specularResult);
#if LIGHTMAP
vec3 lightmap = texSample2D(g_LightmapMapSampler, v_TexCoord.zw).rgb;
light *= lightmap;
specularResult *= lightmap;
#endif
light += ComputeLightSpecular(normal, v_Light1DirectionL3Y.xyz, g_LightsColorRadius[1].rgb, g_LightsColorRadius[1].w, viewDir, specularPower, specularStrength, g_Light, g_Metallic, specularResult);
light += ComputeLightSpecular(normal, v_Light2DirectionL3Z.xyz, g_LightsColorRadius[2].rgb, g_LightsColorRadius[2].w, viewDir, specularPower, specularStrength, g_Light, g_Metallic, specularResult);
light += ComputeLightSpecular(normal, vec3(v_Light0DirectionL3X.w, v_Light1DirectionL3Y.w, v_Light2DirectionL3Z.w), g_LightsColorRadius[3].rgb, g_LightsColorRadius[3].w, viewDir, specularPower, specularStrength, g_Light, g_Metallic, specularResult);
light += v_LightAmbientColor;
albedo.rgb = albedo.rgb * light + specularResult;
#if REFLECTION
vec2 screenUV = (v_ScreenPos.xy / v_ScreenPos.z) * 0.5 + 0.5;
#ifdef HLSL_SM30
screenUV += g_TexelSizeHalf;
#endif
albedo.rgb += texSample2D(g_ReflectionSampler, screenUV + normal.xy * 0.01).rgb * 0.35;
#endif
gl_FragColor = albedo;
}