Add Set/Get ImageBasedLight ScaleFactor 01/281201/8
authorseungho <sbsh.baek@samsung.com>
Wed, 14 Sep 2022 07:12:58 +0000 (16:12 +0900)
committerseungho <sbsh.baek@samsung.com>
Mon, 19 Sep 2022 03:19:28 +0000 (12:19 +0900)
Change-Id: I559cc0684b2c05b4af7639e226e4c4ea0a4dbf9e
Signed-off-by: seungho <sbsh.baek@samsung.com>
automated-tests/src/dali-scene3d/utc-Dali-ModelView.cpp
automated-tests/src/dali-scene3d/utc-Dali-SceneView.cpp
dali-scene3d/internal/controls/model-view/model-view-impl.cpp
dali-scene3d/internal/controls/model-view/model-view-impl.h
dali-scene3d/internal/controls/scene-view/scene-view-impl.cpp
dali-scene3d/internal/controls/scene-view/scene-view-impl.h
dali-scene3d/public-api/controls/model-view/model-view.cpp
dali-scene3d/public-api/controls/model-view/model-view.h
dali-scene3d/public-api/controls/scene-view/scene-view.cpp
dali-scene3d/public-api/controls/scene-view/scene-view.h

index 6e3d08f..fb9f435 100644 (file)
@@ -405,6 +405,19 @@ int UtcDaliModelViewSetImageBasedLightSource03(void)
   END_TEST;
 }
 
   END_TEST;
 }
 
+int UtcDaliModelViewImageBasedFactor(void)
+{
+  ToolkitTestApplication application;
+
+  Scene3D::ModelView modelView = Scene3D::ModelView::New(TEST_GLTF_FILE_NAME);
+
+  DALI_TEST_EQUALS(modelView.GetImageBasedLightScaleFactor(), 1.0f, TEST_LOCATION);
+
+  modelView.SetImageBasedLightScaleFactor(0.5f);
+  DALI_TEST_EQUALS(modelView.GetImageBasedLightScaleFactor(), 0.5f, TEST_LOCATION);
+  END_TEST;
+}
+
 int UtcDaliModelViewFitSize01(void)
 {
   ToolkitTestApplication application;
 int UtcDaliModelViewFitSize01(void)
 {
   ToolkitTestApplication application;
index a6a8332..58bcab0 100644 (file)
@@ -461,6 +461,30 @@ int UtcDaliSceneViewImageBasedLight(void)
   END_TEST;
 }
 
   END_TEST;
 }
 
