Let we can use emissiveFactor without Texture 57/289957/2
authorEunki, Hong <eunkiki.hong@samsung.com>
Thu, 16 Mar 2023 06:49:45 +0000 (15:49 +0900)
committerEunki, Hong <eunkiki.hong@samsung.com>
Mon, 20 Mar 2023 13:20:25 +0000 (22:20 +0900)
Change-Id: Ibd8a991f45099aad1be1f2cf97c9812e39bd4969
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
dali-scene3d/internal/graphics/shaders/default-physically-based-shader.frag
dali-scene3d/internal/loader/gltf2-util.cpp
dali-scene3d/public-api/loader/node-definition.cpp
dali-scene3d/public-api/loader/shader-definition-factory.cpp

index c0ef6de..fcbcd0b 100644 (file)
@@ -58,10 +58,10 @@ uniform sampler2D sOcclusion;
 uniform float uOcclusionStrength;
 #endif
 
 uniform float uOcclusionStrength;
 #endif
 
-#ifdef EMISSIVE
+#ifdef EMISSIVE_TEXTURE
 uniform sampler2D sEmissive;
 uniform sampler2D sEmissive;
-uniform vec3 uEmissiveFactor;
 #endif
 #endif
+uniform vec3 uEmissiveFactor;
 
 uniform float uSpecularFactor;
 uniform vec3  uSpecularColorFactor;
 
 uniform float uSpecularFactor;
 uniform vec3  uSpecularColorFactor;
@@ -213,10 +213,12 @@ void main()
   color = mix(color, color * ao, uOcclusionStrength);
 #endif // OCCLUSION
 
   color = mix(color, color * ao, uOcclusionStrength);
 #endif // OCCLUSION
 
-#ifdef EMISSIVE
+#ifdef EMISSIVE_TEXTURE
   lowp vec3 emissive = linear(texture(sEmissive, vUV).rgb) * uEmissiveFactor;
   lowp vec3 emissive = linear(texture(sEmissive, vUV).rgb) * uEmissiveFactor;
+#else
+  lowp vec3 emissive = uEmissiveFactor;
+#endif // EMISSIVE_TEXTURE
   color += emissive;
   color += emissive;
-#endif // EMISSIVE
 
   FragColor = vec4(pow(color, vec3(1.0 / 2.2)), baseColor.a) * uColor;
 }
 
   FragColor = vec4(pow(color, vec3(1.0 / 2.2)), baseColor.a) * uColor;
 }
index b01c8ba..b44ad70 100644 (file)
@@ -420,7 +420,7 @@ TextureDefinition ConvertTextureInfo(const gltf2::TextureInfo& textureInfo, Conv
   }
 }
 
   }
 }
 
