From 7646a56e8213247731b71f08f70fbb4a4f5d447f Mon Sep 17 00:00:00 2001 From: devshahofficial Date: Sat, 13 Jun 2026 15:58:30 -0700 Subject: [PATCH] Fix Filament emissive material factors --- src/render/filament/assets/pbr.mat | 7 +++++-- src/render/filament/assets/pbr_packed.mat | 7 +++++-- src/render/filament/assets/pbr_packed_transparent.mat | 7 +++++-- src/render/filament/assets/pbr_transparent.mat | 7 +++++-- src/render/filament/assets/phong_2d.mat | 3 ++- src/render/filament/assets/phong_2d_fade.mat | 3 ++- src/render/filament/assets/phong_2d_reflect.mat | 3 ++- src/render/filament/assets/phong_2d_uv.mat | 3 ++- src/render/filament/assets/phong_2d_uv_fade.mat | 3 ++- src/render/filament/assets/phong_2d_uv_reflect.mat | 3 ++- src/render/filament/assets/phong_color.mat | 3 ++- src/render/filament/assets/phong_color_fade.mat | 3 ++- src/render/filament/assets/phong_color_reflect.mat | 3 ++- src/render/filament/assets/phong_cube.mat | 3 ++- src/render/filament/assets/phong_cube_fade.mat | 3 ++- src/render/filament/assets/phong_cube_reflect.mat | 3 ++- src/render/filament/core/material_manager.cc | 6 +++++- src/render/filament/core/object_manager.cc | 2 +- 18 files changed, 50 insertions(+), 22 deletions(-) diff --git a/src/render/filament/assets/pbr.mat b/src/render/filament/assets/pbr.mat index 2c1611f4..5da47efc 100644 --- a/src/render/filament/assets/pbr.mat +++ b/src/render/filament/assets/pbr.mat @@ -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; } } diff --git a/src/render/filament/assets/pbr_packed.mat b/src/render/filament/assets/pbr_packed.mat index 8626bf3e..ecd7bfa0 100644 --- a/src/render/filament/assets/pbr_packed.mat +++ b/src/render/filament/assets/pbr_packed.mat @@ -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; } } diff --git a/src/render/filament/assets/pbr_packed_transparent.mat b/src/render/filament/assets/pbr_packed_transparent.mat index 88b0a003..fbc2f748 100644 --- a/src/render/filament/assets/pbr_packed_transparent.mat +++ b/src/render/filament/assets/pbr_packed_transparent.mat @@ -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; } } diff --git a/src/render/filament/assets/pbr_transparent.mat b/src/render/filament/assets/pbr_transparent.mat index eb69d440..f4f2eb10 100644 --- a/src/render/filament/assets/pbr_transparent.mat +++ b/src/render/filament/assets/pbr_transparent.mat @@ -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; } } diff --git a/src/render/filament/assets/phong_2d.mat b/src/render/filament/assets/phong_2d.mat index e3aacba5..06c873eb 100644 --- a/src/render/filament/assets/phong_2d.mat +++ b/src/render/filament/assets/phong_2d.mat @@ -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); } } diff --git a/src/render/filament/assets/phong_2d_fade.mat b/src/render/filament/assets/phong_2d_fade.mat index 2c934425..15f690e3 100644 --- a/src/render/filament/assets/phong_2d_fade.mat +++ b/src/render/filament/assets/phong_2d_fade.mat @@ -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); } } diff --git a/src/render/filament/assets/phong_2d_reflect.mat b/src/render/filament/assets/phong_2d_reflect.mat index 63a2c640..bbf7ba46 100644 --- a/src/render/filament/assets/phong_2d_reflect.mat +++ b/src/render/filament/assets/phong_2d_reflect.mat @@ -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); diff --git a/src/render/filament/assets/phong_2d_uv.mat b/src/render/filament/assets/phong_2d_uv.mat index 7641564a..726e9308 100644 --- a/src/render/filament/assets/phong_2d_uv.mat +++ b/src/render/filament/assets/phong_2d_uv.mat @@ -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); } } diff --git a/src/render/filament/assets/phong_2d_uv_fade.mat b/src/render/filament/assets/phong_2d_uv_fade.mat index 96430d08..bdd6f74e 100644 --- a/src/render/filament/assets/phong_2d_uv_fade.mat +++ b/src/render/filament/assets/phong_2d_uv_fade.mat @@ -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); } } diff --git a/src/render/filament/assets/phong_2d_uv_reflect.mat b/src/render/filament/assets/phong_2d_uv_reflect.mat index 8843be8f..4160167d 100644 --- a/src/render/filament/assets/phong_2d_uv_reflect.mat +++ b/src/render/filament/assets/phong_2d_uv_reflect.mat @@ -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); diff --git a/src/render/filament/assets/phong_color.mat b/src/render/filament/assets/phong_color.mat index 778c6ab6..5736cb99 100644 --- a/src/render/filament/assets/phong_color.mat +++ b/src/render/filament/assets/phong_color.mat @@ -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); } } diff --git a/src/render/filament/assets/phong_color_fade.mat b/src/render/filament/assets/phong_color_fade.mat index 34fd8c42..a33bba9a 100644 --- a/src/render/filament/assets/phong_color_fade.mat +++ b/src/render/filament/assets/phong_color_fade.mat @@ -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); } } diff --git a/src/render/filament/assets/phong_color_reflect.mat b/src/render/filament/assets/phong_color_reflect.mat index 1bd3bee0..48a9bfde 100644 --- a/src/render/filament/assets/phong_color_reflect.mat +++ b/src/render/filament/assets/phong_color_reflect.mat @@ -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); diff --git a/src/render/filament/assets/phong_cube.mat b/src/render/filament/assets/phong_cube.mat index 5240ef1d..ab134106 100644 --- a/src/render/filament/assets/phong_cube.mat +++ b/src/render/filament/assets/phong_cube.mat @@ -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); } } diff --git a/src/render/filament/assets/phong_cube_fade.mat b/src/render/filament/assets/phong_cube_fade.mat index 4f42711d..5947b31a 100644 --- a/src/render/filament/assets/phong_cube_fade.mat +++ b/src/render/filament/assets/phong_cube_fade.mat @@ -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); } } diff --git a/src/render/filament/assets/phong_cube_reflect.mat b/src/render/filament/assets/phong_cube_reflect.mat index c575246c..98fe663b 100644 --- a/src/render/filament/assets/phong_cube_reflect.mat +++ b/src/render/filament/assets/phong_cube_reflect.mat @@ -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); diff --git a/src/render/filament/core/material_manager.cc b/src/render/filament/core/material_manager.cc index 73545b40..54ff0c70 100644 --- a/src/render/filament/core/material_manager.cc +++ b/src/render/filament/core/material_manager.cc @@ -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); diff --git a/src/render/filament/core/object_manager.cc b/src/render/filament/core/object_manager.cc index 3cb7455b..d0384376 100644 --- a/src/render/filament/core/object_manager.cc +++ b/src/render/filament/core/object_manager.cc @@ -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();