+int UtcDaliSceneViewImageBasedFactor(void)
+{
+  ToolkitTestApplication application;
+
+  Scene3D::SceneView view = Scene3D::SceneView::New();
+  view.SetProperty(Dali::Actor::Property::SIZE, Vector2(100, 100));
+
+  application.GetScene().Add(view);
+
+  application.SendNotification();
+  application.Render();
+
+  Scene3D::ModelView modelView1 = Scene3D::ModelView::New(TEST_GLTF_FILE_NAME);
+  view.Add(modelView1);
+
+  DALI_TEST_EQUALS(view.GetImageBasedLightScaleFactor(), 1.0f, TEST_LOCATION);
+  DALI_TEST_EQUALS(modelView1.GetImageBasedLightScaleFactor(), 1.0f, TEST_LOCATION);
+
+  view.SetImageBasedLightScaleFactor(0.5f);
+  DALI_TEST_EQUALS(view.GetImageBasedLightScaleFactor(), 0.5f, TEST_LOCATION);
+  DALI_TEST_EQUALS(modelView1.GetImageBasedLightScaleFactor(), 0.5f, TEST_LOCATION);
+  END_TEST;
+}
+
 int UtcDaliSceneViewUseFramebuffer01(void)
 {
   ToolkitTestApplication application;
 int UtcDaliSceneViewUseFramebuffer01(void)
 {
   ToolkitTestApplication application;
index 06ed187..5bf8ece 100644 (file)
@@ -203,7 +203,7 @@ Dali::Scene3D::ModelView ModelView::New(const std::string& modelPath, const std:
   return handle;
 }
 
   return handle;
 }
 
-const Actor ModelView::GetModelRoot()
+const Actor ModelView::GetModelRoot() const
 {
   return mModelRoot;
 }
 {
   return mModelRoot;
 }
@@ -240,20 +240,41 @@ void ModelView::SetImageBasedLightTexture(Dali::Texture diffuse, Dali::Texture s
 {
   if(diffuse && specular)
   {
 {
   if(diffuse && specular)
   {
-    mDiffuseTexture  = diffuse;
-    mSpecularTexture = specular;
-    mIblScaleFactor  = scaleFactor;
+    if(mDiffuseTexture != diffuse || mSpecularTexture != specular)
+    {
+      mDiffuseTexture  = diffuse;
+      mSpecularTexture = specular;
+      UpdateImageBasedLightTexture();
+    }
+    if(mIblScaleFactor != scaleFactor)
+    {
+      mIblScaleFactor = scaleFactor;
+      UpdateImageBasedLightScaleFactor();
+    }
 
 
-    UpdateImageBasedLight();
   }
 }
 
   }
 }
 
-uint32_t ModelView::GetAnimationCount()
+void ModelView::SetImageBasedLightScaleFactor(float scaleFactor)
+{
+  mIblScaleFactor = scaleFactor;
+  if(mDiffuseTexture && mSpecularTexture)
+  {
+    UpdateImageBasedLightScaleFactor();
+  }
+}
+
+float ModelView::GetImageBasedLightScaleFactor() const
+{
+  return mIblScaleFactor;
+}
+
+uint32_t ModelView::GetAnimationCount() const
 {
   return mAnimations.size();
 }
 
 {
   return mAnimations.size();
 }
 
-Dali::Animation ModelView::GetAnimation(uint32_t index)
+Dali::Animation ModelView::GetAnimation(uint32_t index) const
 {
   Dali::Animation animation;
   if(mAnimations.size() > index)
 {
   Dali::Animation animation;
   if(mAnimations.size() > index)
@@ -263,7 +284,7 @@ Dali::Animation ModelView::GetAnimation(uint32_t index)
   return animation;
 }
 
   return animation;
 }
 
-Dali::Animation ModelView::GetAnimation(const std::string& name)
+Dali::Animation ModelView::GetAnimation(const std::string& name) const
 {
   Dali::Animation animation;
   if(!name.empty())
 {
   Dali::Animation animation;
   if(!name.empty())
@@ -461,7 +482,8 @@ void ModelView::LoadModel()
 
   mRenderableActors.clear();
   CollectRenderableActor(mModelRoot);
 
   mRenderableActors.clear();
   CollectRenderableActor(mModelRoot);
-  UpdateImageBasedLight();
+  UpdateImageBasedLightTexture();
+  UpdateImageBasedLightScaleFactor();
 
   mNaturalSize = AABB.CalculateSize();
   mModelPivot  = AABB.CalculatePivot();
 
   mNaturalSize = AABB.CalculateSize();
   mModelPivot  = AABB.CalculatePivot();
@@ -541,7 +563,7 @@ void ModelView::CollectRenderableActor(Actor actor)
   }
 }
 
   }
 }
 
