From 5058d6a3a9d0e04d927663fcd6936db7909aa683 Mon Sep 17 00:00:00 2001 From: Atdunbg Date: Mon, 13 Apr 2026 20:50:13 +0800 Subject: [PATCH] add alpha pass --- Editor/assets/shaders/PBRShader_Anim.glsl | 16 ++++++++-------- Editor/assets/shaders/PBRShader_Static.glsl | 19 ++++++++++--------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/Editor/assets/shaders/PBRShader_Anim.glsl b/Editor/assets/shaders/PBRShader_Anim.glsl index b0b14df..2528ea6 100644 --- a/Editor/assets/shaders/PBRShader_Anim.glsl +++ b/Editor/assets/shaders/PBRShader_Anim.glsl @@ -164,7 +164,7 @@ uniform int u_ShadowEnabled; struct PBRParameters { - vec3 Albedo; + vec4 Albedo; float Roughness; float Metalness; vec3 Normal; @@ -226,7 +226,7 @@ vec3 ComputeDirectionalLight(DirectionalLight light, vec3 F0, PBRParameters para float G = GeometrySmith(params.Normal, params.View, L, params.Roughness); vec3 kd = (1.0 - F) * (1.0 - params.Metalness); - vec3 diffuseBRDF = kd * params.Albedo; + vec3 diffuseBRDF = kd * params.Albedo.rgb; vec3 specularBRDF = (F * D * G) / max(Epsilon, 4.0 * cosLi * params.NdotV); return (diffuseBRDF + specularBRDF) * Lradiance * cosLi; @@ -258,7 +258,7 @@ vec3 ComputePointLight(PointLight light, vec3 F0, PBRParameters params, vec3 wor float G = GeometrySmith(params.Normal, params.View, L, params.Roughness); vec3 kd = (1.0 - F) * (1.0 - params.Metalness); - vec3 diffuseBRDF = kd * params.Albedo; + vec3 diffuseBRDF = kd * params.Albedo.rgb; vec3 specularBRDF = (F * D * G) / max(Epsilon, 4.0 * cosLi * params.NdotV); return (diffuseBRDF + specularBRDF) * Lradiance * cosLi * attenuation; @@ -295,7 +295,7 @@ vec3 ComputeSpotLight(SpotLight light, vec3 F0, PBRParameters params, vec3 world float G = GeometrySmith(params.Normal, params.View, L, params.Roughness); vec3 kd = (1.0 - F) * (1.0 - params.Metalness); - vec3 diffuseBRDF = kd * params.Albedo; + vec3 diffuseBRDF = kd * params.Albedo.rgb; vec3 specularBRDF = (F * D * G) / max(Epsilon, 4.0 * cosLi * params.NdotV); return (diffuseBRDF + specularBRDF) * Lradiance * cosLi * attenuation; @@ -320,7 +320,7 @@ vec3 Lighting(vec3 F0) float G = GeometrySmith(m_Params.Normal, m_Params.View, Li, m_Params.Roughness); vec3 kd = (1.0 - F) * (1.0 - m_Params.Metalness); - vec3 diffuseBRDF = kd * m_Params.Albedo; + vec3 diffuseBRDF = kd * m_Params.Albedo.rgb; vec3 specularBRDF = (F * D * G) / max(Epsilon, 4.0 * cosLi * m_Params.NdotV); @@ -346,7 +346,7 @@ vec3 IBL(vec3 F0, vec3 Lr) vec3 irradiance = texture(u_EnvIrradianceTex, m_Params.Normal).rgb; vec3 F = fresnelSchlickRoughness(F0, m_Params.NdotV, m_Params.Roughness); vec3 kd = (1.0 - F) * (1.0 - m_Params.Metalness); - vec3 diffuseIBL = m_Params.Albedo * irradiance; + vec3 diffuseIBL = m_Params.Albedo.rgb * irradiance; int u_EnvRadianceTexLevels = textureQueryLevels(u_EnvRadianceTex); vec3 specularIrradiance = textureLod( @@ -420,7 +420,7 @@ float ComputeShadow(vec4 fragPosLightSpace, float NdotL) void main() { - m_Params.Albedo = u_AlbedoTexToggle > 0.5 ? texture(u_AlbedoTexture, vs_Input.TexCoord).rgb : u_AlbedoColor; + m_Params.Albedo = u_AlbedoTexToggle > 0.5 ? texture(u_AlbedoTexture, vs_Input.TexCoord) : vec4(u_AlbedoColor, 1.0); m_Params.Metalness = u_MetalnessTexToggle > 0.5 ? texture(u_MetalnessTexture, vs_Input.TexCoord).r : u_Metalness; m_Params.Roughness = u_RoughnessTexToggle > 0.5 ? texture(u_RoughnessTexture, vs_Input.TexCoord).r : u_Roughness; m_Params.Roughness = max(m_Params.Roughness, 0.05); @@ -438,7 +438,7 @@ void main() vec3 Lr = 2.0 * m_Params.NdotV * m_Params.Normal - m_Params.View; - vec3 F0 = mix(Fdielectric, m_Params.Albedo, m_Params.Metalness); + vec3 F0 = mix(Fdielectric, m_Params.Albedo.rgb, m_Params.Metalness); float shadowFactor = 1.0; if (u_ShadowEnabled > 0.5) { diff --git a/Editor/assets/shaders/PBRShader_Static.glsl b/Editor/assets/shaders/PBRShader_Static.glsl index 3761a71..3bf64f9 100644 --- a/Editor/assets/shaders/PBRShader_Static.glsl +++ b/Editor/assets/shaders/PBRShader_Static.glsl @@ -151,7 +151,7 @@ uniform int u_ShadowEnabled; struct PBRParameters { - vec3 Albedo; + vec4 Albedo; float Roughness; float Metalness; vec3 Normal; @@ -213,7 +213,7 @@ vec3 ComputeDirectionalLight(DirectionalLight light, vec3 F0, PBRParameters para float G = GeometrySmith(params.Normal, params.View, L, params.Roughness); vec3 kd = (1.0 - F) * (1.0 - params.Metalness); - vec3 diffuseBRDF = kd * params.Albedo; + vec3 diffuseBRDF = kd * params.Albedo.rgb; vec3 specularBRDF = (F * D * G) / max(Epsilon, 4.0 * cosLi * params.NdotV); return (diffuseBRDF + specularBRDF) * Lradiance * cosLi; @@ -245,7 +245,7 @@ vec3 ComputePointLight(PointLight light, vec3 F0, PBRParameters params, vec3 wor float G = GeometrySmith(params.Normal, params.View, L, params.Roughness); vec3 kd = (1.0 - F) * (1.0 - params.Metalness); - vec3 diffuseBRDF = kd * params.Albedo; + vec3 diffuseBRDF = kd * params.Albedo.rgb; vec3 specularBRDF = (F * D * G) / max(Epsilon, 4.0 * cosLi * params.NdotV); return (diffuseBRDF + specularBRDF) * Lradiance * cosLi * attenuation; @@ -282,7 +282,7 @@ vec3 ComputeSpotLight(SpotLight light, vec3 F0, PBRParameters params, vec3 world float G = GeometrySmith(params.Normal, params.View, L, params.Roughness); vec3 kd = (1.0 - F) * (1.0 - params.Metalness); - vec3 diffuseBRDF = kd * params.Albedo; + vec3 diffuseBRDF = kd * params.Albedo.rgb; vec3 specularBRDF = (F * D * G) / max(Epsilon, 4.0 * cosLi * params.NdotV); return (diffuseBRDF + specularBRDF) * Lradiance * cosLi * attenuation; @@ -305,7 +305,7 @@ vec3 Lighting(vec3 F0) float G = GeometrySmith(m_Params.Normal, m_Params.View, Li, m_Params.Roughness); vec3 kd = (1.0 - F) * (1.0 - m_Params.Metalness); - vec3 diffuseBRDF = kd * m_Params.Albedo; + vec3 diffuseBRDF = kd * m_Params.Albedo.rgb; vec3 specularBRDF = (F * D * G) / max(Epsilon, 4.0 * cosLi * m_Params.NdotV); @@ -331,7 +331,7 @@ vec3 IBL(vec3 F0, vec3 Lr) vec3 irradiance = texture(u_EnvIrradianceTex, m_Params.Normal).rgb; vec3 F = fresnelSchlickRoughness(F0, m_Params.NdotV, m_Params.Roughness); vec3 kd = (1.0 - F) * (1.0 - m_Params.Metalness); - vec3 diffuseIBL = m_Params.Albedo * irradiance; + vec3 diffuseIBL = m_Params.Albedo.rgb * irradiance; int u_EnvRadianceTexLevels = textureQueryLevels(u_EnvRadianceTex); vec3 specularIrradiance = textureLod( @@ -405,7 +405,7 @@ float ComputeShadow(vec4 fragPosLightSpace, float NdotL) void main() { - m_Params.Albedo = u_AlbedoTexToggle > 0.5 ? texture(u_AlbedoTexture, vs_Input.TexCoord).rgb : u_AlbedoColor; + m_Params.Albedo = u_AlbedoTexToggle > 0.5 ? texture(u_AlbedoTexture, vs_Input.TexCoord) : vec4(u_AlbedoColor, 1.0f); m_Params.Metalness = u_MetalnessTexToggle > 0.5 ? texture(u_MetalnessTexture, vs_Input.TexCoord).r : u_Metalness; m_Params.Roughness = u_RoughnessTexToggle > 0.5 ? texture(u_RoughnessTexture, vs_Input.TexCoord).r : u_Roughness; m_Params.Roughness = max(m_Params.Roughness, 0.05); @@ -423,7 +423,7 @@ void main() vec3 Lr = 2.0 * m_Params.NdotV * m_Params.Normal - m_Params.View; - vec3 F0 = mix(Fdielectric, m_Params.Albedo, m_Params.Metalness); + vec3 F0 = mix(Fdielectric, m_Params.Albedo.rgb, m_Params.Metalness); // Shadow float shadowFactor = 1.0; @@ -453,7 +453,8 @@ void main() vec3 iblContribution = IBL(F0, Lr) * u_IBLContribution; - color = vec4(lightContribution + iblContribution, 1.0); + + color = vec4(lightContribution + iblContribution, m_Params.Albedo.a); // Bloom float brightness = dot(color.rgb, vec3(0.2126, 0.7152, 0.0722));