diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index c4dffb7a4d..dbfee05dff 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -272,6 +272,12 @@ public: void setWaterLevel(float waterLevel) { + const float refractionScale = std::min(1.0f,std::max(0.0f, + Settings::Manager::getFloat("refraction scale", "Water"))); + + setViewMatrix(osg::Matrix::scale(1,1,refractionScale) * + osg::Matrix::translate(0,0,(1.0 - refractionScale) * waterLevel)); + mClipCullNode->setPlane(osg::Plane(osg::Vec3d(0,0,-1), osg::Vec3d(0,0, waterLevel))); } diff --git a/docs/source/reference/modding/settings/water.rst b/docs/source/reference/modding/settings/water.rst index a1c6c2068a..bd0741da92 100644 --- a/docs/source/reference/modding/settings/water.rst +++ b/docs/source/reference/modding/settings/water.rst @@ -88,3 +88,20 @@ This setting will have no effect if the shader setting is false, or the 'small feature culling' (in the 'Camera' section) is disabled. This setting can only be configured by editing the settings configuration file. + +refraction scale +---------------- + +:Type: floating point +:Range: 0 to 1 +:Default: 1.0 + +Simulates light rays refracting when transitioning from air to water, which causes the space under water look scaled down +in height when viewed from above the water surface. Though adding realism, the setting can cause distortion which can +make for example aiming at enemies in water more challenging, so it is off by default (i.e. set to 1.0). To get a realistic +look of real-life water, set the value to 0.75. + +This setting only applies if water shader is on and refractions are enabled. Note that if refractions are enabled and this +setting if off, there will still be small refractions caused by the water waves, which however do not cause such significant +distortion. + diff --git a/files/settings-default.cfg b/files/settings-default.cfg index 2538834024..c694d4db22 100644 --- a/files/settings-default.cfg +++ b/files/settings-default.cfg @@ -376,6 +376,9 @@ reflect actors = false # Overrides the value in '[Camera] small feature culling pixel size' specifically for water reflection/refraction textures. small feature culling pixel size = 20.0 +# By what factor water downscales objects. Only works with water shader and refractions on. +refraction scale = 1.0 + [Windows] # Location and sizes of windows as a fraction of the OpenMW window or