-void ModelView::UpdateImageBasedLight()
+void ModelView::UpdateImageBasedLightTexture()
 {
   if(!mDiffuseTexture || !mSpecularTexture)
   {
 {
   if(!mDiffuseTexture || !mSpecularTexture)
   {
@@ -553,8 +575,6 @@ void ModelView::UpdateImageBasedLight()
     Actor renderableActor = actor.GetHandle();
     if(renderableActor)
     {
     Actor renderableActor = actor.GetHandle();
     if(renderableActor)
     {
-      renderableActor.RegisterProperty(Dali::Scene3D::Loader::NodeDefinition::GetIblScaleFactorUniformName().data(), mIblScaleFactor);
-
       uint32_t rendererCount = renderableActor.GetRendererCount();
       for(uint32_t i = 0; i < rendererCount; ++i)
       {
       uint32_t rendererCount = renderableActor.GetRendererCount();
       for(uint32_t i = 0; i < rendererCount; ++i)
       {
@@ -578,6 +598,22 @@ void ModelView::UpdateImageBasedLight()
   }
 }
 
   }
 }
 
+void ModelView::UpdateImageBasedLightScaleFactor()
+{
+  if(!mDiffuseTexture || !mSpecularTexture)
+  {
+    return;
+  }
+  for(auto&& actor : mRenderableActors)
+  {
+    Actor renderableActor = actor.GetHandle();
+    if(renderableActor)
+    {
+      renderableActor.RegisterProperty(Dali::Scene3D::Loader::NodeDefinition::GetIblScaleFactorUniformName().data(), mIblScaleFactor);
+    }
+  }
+}
+
 } // namespace Internal
 } // namespace Scene3D
 } // namespace Dali
 } // namespace Internal
 } // namespace Scene3D
 } // namespace Dali
index 2ec360f..77315e3 100644 (file)
@@ -55,7 +55,7 @@ public:
   /**
    * @copydoc ModelView::GetModelRoot()
    */
   /**
    * @copydoc ModelView::GetModelRoot()
    */
-  const Actor GetModelRoot();
+  const Actor GetModelRoot() const;
 
   /**
    * @copydoc ModelView::FitModel()
 
   /**
    * @copydoc ModelView::FitModel()
@@ -78,19 +78,29 @@ public:
   void SetImageBasedLightTexture(Dali::Texture diffuse, Dali::Texture specular, float scaleFactor);
 
   /**
   void SetImageBasedLightTexture(Dali::Texture diffuse, Dali::Texture specular, float scaleFactor);
 
   /**
+   * @copydoc ModelView::SetImageBasedLightScaleFactor()
+   */
+  void SetImageBasedLightScaleFactor(float scaleFactor);
+
+  /**
+   * @copydoc ModelView::GetImageBasedLightScaleFactor()
+   */
+  float GetImageBasedLightScaleFactor() const;
+
+  /**
    * @copydoc ModelView::GetAnimationCount()
    */
    * @copydoc ModelView::GetAnimationCount()
    */
-  uint32_t GetAnimationCount();
+  uint32_t GetAnimationCount() const;
 
   /**
    * @copydoc ModelView::GetAnimation()
    */
 
   /**
    * @copydoc ModelView::GetAnimation()
    */
-  Dali::Animation GetAnimation(uint32_t index);
+  Dali::Animation GetAnimation(uint32_t index) const;
 
   /**
    * @copydoc ModelView::GetAnimation()
    */
 
   /**
    * @copydoc ModelView::GetAnimation()
    */
-  Dali::Animation GetAnimation(const std::string& name);
+  Dali::Animation GetAnimation(const std::string& name) const;
 
 protected:
   /**
 
 protected:
   /**
@@ -160,9 +170,14 @@ private:
   void CollectRenderableActor(Actor actor);
 
   /**
   void CollectRenderableActor(Actor actor);
 
   /**
-   * @brief Changes IBL information of the input node.
+   * @brief Changes IBL textures of the input node.
+   */
+  void UpdateImageBasedLightTexture();
+
+  /**
+   * @brief Changes IBL scale factor of the input node.
    */
    */
-  void UpdateImageBasedLight();
+  void UpdateImageBasedLightScaleFactor();
 
 private:
   std::string                    mModelPath;
 
 private:
   std::string                    mModelPath;
index 99ddef2..f0afd0d 100644 (file)
@@ -118,17 +118,17 @@ void SceneView::RemoveCamera(CameraActor camera)
   }
 }
 
   }
 }
 
-uint32_t SceneView::GetCameraCount()
+uint32_t SceneView::GetCameraCount() const
 {
   return mCameras.size();
 }
 
 {
   return mCameras.size();
 }
 
-CameraActor SceneView::GetSelectedCamera()
+CameraActor SceneView::GetSelectedCamera() const
 {
   return mSelectedCamera;
 }
 
 {
   return mSelectedCamera;
 }
 
