Skip to content

Commit

Permalink
Fix using lightmap and emissive map together (#1047)
Browse files Browse the repository at this point in the history
Signed-off-by: Ian Chen <[email protected]>
  • Loading branch information
iche033 authored Sep 5, 2024
1 parent 3ba2f1e commit 6ec0c52
Showing 1 changed file with 4 additions and 9 deletions.
13 changes: 4 additions & 9 deletions ogre2/src/Ogre2Material.cc
Original file line number Diff line number Diff line change
Expand Up @@ -753,22 +753,17 @@ void Ogre2Material::SetLightMap(const std::string &_name,
this->dataPtr->lightMapData = _img;
this->lightMapUvSet = _uvSet;

// in gz-rendering5 + ogre 2.1, we reserved detail map 0 for light map
// and set a blend mode (PBSM_BLEND_OVERLAY AND PBSM_BLEND_MULTIPLY2X
// produces better results) to blend with base albedo map. However, this
// creates unwanted red highlights with ogre 2.2. So switching to use the
// emissive map slot and calling setUseEmissiveAsLightmap(true)
// Ogre::PbsTextureTypes type = Ogre::PBSM_DETAIL0;
// this->ogreDatablock->setDetailMapBlendMode(0, Ogre::PBSM_BLEND_OVERLAY);
Ogre::PbsTextureTypes type = Ogre::PBSM_EMISSIVE;
// Apply lightmap by using the detail map slot to store the lightmap texture
// and blending it with the diffuse map.
Ogre::PbsTextureTypes type = Ogre::PBSM_DETAIL0;
this->ogreDatablock->setDetailMapBlendMode(0, Ogre::PBSM_BLEND_OVERLAY);

// lightmap usually uses a different tex coord set
if (_img == nullptr)
this->SetTextureMapImpl(this->lightMapName, type);
else
this->SetTextureMapDataImpl(this->lightMapName, _img, type);
this->ogreDatablock->setTextureUvSource(type, this->lightMapUvSet);
this->ogreDatablock->setUseEmissiveAsLightmap(true);
}

//////////////////////////////////////////////////
Expand Down

0 comments on commit 6ec0c52

Please sign in to comment.