diff --git a/CHANGELOG.md b/CHANGELOG.md index 63fcb91cef..3be525b001 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ Bug #4602: Robert's Bodies: crash inside createInstance() Bug #4700: Editor: Incorrect command implementation Bug #4744: Invisible particles must still be processed + Bug #4949: Incorrect particle lighting Bug #5088: Sky abruptly changes direction during certain weather transitions Bug #5100: Persuasion doesn't always clamp the resulting disposition Bug #5120: Scripted object spawning updates physics system diff --git a/apps/openmw/mwrender/animation.cpp b/apps/openmw/mwrender/animation.cpp index bf0ed04055..732ffd33aa 100644 --- a/apps/openmw/mwrender/animation.cpp +++ b/apps/openmw/mwrender/animation.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -372,6 +373,19 @@ namespace private: int mEffectId; }; + + osg::ref_ptr getVFXLightModelInstance() + { + static osg::ref_ptr lightModel = nullptr; + + if (!lightModel) + { + lightModel = new osg::LightModel; + lightModel->setAmbientIntensity({1,1,1,1}); + } + + return lightModel; + } } namespace MWRender @@ -1547,7 +1561,9 @@ namespace MWRender parentNode->addChild(trans); osg::ref_ptr node = mResourceSystem->getSceneManager()->getInstance(model, trans); - node->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF); + + // Morrowind has a white ambient light attached to the root VFX node of the scenegraph + node->getOrCreateStateSet()->setAttributeAndModes(getVFXLightModelInstance(), osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE); SceneUtil::FindMaxControllerLengthVisitor findMaxLengthVisitor; node->accept(findMaxLengthVisitor);