-CameraActor SceneView::GetCamera(uint32_t index)
+CameraActor SceneView::GetCamera(uint32_t index) const
 {
   if(index < mCameras.size())
   {
 {
   if(index < mCameras.size())
   {
@@ -138,7 +138,7 @@ CameraActor SceneView::GetCamera(uint32_t index)
   return CameraActor();
 }
 
   return CameraActor();
 }
 
-CameraActor SceneView::GetCamera(const std::string& name)
+CameraActor SceneView::GetCamera(const std::string& name) const
 {
   CameraActor returnCamera;
   for(auto&& camera : mCameras)
 {
   CameraActor returnCamera;
   for(auto&& camera : mCameras)
@@ -212,6 +212,23 @@ void SceneView::SetImageBasedLightSource(const std::string& diffuse, const std::
   Control::SetResourceReady(false);
 }
 
   Control::SetResourceReady(false);
 }
 
+void SceneView::SetImageBasedLightScaleFactor(float scaleFactor)
+{
+  mIblScaleFactor = scaleFactor;
+  for(auto&& model : mModels)
+  {
+    if(model)
+    {
+      model.SetImageBasedLightScaleFactor(scaleFactor);
+    }
+  }
+}
+
+float SceneView::GetImageBasedLightScaleFactor() const
+{
+  return mIblScaleFactor;
+}
+
 void SceneView::UseFramebuffer(bool useFramebuffer)
 {
   if(mUseFrameBuffer != useFramebuffer)
 void SceneView::UseFramebuffer(bool useFramebuffer)
 {
   if(mUseFrameBuffer != useFramebuffer)
@@ -221,7 +238,7 @@ void SceneView::UseFramebuffer(bool useFramebuffer)
   }
 }
 
   }
 }
 
-bool SceneView::IsUsingFramebuffer()
+bool SceneView::IsUsingFramebuffer() const
 {
   return mUseFrameBuffer;
 }
 {
   return mUseFrameBuffer;
 }
index e3de91e..f61ad8a 100644 (file)
@@ -67,22 +67,22 @@ public:
   /**
    * @copydoc SceneView::GetCameraCount()
    */
   /**
    * @copydoc SceneView::GetCameraCount()
    */
-  uint32_t GetCameraCount();
+  uint32_t GetCameraCount() const;
 
   /**
    * @copydoc SceneView::GetSelectedCamera()
    */
 
   /**
    * @copydoc SceneView::GetSelectedCamera()
    */
-  CameraActor GetSelectedCamera();
+  CameraActor GetSelectedCamera() const;
 
   /**
    * @copydoc SceneView::GetCamera()
    */
 
   /**
    * @copydoc SceneView::GetCamera()
    */
-  CameraActor GetCamera(uint32_t index);
+  CameraActor GetCamera(uint32_t index) const;
 
   /**
    * @copydoc SceneView::GetCamera()
    */
 
   /**
    * @copydoc SceneView::GetCamera()
    */
-  CameraActor GetCamera(const std::string& name);
+  CameraActor GetCamera(const std::string& name) const;
 
   /**
    * @copydoc SceneView::SelectCamera()
 
   /**
    * @copydoc SceneView::SelectCamera()
@@ -116,6 +116,16 @@ public:
   void SetImageBasedLightSource(const std::string& diffuse, const std::string& specular, float scaleFactor);
 
   /**
   void SetImageBasedLightSource(const std::string& diffuse, const std::string& specular, float scaleFactor);
 
   /**
+   * @copydoc SceneView::SetImageBasedLightScaleFactor()
+   */
+  void SetImageBasedLightScaleFactor(float scaleFactor);
+
+  /**
+   * @copydoc SceneView::GetImageBasedLightScaleFactor()
+   */
+  float GetImageBasedLightScaleFactor() const;
+
+  /**
    * @copydoc SceneView::UseFramebuffer()
    */
   void UseFramebuffer(bool useFramebuffer);
    * @copydoc SceneView::UseFramebuffer()
    */
   void UseFramebuffer(bool useFramebuffer);
@@ -123,7 +133,7 @@ public:
   /**
    * @copydoc SceneView::IsUsingFramebuffer()
    */
   /**
    * @copydoc SceneView::IsUsingFramebuffer()
    */
-  bool IsUsingFramebuffer();
+  bool IsUsingFramebuffer() const;
 
 protected:
   /**
 
 protected:
   /**
index a799377..5d5ede5 100644 (file)
@@ -62,7 +62,7 @@ ModelView::ModelView(Dali::Internal::CustomActor* internal)
   VerifyCustomActorPointer<Internal::ModelView>(internal);
 }
 
   VerifyCustomActorPointer<Internal::ModelView>(internal);
 }
 
-const Actor ModelView::GetModelRoot()
+const Actor ModelView::GetModelRoot() const
 {
   return GetImpl(*this).GetModelRoot();
 }
 {
   return GetImpl(*this).GetModelRoot();
 }
@@ -87,17 +87,27 @@ void ModelView::SetImageBasedLightTexture(Texture diffuse, Texture specular, flo
   GetImpl(*this).SetImageBasedLightTexture(diffuse, specular, scaleFactor);
 }
 
   GetImpl(*this).SetImageBasedLightTexture(diffuse, specular, scaleFactor);
 }
 
-uint32_t ModelView::GetAnimationCount()
+void ModelView::SetImageBasedLightScaleFactor(float scaleFactor)
+{
+  GetImpl(*this).SetImageBasedLightScaleFactor(scaleFactor);
+}
+
+float ModelView::GetImageBasedLightScaleFactor() const
+{
+  return GetImpl(*this).GetImageBasedLightScaleFactor();
+}
+
+uint32_t ModelView::GetAnimationCount() const
 {
   return GetImpl(*this).GetAnimationCount();
 }
 
 {
   return GetImpl(*this).GetAnimationCount();
 }
 
-Dali::Animation ModelView::GetAnimation(uint32_t index)
+Dali::Animation ModelView::GetAnimation(uint32_t index) const
 {
   return GetImpl(*this).GetAnimation(index);
 }
 
 {
   return GetImpl(*this).GetAnimation(index);
 }
 
-Dali::Animation ModelView::GetAnimation(const std::string& name)
+Dali::Animation ModelView::GetAnimation(const std::string& name) const
 {
   return GetImpl(*this).GetAnimation(name);
 }
 {
   return GetImpl(*this).GetAnimation(name);
 }
index ce5e249..19ea4c3 100644 (file)
@@ -137,7 +137,7 @@ public:
    * @brief Retrieves model root Actor.
    * @return Root Actor of the model.
    */
    * @brief Retrieves model root Actor.
    * @return Root Actor of the model.
    */
-  const Actor GetModelRoot();
+  const Actor GetModelRoot() const;
 
   /**
    * @brief Fits the model to the Control size.
 
   /**
    * @brief Fits the model to the Control size.
@@ -165,7 +165,7 @@ public:
   void SetImageBasedLightSource(const std::string& diffuse, const std::string& specular, float scaleFactor = 1.0f);
 
   /**
   void SetImageBasedLightSource(const std::string& diffuse, const std::string& specular, float scaleFactor = 1.0f);
 
   /**
-   * @brief Set Image Based Light Texture.
+   * @brief Sets Image Based Light Texture.
    *
    * @param[in] diffuse cube map texture that can be used as a diffuse IBL source.
    * @param[in] specular cube map texture that can be used as a specular IBL source.
    *
    * @param[in] diffuse cube map texture that can be used as a diffuse IBL source.
    * @param[in] specular cube map texture that can be used as a specular IBL source.
@@ -176,11 +176,28 @@ public:
   void SetImageBasedLightTexture(Texture diffuse, Texture specular, float scaleFactor = 1.0f);
 
   /**
   void SetImageBasedLightTexture(Texture diffuse, Texture specular, float scaleFactor = 1.0f);
 
   /**
+   * @brief Sets Scale Factor of Image Based Light Source.
+   *
+   * @note If SetImageBasedLightSource() or SetImageBasedLightTexture() method is called after this method, scaleFactor is overrided.
+   *
+   * @param[in] scaleFactor scale factor that controls light source intensity in [0.0f, 1.0f].
+   */
+  void SetImageBasedLightScaleFactor(float scaleFactor);
+
+  /**
+   * @brief Gets Scale Factor of Image Based Light Source.
+   * Default value is 1.0f.
+   *
+   * @return scale factor that controls light source intensity.
+   */
+  float GetImageBasedLightScaleFactor() const;
+
+  /**
    * @brief Gets number of animations those loaded from model file.
    * @return The number of loaded animations.
    * @note This method should be called after Model load finished.
    */
    * @brief Gets number of animations those loaded from model file.
    * @return The number of loaded animations.
    * @note This method should be called after Model load finished.
    */
-  uint32_t GetAnimationCount();
+  uint32_t GetAnimationCount() const;
 
   /**
    * @brief Gets animation at the index.
 
   /**
    * @brief Gets animation at the index.
@@ -188,7 +205,7 @@ public:
    * @return Animation at the index.
    * @note This method should be called after Model load finished.
    */
    * @return Animation at the index.
    * @note This method should be called after Model load finished.
    */
-  Dali::Animation GetAnimation(uint32_t index);
+  Dali::Animation GetAnimation(uint32_t index) const;
 
   /**
    * @brief Retrieves animation with the given name.
 
   /**
    * @brief Retrieves animation with the given name.
@@ -196,7 +213,7 @@ public:
    * @return Animation that has the given name.
    * @note This method should be called after Model load finished.
    */
    * @return Animation that has the given name.
    * @note This method should be called after Model load finished.
    */
-  Dali::Animation GetAnimation(const std::string& name);
+  Dali::Animation GetAnimation(const std::string& name) const;
 
 public: // Not intended for application developers
   /// @cond internal
 
 public: // Not intended for application developers
   /// @cond internal
index cb07590..530d4f1 100644 (file)
@@ -72,22 +72,22 @@ void SceneView::RemoveCamera(CameraActor camera)
   GetImpl(*this).RemoveCamera(camera);
 }
 
   GetImpl(*this).RemoveCamera(camera);
 }
 
