mirror of
https://github.com/OpenMW/openmw.git
synced 2025-01-31 20:45:34 +00:00
Merge branch 'give-up-on-thinking-up-a-way-to-determine-this-automatically-per-object-openmw-48' into 'openmw-48'
Add a setting to control coverage adjustment (!2536 cherry-pick) See merge request OpenMW/openmw!2539
This commit is contained in:
commit
b40ac6dce5
9 changed files with 51 additions and 2 deletions
|
@ -127,6 +127,7 @@ bool Launcher::AdvancedPage::loadSettings()
|
||||||
if (Settings::Manager::getInt("antialiasing", "Video") == 0) {
|
if (Settings::Manager::getInt("antialiasing", "Video") == 0) {
|
||||||
antialiasAlphaTestCheckBox->setCheckState(Qt::Unchecked);
|
antialiasAlphaTestCheckBox->setCheckState(Qt::Unchecked);
|
||||||
}
|
}
|
||||||
|
loadSettingBool(adjustCoverageForAlphaTestCheckBox, "adjust coverage for alpha test", "Shaders");
|
||||||
loadSettingBool(magicItemAnimationsCheckBox, "use magic item animations", "Game");
|
loadSettingBool(magicItemAnimationsCheckBox, "use magic item animations", "Game");
|
||||||
connect(animSourcesCheckBox, SIGNAL(toggled(bool)), this, SLOT(slotAnimSourcesToggled(bool)));
|
connect(animSourcesCheckBox, SIGNAL(toggled(bool)), this, SLOT(slotAnimSourcesToggled(bool)));
|
||||||
loadSettingBool(animSourcesCheckBox, "use additional anim sources", "Game");
|
loadSettingBool(animSourcesCheckBox, "use additional anim sources", "Game");
|
||||||
|
@ -281,6 +282,7 @@ void Launcher::AdvancedPage::saveSettings()
|
||||||
saveSettingBool(radialFogCheckBox, "radial fog", "Fog");
|
saveSettingBool(radialFogCheckBox, "radial fog", "Fog");
|
||||||
saveSettingBool(softParticlesCheckBox, "soft particles", "Shaders");
|
saveSettingBool(softParticlesCheckBox, "soft particles", "Shaders");
|
||||||
saveSettingBool(antialiasAlphaTestCheckBox, "antialias alpha test", "Shaders");
|
saveSettingBool(antialiasAlphaTestCheckBox, "antialias alpha test", "Shaders");
|
||||||
|
saveSettingBool(adjustCoverageForAlphaTestCheckBox, "adjust coverage for alpha test", "Shaders");
|
||||||
saveSettingBool(magicItemAnimationsCheckBox, "use magic item animations", "Game");
|
saveSettingBool(magicItemAnimationsCheckBox, "use magic item animations", "Game");
|
||||||
saveSettingBool(animSourcesCheckBox, "use additional anim sources", "Game");
|
saveSettingBool(animSourcesCheckBox, "use additional anim sources", "Game");
|
||||||
saveSettingBool(weaponSheathingCheckBox, "weapon sheathing", "Game");
|
saveSettingBool(weaponSheathingCheckBox, "weapon sheathing", "Game");
|
||||||
|
|
|
@ -412,6 +412,7 @@ namespace MWRender
|
||||||
resourceSystem->getSceneManager()->setSpecularMapPattern(Settings::Manager::getString("specular map pattern", "Shaders"));
|
resourceSystem->getSceneManager()->setSpecularMapPattern(Settings::Manager::getString("specular map pattern", "Shaders"));
|
||||||
resourceSystem->getSceneManager()->setApplyLightingToEnvMaps(Settings::Manager::getBool("apply lighting to environment maps", "Shaders"));
|
resourceSystem->getSceneManager()->setApplyLightingToEnvMaps(Settings::Manager::getBool("apply lighting to environment maps", "Shaders"));
|
||||||
resourceSystem->getSceneManager()->setConvertAlphaTestToAlphaToCoverage(Settings::Manager::getBool("antialias alpha test", "Shaders") && Settings::Manager::getInt("antialiasing", "Video") > 1);
|
resourceSystem->getSceneManager()->setConvertAlphaTestToAlphaToCoverage(Settings::Manager::getBool("antialias alpha test", "Shaders") && Settings::Manager::getInt("antialiasing", "Video") > 1);
|
||||||
|
resourceSystem->getSceneManager()->setAdjustCoverageForAlphaTest(Settings::Manager::getBool("adjust coverage for alpha test", "Shaders"));
|
||||||
|
|
||||||
// Let LightManager choose which backend to use based on our hint. For methods besides legacy lighting, this depends on support for various OpenGL extensions.
|
// Let LightManager choose which backend to use based on our hint. For methods besides legacy lighting, this depends on support for various OpenGL extensions.
|
||||||
osg::ref_ptr<SceneUtil::LightManager> sceneRoot = new SceneUtil::LightManager(lightingMethod == SceneUtil::LightingMethod::FFP);
|
osg::ref_ptr<SceneUtil::LightManager> sceneRoot = new SceneUtil::LightManager(lightingMethod == SceneUtil::LightingMethod::FFP);
|
||||||
|
|
|
@ -346,6 +346,7 @@ namespace Resource
|
||||||
, mApplyLightingToEnvMaps(false)
|
, mApplyLightingToEnvMaps(false)
|
||||||
, mLightingMethod(SceneUtil::LightingMethod::FFP)
|
, mLightingMethod(SceneUtil::LightingMethod::FFP)
|
||||||
, mConvertAlphaTestToAlphaToCoverage(false)
|
, mConvertAlphaTestToAlphaToCoverage(false)
|
||||||
|
, mAdjustCoverageForAlphaTest(false)
|
||||||
, mSupportsNormalsRT(false)
|
, mSupportsNormalsRT(false)
|
||||||
, mSharedStateManager(new SharedStateManager)
|
, mSharedStateManager(new SharedStateManager)
|
||||||
, mImageManager(imageManager)
|
, mImageManager(imageManager)
|
||||||
|
@ -456,6 +457,11 @@ namespace Resource
|
||||||
mConvertAlphaTestToAlphaToCoverage = convert;
|
mConvertAlphaTestToAlphaToCoverage = convert;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SceneManager::setAdjustCoverageForAlphaTest(bool adjustCoverage)
|
||||||
|
{
|
||||||
|
mAdjustCoverageForAlphaTest = adjustCoverage;
|
||||||
|
}
|
||||||
|
|
||||||
void SceneManager::setOpaqueDepthTex(osg::ref_ptr<osg::Texture> texturePing, osg::ref_ptr<osg::Texture> texturePong)
|
void SceneManager::setOpaqueDepthTex(osg::ref_ptr<osg::Texture> texturePing, osg::ref_ptr<osg::Texture> texturePong)
|
||||||
{
|
{
|
||||||
mOpaqueDepthTex = { texturePing, texturePong };
|
mOpaqueDepthTex = { texturePing, texturePong };
|
||||||
|
@ -1046,6 +1052,7 @@ namespace Resource
|
||||||
shaderVisitor->setSpecularMapPattern(mSpecularMapPattern);
|
shaderVisitor->setSpecularMapPattern(mSpecularMapPattern);
|
||||||
shaderVisitor->setApplyLightingToEnvMaps(mApplyLightingToEnvMaps);
|
shaderVisitor->setApplyLightingToEnvMaps(mApplyLightingToEnvMaps);
|
||||||
shaderVisitor->setConvertAlphaTestToAlphaToCoverage(mConvertAlphaTestToAlphaToCoverage);
|
shaderVisitor->setConvertAlphaTestToAlphaToCoverage(mConvertAlphaTestToAlphaToCoverage);
|
||||||
|
shaderVisitor->setAdjustCoverageForAlphaTest(mAdjustCoverageForAlphaTest);
|
||||||
shaderVisitor->setSupportsNormalsRT(mSupportsNormalsRT);
|
shaderVisitor->setSupportsNormalsRT(mSupportsNormalsRT);
|
||||||
return shaderVisitor;
|
return shaderVisitor;
|
||||||
}
|
}
|
||||||
|
|
|
@ -123,6 +123,7 @@ namespace Resource
|
||||||
SceneUtil::LightingMethod getLightingMethod() const;
|
SceneUtil::LightingMethod getLightingMethod() const;
|
||||||
|
|
||||||
void setConvertAlphaTestToAlphaToCoverage(bool convert);
|
void setConvertAlphaTestToAlphaToCoverage(bool convert);
|
||||||
|
void setAdjustCoverageForAlphaTest(bool adjustCoverage);
|
||||||
|
|
||||||
void setShaderPath(const std::string& path);
|
void setShaderPath(const std::string& path);
|
||||||
|
|
||||||
|
@ -217,6 +218,7 @@ namespace Resource
|
||||||
SceneUtil::LightingMethod mLightingMethod;
|
SceneUtil::LightingMethod mLightingMethod;
|
||||||
SceneUtil::LightManager::SupportedMethods mSupportedLightingMethods;
|
SceneUtil::LightManager::SupportedMethods mSupportedLightingMethods;
|
||||||
bool mConvertAlphaTestToAlphaToCoverage;
|
bool mConvertAlphaTestToAlphaToCoverage;
|
||||||
|
bool mAdjustCoverageForAlphaTest;
|
||||||
bool mSupportsNormalsRT;
|
bool mSupportsNormalsRT;
|
||||||
std::array<osg::ref_ptr<osg::Texture>, 2> mOpaqueDepthTex;
|
std::array<osg::ref_ptr<osg::Texture>, 2> mOpaqueDepthTex;
|
||||||
bool mSoftParticles = false;
|
bool mSoftParticles = false;
|
||||||
|
|
|
@ -170,6 +170,7 @@ namespace Shader
|
||||||
, mAutoUseSpecularMaps(false)
|
, mAutoUseSpecularMaps(false)
|
||||||
, mApplyLightingToEnvMaps(false)
|
, mApplyLightingToEnvMaps(false)
|
||||||
, mConvertAlphaTestToAlphaToCoverage(false)
|
, mConvertAlphaTestToAlphaToCoverage(false)
|
||||||
|
, mAdjustCoverageForAlphaTest(false)
|
||||||
, mSupportsNormalsRT(false)
|
, mSupportsNormalsRT(false)
|
||||||
, mShaderManager(shaderManager)
|
, mShaderManager(shaderManager)
|
||||||
, mImageManager(imageManager)
|
, mImageManager(imageManager)
|
||||||
|
@ -614,7 +615,7 @@ namespace Shader
|
||||||
|
|
||||||
// Adjusting coverage isn't safe with blending on as blending requires the alpha to be intact.
|
// Adjusting coverage isn't safe with blending on as blending requires the alpha to be intact.
|
||||||
// Maybe we could also somehow (e.g. userdata) detect when the diffuse map has coverage-preserving mip maps in the future
|
// Maybe we could also somehow (e.g. userdata) detect when the diffuse map has coverage-preserving mip maps in the future
|
||||||
if (!reqs.mAlphaBlend)
|
if (mAdjustCoverageForAlphaTest && !reqs.mAlphaBlend)
|
||||||
defineMap["adjustCoverage"] = "1";
|
defineMap["adjustCoverage"] = "1";
|
||||||
|
|
||||||
// Preventing alpha tested stuff shrinking as lower mip levels are used requires knowing the texture size
|
// Preventing alpha tested stuff shrinking as lower mip levels are used requires knowing the texture size
|
||||||
|
@ -929,6 +930,11 @@ namespace Shader
|
||||||
mConvertAlphaTestToAlphaToCoverage = convert;
|
mConvertAlphaTestToAlphaToCoverage = convert;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ShaderVisitor::setAdjustCoverageForAlphaTest(bool adjustCoverage)
|
||||||
|
{
|
||||||
|
mAdjustCoverageForAlphaTest = adjustCoverage;
|
||||||
|
}
|
||||||
|
|
||||||
ReinstateRemovedStateVisitor::ReinstateRemovedStateVisitor(bool allowedToModifyStateSets)
|
ReinstateRemovedStateVisitor::ReinstateRemovedStateVisitor(bool allowedToModifyStateSets)
|
||||||
: osg::NodeVisitor(TRAVERSE_ALL_CHILDREN)
|
: osg::NodeVisitor(TRAVERSE_ALL_CHILDREN)
|
||||||
, mAllowedToModifyStateSets(allowedToModifyStateSets)
|
, mAllowedToModifyStateSets(allowedToModifyStateSets)
|
||||||
|
|
|
@ -47,6 +47,7 @@ namespace Shader
|
||||||
void setApplyLightingToEnvMaps(bool apply);
|
void setApplyLightingToEnvMaps(bool apply);
|
||||||
|
|
||||||
void setConvertAlphaTestToAlphaToCoverage(bool convert);
|
void setConvertAlphaTestToAlphaToCoverage(bool convert);
|
||||||
|
void setAdjustCoverageForAlphaTest(bool adjustCoverage);
|
||||||
|
|
||||||
void setSupportsNormalsRT(bool supports) { mSupportsNormalsRT = supports; }
|
void setSupportsNormalsRT(bool supports) { mSupportsNormalsRT = supports; }
|
||||||
|
|
||||||
|
@ -74,6 +75,7 @@ namespace Shader
|
||||||
bool mApplyLightingToEnvMaps;
|
bool mApplyLightingToEnvMaps;
|
||||||
|
|
||||||
bool mConvertAlphaTestToAlphaToCoverage;
|
bool mConvertAlphaTestToAlphaToCoverage;
|
||||||
|
bool mAdjustCoverageForAlphaTest;
|
||||||
|
|
||||||
bool mSupportsNormalsRT;
|
bool mSupportsNormalsRT;
|
||||||
|
|
||||||
|
|
|
@ -259,6 +259,19 @@ Convert the alpha test (cutout/punchthrough alpha) to alpha-to-coverage when :re
|
||||||
This allows MSAA to work with alpha-tested meshes, producing better-looking edges without pixelation.
|
This allows MSAA to work with alpha-tested meshes, producing better-looking edges without pixelation.
|
||||||
When MSAA is off, this setting will have no visible effect, but might have a performance cost.
|
When MSAA is off, this setting will have no visible effect, but might have a performance cost.
|
||||||
|
|
||||||
|
|
||||||
|
adjust coverage for alpha test
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
:Type: boolean
|
||||||
|
:Range: True/False
|
||||||
|
:Default: True
|
||||||
|
|
||||||
|
Attempt to simulate coverage-preserving mipmaps in textures created without them which are used for alpha testing anyway.
|
||||||
|
This will somewhat mitigate these objects appearing to shrink as they get further from the camera, but isn't perfect.
|
||||||
|
Better results can be achieved by generating more appropriate mipmaps in the first place, but if this workaround is used with such textures, affected objects will appear to grow as they get further from the camera.
|
||||||
|
It is recommended that mod authors specify how this setting should be set, and mod users follow their advice.
|
||||||
|
|
||||||
soft particles
|
soft particles
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
|
|
|
@ -487,6 +487,12 @@ minimum interior brightness = 0.08
|
||||||
# When MSAA is off, this setting will have no visible effect, but might have a performance cost.
|
# When MSAA is off, this setting will have no visible effect, but might have a performance cost.
|
||||||
antialias alpha test = false
|
antialias alpha test = false
|
||||||
|
|
||||||
|
# Attempt to simulate coverage-preserving mipmaps in textures created without them which are used for alpha testing anyway.
|
||||||
|
# This will somewhat mitigate these objects appearing to shrink as they get further from the camera, but isn't perfect.
|
||||||
|
# Better results can be achieved by generating more appropriate mipmaps in the first place, but if this workaround is used with such textures, affected objects will appear to grow as they get further from the camera.
|
||||||
|
# It is recommended that mod authors specify how this setting should be set, and mod users follow their advice.
|
||||||
|
adjust coverage for alpha test = true
|
||||||
|
|
||||||
# Soften intersection of blended particle systems with opaque geometry
|
# Soften intersection of blended particle systems with opaque geometry
|
||||||
soft particles = false
|
soft particles = false
|
||||||
|
|
||||||
|
|
|
@ -455,7 +455,7 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="0">
|
<item row="3" column="0">
|
||||||
<widget class="QCheckBox" name="softParticlesCheckBox">
|
<widget class="QCheckBox" name="softParticlesCheckBox">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string><html><head/><body><p>Enables soft particles for particle effects. This technique softens the intersection between individual particles and other opaque geometry by blending between them.</p></body></html></string>
|
<string><html><head/><body><p>Enables soft particles for particle effects. This technique softens the intersection between individual particles and other opaque geometry by blending between them.</p></body></html></string>
|
||||||
|
@ -465,6 +465,16 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<widget class="QCheckBox" name="adjustCoverageForAlphaTestCheckBox">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string><html><head/><body><p>Simulate coverage-preserving mipmaps to prevent alpha-tested meshes shrinking as they get further away. Will cause meshes whose textures have coverage-preserving mipmaps to grow, though, so refer to mod installation instructions for how to set this.</p></body></html></string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Adjust coverage for alpha test</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|
Loading…
Reference in a new issue