1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2024-12-29 03:19:44 +00:00

Add specular strength shader parameter

This commit is contained in:
Alexei Dobrohotov 2021-11-10 19:58:06 +03:00
parent 923756b407
commit 9880c43c86
6 changed files with 10 additions and 1 deletions

View File

@ -359,6 +359,7 @@ namespace MWRender
stateset->setAttribute(m);
stateset->addUniform(new osg::Uniform("colorMode", 0));
stateset->addUniform(new osg::Uniform("emissiveMult", 1.f));
stateset->addUniform(new osg::Uniform("specStrength", 1.f));
node.setStateSet(stateset);
}
};

View File

@ -500,6 +500,7 @@ namespace MWRender
defaultMat->setSpecular(osg::Material::FRONT_AND_BACK, osg::Vec4f(0.f, 0.f, 0.f, 0.f));
sceneRoot->getOrCreateStateSet()->setAttribute(defaultMat);
sceneRoot->getOrCreateStateSet()->addUniform(new osg::Uniform("emissiveMult", 1.f));
sceneRoot->getOrCreateStateSet()->addUniform(new osg::Uniform("specStrength", 1.f));
mFog.reset(new FogManager());

View File

@ -1932,6 +1932,7 @@ namespace NifOsg
int lightmode = 1;
float emissiveMult = 1.f;
float specStrength = 1.f;
for (const Nif::Property* property : properties)
{
@ -2081,6 +2082,8 @@ namespace NifOsg
stateset->setAttributeAndModes(mat, osg::StateAttribute::ON);
if (emissiveMult != 1.f)
stateset->addUniform(new osg::Uniform("emissiveMult", emissiveMult));
if (specStrength != 1.f)
stateset->addUniform(new osg::Uniform("specStrength", specStrength));
}
};

View File

@ -524,6 +524,7 @@ namespace Resource
result.getNode()->accept(colladaAlphaTrickVisitor);
result.getNode()->getOrCreateStateSet()->addUniform(new osg::Uniform("emissiveMult", 1.f));
result.getNode()->getOrCreateStateSet()->addUniform(new osg::Uniform("specStrength", 1.f));
result.getNode()->getOrCreateStateSet()->addUniform(new osg::Uniform("envMapColor", osg::Vec4f(1,1,1,1)));
result.getNode()->getOrCreateStateSet()->addUniform(new osg::Uniform("useFalloff", false));
}

View File

@ -39,6 +39,7 @@ varying vec3 passNormal;
#include "alpha.glsl"
uniform float emissiveMult;
uniform float specStrength;
void main()
{
@ -80,7 +81,7 @@ void main()
gl_FragData[0].xyz *= lighting;
float shininess = gl_FrontMaterial.shininess;
vec3 matSpec = getSpecularColor().xyz;
vec3 matSpec = getSpecularColor().xyz * specStrength;
#if @normalMap
matSpec *= normalTex.a;
#endif

View File

@ -71,6 +71,7 @@ centroid varying vec3 shadowDiffuseLighting;
#else
uniform float emissiveMult;
#endif
uniform float specStrength;
varying vec3 passViewPos;
varying vec3 passNormal;
@ -204,6 +205,7 @@ void main()
vec3 matSpec = getSpecularColor().xyz;
#endif
matSpec *= specStrength;
if (matSpec != vec3(0.0))
{
#if (!@normalMap && !@parallax && !@forcePPL)