-uint32_t SceneView::GetCameraCount()
+uint32_t SceneView::GetCameraCount() const
 {
   return GetImpl(*this).GetCameraCount();
 }
 
 {
   return GetImpl(*this).GetCameraCount();
 }
 
-CameraActor SceneView::GetSelectedCamera()
+CameraActor SceneView::GetSelectedCamera() const
 {
   return GetImpl(*this).GetSelectedCamera();
 }
 
 {
   return GetImpl(*this).GetSelectedCamera();
 }
 
-CameraActor SceneView::GetCamera(uint32_t index)
+CameraActor SceneView::GetCamera(uint32_t index) const
 {
   return GetImpl(*this).GetCamera(index);
 }
 
 {
   return GetImpl(*this).GetCamera(index);
 }
 
-CameraActor SceneView::GetCamera(const std::string& name)
+CameraActor SceneView::GetCamera(const std::string& name) const
 {
   return GetImpl(*this).GetCamera(name);
 }
 {
   return GetImpl(*this).GetCamera(name);
 }
@@ -107,12 +107,22 @@ void SceneView::SetImageBasedLightSource(const std::string& diffuse, const std::
   GetImpl(*this).SetImageBasedLightSource(diffuse, specular, scaleFactor);
 }
 
   GetImpl(*this).SetImageBasedLightSource(diffuse, specular, scaleFactor);
 }
 
