From 8216410e7d50ffd2bf6d0a62810880eb9da83c3b Mon Sep 17 00:00:00 2001 From: cody glassman Date: Sat, 8 Jan 2022 16:19:42 -0800 Subject: [PATCH] add white ambient to spell VFX as in Morrowind --- CHANGELOG.md | 1 + apps/openmw/mwrender/animation.cpp | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 419727c87d..3ee15e0ea3 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);