Fix Filament emissive material factors

This commit is contained in:
devshahofficial
2026-06-13 15:58:30 -07:00
parent 67a1ea6dca
commit 7646a56e82
18 changed files with 50 additions and 22 deletions
+5 -2
View File
@@ -25,7 +25,8 @@ material {
{ type : sampler2d, name : Emissive },
{ type : float4, name : BaseColorFactor },
{ type : float, name : MetallicFactor },
{ type : float, name : RoughnessFactor }
{ type : float, name : RoughnessFactor },
{ type : float, name : EmissiveFactor }
],
requires : [
@@ -48,6 +49,8 @@ fragment {
material.metallic = materialParams.MetallicFactor;
material.metallic *= texture(materialParams_Metallic, uv).r;
material.emissive = texture(materialParams_Emissive, uv);
material.emissive.a = 1.0 - material.emissive.a;
material.emissive.rgb *= materialParams.EmissiveFactor;
material.emissive.a = (1.0 - material.emissive.a) *
materialParams.EmissiveFactor;
}
}
+5 -2
View File
@@ -23,7 +23,8 @@ material {
{ type : sampler2d, name : Emissive },
{ type : float4, name : BaseColorFactor },
{ type : float, name : MetallicFactor },
{ type : float, name : RoughnessFactor }
{ type : float, name : RoughnessFactor },
{ type : float, name : EmissiveFactor }
],
requires : [
uv0
@@ -45,6 +46,8 @@ fragment {
material.metallic = materialParams.MetallicFactor;
material.metallic *= texture(materialParams_ORM, uv).b;
material.emissive = texture(materialParams_Emissive, uv);
material.emissive.a = 1.0 - material.emissive.a;
material.emissive.rgb *= materialParams.EmissiveFactor;
material.emissive.a = (1.0 - material.emissive.a) *
materialParams.EmissiveFactor;
}
}
@@ -25,7 +25,8 @@ material {
{ type : sampler2d, name : Emissive },
{ type : float4, name : BaseColorFactor },
{ type : float, name : MetallicFactor },
{ type : float, name : RoughnessFactor }
{ type : float, name : RoughnessFactor },
{ type : float, name : EmissiveFactor }
],
requires : [
uv0
@@ -48,6 +49,8 @@ fragment {
material.metallic = materialParams.MetallicFactor;
material.metallic *= texture(materialParams_ORM, uv).b;
material.emissive = texture(materialParams_Emissive, uv);
material.emissive.a = 1.0 - material.emissive.a;
material.emissive.rgb *= materialParams.EmissiveFactor;
material.emissive.a = (1.0 - material.emissive.a) *
materialParams.EmissiveFactor;
}
}
@@ -27,7 +27,8 @@ material {
{ type : sampler2d, name : Emissive },
{ type : float4, name : BaseColorFactor },
{ type : float, name : MetallicFactor },
{ type : float, name : RoughnessFactor }
{ type : float, name : RoughnessFactor },
{ type : float, name : EmissiveFactor }
],
requires : [
@@ -51,6 +52,8 @@ fragment {
material.metallic = materialParams.MetallicFactor;
material.metallic *= texture(materialParams_Metallic, uv).r;
material.emissive = texture(materialParams_Emissive, uv);
material.emissive.a = 1.0 - material.emissive.a;
material.emissive.rgb *= materialParams.EmissiveFactor;
material.emissive.a = (1.0 - material.emissive.a) *
materialParams.EmissiveFactor;
}
}
+2 -1
View File
@@ -45,6 +45,7 @@ fragment {
material.baseColor *= texture(materialParams_BaseColor, uv);
material.specularColor = vec3(materialParams.SpecularFactor);
material.glossiness = materialParams.GlossinessFactor;
material.emissive = vec4(materialParams.EmissiveFactor);
material.emissive = vec4(
materialParams.BaseColorFactor.rgb * materialParams.EmissiveFactor, 0.0);
}
}
+2 -1
View File
@@ -46,6 +46,7 @@ fragment {
material.baseColor *= texture(materialParams_BaseColor, uv);
material.specularColor = vec3(materialParams.SpecularFactor);
material.glossiness = materialParams.GlossinessFactor;
material.emissive = vec4(materialParams.EmissiveFactor);
material.emissive = vec4(
materialParams.BaseColorFactor.rgb * materialParams.EmissiveFactor, 0.0);
}
}
@@ -48,7 +48,8 @@ fragment {
material.baseColor *= texture(materialParams_BaseColor, uv);
material.specularColor = vec3(materialParams.SpecularFactor);
material.glossiness = materialParams.GlossinessFactor;
material.emissive = vec4(materialParams.EmissiveFactor);
material.emissive = vec4(
materialParams.BaseColorFactor.rgb * materialParams.EmissiveFactor, 0.0);
// Apply reflection.
vec4 reflection = texture(materialParams_Reflection, screen_uv);
+2 -1
View File
@@ -37,6 +37,7 @@ fragment {
material.baseColor *= texture(materialParams_BaseColor, uv);
material.specularColor = vec3(materialParams.SpecularFactor);
material.glossiness = materialParams.GlossinessFactor;
material.emissive = vec4(materialParams.EmissiveFactor);
material.emissive = vec4(
materialParams.BaseColorFactor.rgb * materialParams.EmissiveFactor, 0.0);
}
}
@@ -38,6 +38,7 @@ fragment {
material.baseColor *= texture(materialParams_BaseColor, uv);
material.specularColor = vec3(materialParams.SpecularFactor);
material.glossiness = materialParams.GlossinessFactor;
material.emissive = vec4(materialParams.EmissiveFactor);
material.emissive = vec4(
materialParams.BaseColorFactor.rgb * materialParams.EmissiveFactor, 0.0);
}
}
@@ -40,7 +40,8 @@ fragment {
material.baseColor *= texture(materialParams_BaseColor, uv);
material.specularColor = vec3(materialParams.SpecularFactor);
material.glossiness = materialParams.GlossinessFactor;
material.emissive = vec4(materialParams.EmissiveFactor);
material.emissive = vec4(
materialParams.BaseColorFactor.rgb * materialParams.EmissiveFactor, 0.0);
// Apply reflection.
vec4 reflection = texture(materialParams_Reflection, screen_uv);
+2 -1
View File
@@ -29,6 +29,7 @@ fragment {
material.baseColor = materialParams.BaseColorFactor;
material.specularColor = vec3(materialParams.SpecularFactor);
material.glossiness = materialParams.GlossinessFactor;
material.emissive = vec4(materialParams.EmissiveFactor);
material.emissive = vec4(
materialParams.BaseColorFactor.rgb * materialParams.EmissiveFactor, 0.0);
}
}
@@ -30,6 +30,7 @@ fragment {
material.baseColor = materialParams.BaseColorFactor;
material.specularColor = vec3(materialParams.SpecularFactor);
material.glossiness = materialParams.GlossinessFactor;
material.emissive = vec4(materialParams.EmissiveFactor);
material.emissive = vec4(
materialParams.BaseColorFactor.rgb * materialParams.EmissiveFactor, 0.0);
}
}
@@ -33,7 +33,8 @@ fragment {
material.baseColor = materialParams.BaseColorFactor;
material.specularColor = vec3(materialParams.SpecularFactor);
material.glossiness = materialParams.GlossinessFactor;
material.emissive = vec4(materialParams.EmissiveFactor);
material.emissive = vec4(
materialParams.BaseColorFactor.rgb * materialParams.EmissiveFactor, 0.0);
// Apply reflection.
vec4 reflection = texture(materialParams_Reflection, screen_uv);
+2 -1
View File
@@ -44,6 +44,7 @@ fragment {
material.baseColor *= texture(materialParams_BaseColor, uv);
material.specularColor = vec3(materialParams.SpecularFactor);
material.glossiness = materialParams.GlossinessFactor;
material.emissive = vec4(materialParams.EmissiveFactor);
material.emissive = vec4(
materialParams.BaseColorFactor.rgb * materialParams.EmissiveFactor, 0.0);
}
}
@@ -45,6 +45,7 @@ fragment {
material.baseColor *= texture(materialParams_BaseColor, uv);
material.specularColor = vec3(materialParams.SpecularFactor);
material.glossiness = materialParams.GlossinessFactor;
material.emissive = vec4(materialParams.EmissiveFactor);
material.emissive = vec4(
materialParams.BaseColorFactor.rgb * materialParams.EmissiveFactor, 0.0);
}
}
@@ -47,7 +47,8 @@ fragment {
material.baseColor *= texture(materialParams_BaseColor, uv);
material.specularColor = vec3(materialParams.SpecularFactor);
material.glossiness = materialParams.GlossinessFactor;
material.emissive = vec4(materialParams.EmissiveFactor);
material.emissive = vec4(
materialParams.BaseColorFactor.rgb * materialParams.EmissiveFactor, 0.0);
// Apply reflection.
vec4 reflection = texture(materialParams_Reflection, screen_uv);
+5 -1
View File
@@ -251,7 +251,11 @@ void MaterialManager::UpdateMaterialInstance(
color);
}
if (fmaterial->hasParameter("EmissiveFactor")) {
instance->setParameter("EmissiveFactor", material.emissive);
const float emissive =
material.emissive > 0
? material.emissive
: (material.emissive_texture != nullptr ? 1.0f : 0.0f);
instance->setParameter("EmissiveFactor", emissive);
}
if (fmaterial->hasParameter("SpecularFactor")) {
instance->setParameter("SpecularFactor", material.specular);
+1 -1
View File
@@ -115,7 +115,7 @@ ObjectManager::ObjectManager(filament::Engine* engine) : engine_(engine) {
fallback_textures_[mjTEXROLE_ROUGHNESS] = fallback_white_;
fallback_textures_[mjTEXROLE_METALLIC] = fallback_black_;
fallback_textures_[mjTEXROLE_NORMAL] = fallback_normal_;
fallback_textures_[mjTEXROLE_EMISSIVE] = fallback_black_;
fallback_textures_[mjTEXROLE_EMISSIVE] = fallback_white_;
fallback_textures_[mjTEXROLE_ORM] = fallback_orm_;
CreateQuadBuffers();