+void SceneView::SetImageBasedLightScaleFactor(float scaleFactor)
+{
+  GetImpl(*this).SetImageBasedLightScaleFactor(scaleFactor);
+}
+
+float SceneView::GetImageBasedLightScaleFactor() const
+{
+  return GetImpl(*this).GetImageBasedLightScaleFactor();
+}
+
 void SceneView::UseFramebuffer(bool useFramebuffer)
 {
   GetImpl(*this).UseFramebuffer(useFramebuffer);
 }
 
 void SceneView::UseFramebuffer(bool useFramebuffer)
 {
   GetImpl(*this).UseFramebuffer(useFramebuffer);
 }
 
-bool SceneView::IsUsingFramebuffer()
+bool SceneView::IsUsingFramebuffer() const
 {
   return GetImpl(*this).IsUsingFramebuffer();
 }
 {
   return GetImpl(*this).IsUsingFramebuffer();
 }
index cbbe9e0..0e4f10e 100644 (file)
@@ -195,14 +195,14 @@ public:
    *
    * @return Number of cameras those currently the SceneView contains.
    */
    *
    * @return Number of cameras those currently the SceneView contains.
    */
-  uint32_t GetCameraCount();
+  uint32_t GetCameraCount() const;
 
   /**
    * @brief Retrieves selected CameraActor.
    *
    * @return CameraActor currently used in SceneView as a selected CameraActor
    */
 
   /**
    * @brief Retrieves selected CameraActor.
    *
    * @return CameraActor currently used in SceneView as a selected CameraActor
    */
