add alpha pass
This commit is contained in:
@ -164,7 +164,7 @@ uniform int u_ShadowEnabled;
|
|||||||
|
|
||||||
struct PBRParameters
|
struct PBRParameters
|
||||||
{
|
{
|
||||||
vec3 Albedo;
|
vec4 Albedo;
|
||||||
float Roughness;
|
float Roughness;
|
||||||
float Metalness;
|
float Metalness;
|
||||||
vec3 Normal;
|
vec3 Normal;
|
||||||
@ -226,7 +226,7 @@ vec3 ComputeDirectionalLight(DirectionalLight light, vec3 F0, PBRParameters para
|
|||||||
float G = GeometrySmith(params.Normal, params.View, L, params.Roughness);
|
float G = GeometrySmith(params.Normal, params.View, L, params.Roughness);
|
||||||
|
|
||||||
vec3 kd = (1.0 - F) * (1.0 - params.Metalness);
|
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);
|
vec3 specularBRDF = (F * D * G) / max(Epsilon, 4.0 * cosLi * params.NdotV);
|
||||||
|
|
||||||
return (diffuseBRDF + specularBRDF) * Lradiance * cosLi;
|
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);
|
float G = GeometrySmith(params.Normal, params.View, L, params.Roughness);
|
||||||
|
|
||||||
vec3 kd = (1.0 - F) * (1.0 - params.Metalness);
|
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);
|
vec3 specularBRDF = (F * D * G) / max(Epsilon, 4.0 * cosLi * params.NdotV);
|
||||||
|
|
||||||
return (diffuseBRDF + specularBRDF) * Lradiance * cosLi * attenuation;
|
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);
|
float G = GeometrySmith(params.Normal, params.View, L, params.Roughness);
|
||||||
|
|
||||||
vec3 kd = (1.0 - F) * (1.0 - params.Metalness);
|
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);
|
vec3 specularBRDF = (F * D * G) / max(Epsilon, 4.0 * cosLi * params.NdotV);
|
||||||
|
|
||||||
return (diffuseBRDF + specularBRDF) * Lradiance * cosLi * attenuation;
|
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);
|
float G = GeometrySmith(m_Params.Normal, m_Params.View, Li, m_Params.Roughness);
|
||||||
|
|
||||||
vec3 kd = (1.0 - F) * (1.0 - m_Params.Metalness);
|
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);
|
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 irradiance = texture(u_EnvIrradianceTex, m_Params.Normal).rgb;
|
||||||
vec3 F = fresnelSchlickRoughness(F0, m_Params.NdotV, m_Params.Roughness);
|
vec3 F = fresnelSchlickRoughness(F0, m_Params.NdotV, m_Params.Roughness);
|
||||||
vec3 kd = (1.0 - F) * (1.0 - m_Params.Metalness);
|
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);
|
int u_EnvRadianceTexLevels = textureQueryLevels(u_EnvRadianceTex);
|
||||||
vec3 specularIrradiance = textureLod(
|
vec3 specularIrradiance = textureLod(
|
||||||
@ -420,7 +420,7 @@ float ComputeShadow(vec4 fragPosLightSpace, float NdotL)
|
|||||||
|
|
||||||
void main()
|
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.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 = u_RoughnessTexToggle > 0.5 ? texture(u_RoughnessTexture, vs_Input.TexCoord).r : u_Roughness;
|
||||||
m_Params.Roughness = max(m_Params.Roughness, 0.05);
|
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 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;
|
float shadowFactor = 1.0;
|
||||||
if (u_ShadowEnabled > 0.5) {
|
if (u_ShadowEnabled > 0.5) {
|
||||||
|
|||||||
@ -151,7 +151,7 @@ uniform int u_ShadowEnabled;
|
|||||||
|
|
||||||
struct PBRParameters
|
struct PBRParameters
|
||||||
{
|
{
|
||||||
vec3 Albedo;
|
vec4 Albedo;
|
||||||
float Roughness;
|
float Roughness;
|
||||||
float Metalness;
|
float Metalness;
|
||||||
vec3 Normal;
|
vec3 Normal;
|
||||||
@ -213,7 +213,7 @@ vec3 ComputeDirectionalLight(DirectionalLight light, vec3 F0, PBRParameters para
|
|||||||
float G = GeometrySmith(params.Normal, params.View, L, params.Roughness);
|
float G = GeometrySmith(params.Normal, params.View, L, params.Roughness);
|
||||||
|
|
||||||
vec3 kd = (1.0 - F) * (1.0 - params.Metalness);
|
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);
|
vec3 specularBRDF = (F * D * G) / max(Epsilon, 4.0 * cosLi * params.NdotV);
|
||||||
|
|
||||||
return (diffuseBRDF + specularBRDF) * Lradiance * cosLi;
|
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);
|
float G = GeometrySmith(params.Normal, params.View, L, params.Roughness);
|
||||||
|
|
||||||
vec3 kd = (1.0 - F) * (1.0 - params.Metalness);
|
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);
|
vec3 specularBRDF = (F * D * G) / max(Epsilon, 4.0 * cosLi * params.NdotV);
|
||||||
|
|
||||||
return (diffuseBRDF + specularBRDF) * Lradiance * cosLi * attenuation;
|
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);
|
float G = GeometrySmith(params.Normal, params.View, L, params.Roughness);
|
||||||
|
|
||||||
vec3 kd = (1.0 - F) * (1.0 - params.Metalness);
|
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);
|
vec3 specularBRDF = (F * D * G) / max(Epsilon, 4.0 * cosLi * params.NdotV);
|
||||||
|
|
||||||
return (diffuseBRDF + specularBRDF) * Lradiance * cosLi * attenuation;
|
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);
|
float G = GeometrySmith(m_Params.Normal, m_Params.View, Li, m_Params.Roughness);
|
||||||
|
|
||||||
vec3 kd = (1.0 - F) * (1.0 - m_Params.Metalness);
|
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);
|
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 irradiance = texture(u_EnvIrradianceTex, m_Params.Normal).rgb;
|
||||||
vec3 F = fresnelSchlickRoughness(F0, m_Params.NdotV, m_Params.Roughness);
|
vec3 F = fresnelSchlickRoughness(F0, m_Params.NdotV, m_Params.Roughness);
|
||||||
vec3 kd = (1.0 - F) * (1.0 - m_Params.Metalness);
|
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);
|
int u_EnvRadianceTexLevels = textureQueryLevels(u_EnvRadianceTex);
|
||||||
vec3 specularIrradiance = textureLod(
|
vec3 specularIrradiance = textureLod(
|
||||||
@ -405,7 +405,7 @@ float ComputeShadow(vec4 fragPosLightSpace, float NdotL)
|
|||||||
|
|
||||||
void main()
|
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.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 = u_RoughnessTexToggle > 0.5 ? texture(u_RoughnessTexture, vs_Input.TexCoord).r : u_Roughness;
|
||||||
m_Params.Roughness = max(m_Params.Roughness, 0.05);
|
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 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
|
// Shadow
|
||||||
float shadowFactor = 1.0;
|
float shadowFactor = 1.0;
|
||||||
@ -453,7 +453,8 @@ void main()
|
|||||||
|
|
||||||
vec3 iblContribution = IBL(F0, Lr) * u_IBLContribution;
|
vec3 iblContribution = IBL(F0, Lr) * u_IBLContribution;
|
||||||
|
|
||||||
color = vec4(lightContribution + iblContribution, 1.0);
|
|
||||||
|
color = vec4(lightContribution + iblContribution, m_Params.Albedo.a);
|
||||||
|
|
||||||
// Bloom
|
// Bloom
|
||||||
float brightness = dot(color.rgb, vec3(0.2126, 0.7152, 0.0722));
|
float brightness = dot(color.rgb, vec3(0.2126, 0.7152, 0.0722));
|
||||||
|
|||||||
Reference in New Issue
Block a user