-void AddTextureStage(uint32_t semantic, MaterialDefinition& materialDefinition, gltf2::TextureInfo textureInfo, const Dali::Scene3D::Loader::ImageMetadata &metaData, ConversionContext& context)
+void AddTextureStage(uint32_t semantic, MaterialDefinition& materialDefinition, gltf2::TextureInfo textureInfo, const Dali::Scene3D::Loader::ImageMetadatametaData, ConversionContext& context)
 {
   materialDefinition.mTextureStages.push_back({semantic, ConvertTextureInfo(textureInfo, context, metaData)});
   materialDefinition.mFlags |= semantic;
 {
   materialDefinition.mTextureStages.push_back({semantic, ConvertTextureInfo(textureInfo, context, metaData)});
   materialDefinition.mFlags |= semantic;
@@ -428,8 +428,7 @@ void AddTextureStage(uint32_t semantic, MaterialDefinition& materialDefinition,
 
 void ConvertMaterial(const gltf2::Material& material, const std::unordered_map<std::string, ImageMetadata>& imageMetaData, decltype(ResourceBundle::mMaterials)& outMaterials, ConversionContext& context)
 {
 
 void ConvertMaterial(const gltf2::Material& material, const std::unordered_map<std::string, ImageMetadata>& imageMetaData, decltype(ResourceBundle::mMaterials)& outMaterials, ConversionContext& context)
 {
-  auto getTextureMetaData = [](const std::unordered_map<std::string, ImageMetadata>& metaData, const gltf2::TextureInfo& info)
-  {
+  auto getTextureMetaData = [](const std::unordered_map<std::string, ImageMetadata>& metaData, const gltf2::TextureInfo& info) {
     if(!info.mTexture->mSource->mUri.empty())
     {
       if(auto search = metaData.find(info.mTexture->mSource->mUri.data()); search != metaData.end())
     if(!info.mTexture->mSource->mUri.empty())
     {
       if(auto search = metaData.find(info.mTexture->mSource->mUri.data()); search != metaData.end())
@@ -498,10 +497,10 @@ void ConvertMaterial(const gltf2::Material& material, const std::unordered_map<s
     materialDefinition.mOcclusionStrength = material.mOcclusionTexture.mStrength;
   }
 
     materialDefinition.mOcclusionStrength = material.mOcclusionTexture.mStrength;
   }
 
+  materialDefinition.mEmissiveFactor = material.mEmissiveFactor;
   if(material.mEmissiveTexture)
   {
     AddTextureStage(MaterialDefinition::EMISSIVE, materialDefinition, material.mEmissiveTexture, getTextureMetaData(imageMetaData, material.mEmissiveTexture), context);
   if(material.mEmissiveTexture)
   {
     AddTextureStage(MaterialDefinition::EMISSIVE, materialDefinition, material.mEmissiveTexture, getTextureMetaData(imageMetaData, material.mEmissiveTexture), context);
-    materialDefinition.mEmissiveFactor = material.mEmissiveFactor;
   }
 
   if(!Dali::Equals(material.mMaterialExtensions.mMaterialIor.mIor, gltf2::UNDEFINED_FLOAT_VALUE))
   }
 
   if(!Dali::Equals(material.mMaterialExtensions.mMaterialIor.mIor, gltf2::UNDEFINED_FLOAT_VALUE))
@@ -771,8 +770,7 @@ void ConvertNode(gltf2::Node const& node, const Index gltfIndex, Index parentInd
   auto& resources = output.mResources;
 
   const auto index    = scene.GetNodeCount();
   auto& resources = output.mResources;
 
   const auto index    = scene.GetNodeCount();
-  auto       weakNode = scene.AddNode([&]()
-                                {
+  auto       weakNode = scene.AddNode([&]() {
     std::unique_ptr<NodeDefinition> nodeDefinition{new NodeDefinition()};
 
     nodeDefinition->mParentIdx = parentIndex;
     std::unique_ptr<NodeDefinition> nodeDefinition{new NodeDefinition()};
 
     nodeDefinition->mParentIdx = parentIndex;
index f110150..2dbd1a9 100644 (file)
@@ -237,14 +237,11 @@ void ModelRenderable::OnCreate(const NodeDefinition& node, NodeDefinition::Creat
   actor.RegisterProperty("uSpecularFactor", matDef.mSpecularFactor);
   actor.RegisterProperty("uSpecularColorFactor", matDef.mSpecularColorFactor);
   actor.RegisterProperty("uNormalScale", matDef.mNormalScale);
   actor.RegisterProperty("uSpecularFactor", matDef.mSpecularFactor);
   actor.RegisterProperty("uSpecularColorFactor", matDef.mSpecularColorFactor);
   actor.RegisterProperty("uNormalScale", matDef.mNormalScale);
+  actor.RegisterProperty("uEmissiveFactor", matDef.mEmissiveFactor);
   if(matDef.mFlags & MaterialDefinition::OCCLUSION)
   {
     renderer.RegisterProperty("uOcclusionStrength", matDef.mOcclusionStrength);
   }
   if(matDef.mFlags & MaterialDefinition::OCCLUSION)
   {
     renderer.RegisterProperty("uOcclusionStrength", matDef.mOcclusionStrength);
   }
-  if(matDef.mFlags & MaterialDefinition::EMISSIVE)
-  {
-    renderer.RegisterProperty("uEmissiveFactor", matDef.mEmissiveFactor);
-  }
 
   Index envIdx = matDef.mEnvironmentIdx;
   renderer.RegisterProperty(IBL_INTENSITY_STRING.data(), resources.mEnvironmentMaps[envIdx].first.mIblIntensity);
 
   Index envIdx = matDef.mEnvironmentIdx;
   renderer.RegisterProperty(IBL_INTENSITY_STRING.data(), resources.mEnvironmentMaps[envIdx].first.mIblIntensity);
index 5db7ab0..1832bfd 100644 (file)
@@ -291,7 +291,7 @@ Index ShaderDefinitionFactory::ProduceShader(NodeDefinition::Renderable& rendera
 
     if(MaskMatch(materialDef.mFlags, MaterialDefinition::EMISSIVE))
     {
 
     if(MaskMatch(materialDef.mFlags, MaterialDefinition::EMISSIVE))
     {
-      shaderDef.mDefines.push_back("EMISSIVE");
+      shaderDef.mDefines.push_back("EMISSIVE_TEXTURE");
     }
 
     if(MaskMatch(materialDef.mFlags, MaterialDefinition::SPECULAR))
     }
 
     if(MaskMatch(materialDef.mFlags, MaterialDefinition::SPECULAR))