-  CameraActor GetSelectedCamera();
+  CameraActor GetSelectedCamera() const;
 
   /**
    * @brief Retrieves a CameraActor of the index.
 
   /**
    * @brief Retrieves a CameraActor of the index.
@@ -211,7 +211,7 @@ public:
    *
    * @return CameraActor of the index
    */
    *
    * @return CameraActor of the index
    */
-  CameraActor GetCamera(uint32_t index);
+  CameraActor GetCamera(uint32_t index) const;
 
   /**
    * @brief Retrieves a CameraActor of the name.
 
   /**
    * @brief Retrieves a CameraActor of the name.
@@ -220,7 +220,7 @@ public:
    *
    * @return CameraActor that has the name as a Dali::Actor::Property::NAME
    */
    *
    * @return CameraActor that has the name as a Dali::Actor::Property::NAME
    */
-  CameraActor GetCamera(const std::string& name);
+  CameraActor GetCamera(const std::string& name) const;
 
   /**
    * @brief Makes SceneView use a CameraActor of index as a selected camera.
 
   /**
    * @brief Makes SceneView use a CameraActor of index as a selected camera.
@@ -250,6 +250,24 @@ public:
   void SetImageBasedLightSource(const std::string& diffuse, const std::string& specular, float scaleFactor = 1.0f);
 
   /**
   void SetImageBasedLightSource(const std::string& diffuse, const std::string& specular, float scaleFactor = 1.0f);
 
   /**
+   * @brief Sets Scale Factor of Image Based Light Source.
+   *
+   * @note If SetImageBasedLightSource() or SetImageBasedLightTexture() method is called after this method, scaleFactor is overriden.
+   * @note Default value is 1.0f.
+   *
+   * @param[in] scaleFactor scale factor that controls light source intensity in [0.0f, 1.0f].
+   */
+  void SetImageBasedLightScaleFactor(float scaleFactor);
+
+  /**
+   * @brief Gets Scale Factor of Image Based Light Source.
+   * Default value is 1.0f.
+   *
+   * @return scale factor that controls light source intensity.
+   */
+  float GetImageBasedLightScaleFactor() const;
+
+  /**
    * @brief Sets whether to use FBO or not for the SceneView.
    * If useFramebuffer is true, rendering result of SceneView is drawn on FBO and it is mapping on this SceneView plane.
    * If useFramebuffer is false, each item in SceneView is rendered on window directly.
    * @brief Sets whether to use FBO or not for the SceneView.
    * If useFramebuffer is true, rendering result of SceneView is drawn on FBO and it is mapping on this SceneView plane.
    * If useFramebuffer is false, each item in SceneView is rendered on window directly.
@@ -267,7 +285,7 @@ public:
    *
    * @return bool True if this SceneView uses Framebuffer.
    */
    *
    * @return bool True if this SceneView uses Framebuffer.
    */
-  bool IsUsingFramebuffer();
+  bool IsUsingFramebuffer() const;
 
 public: // Not intended for application developers
   /// @cond internal
 
 public: // Not intended for application developers
   /// @cond internal