Skip to content

Commit 52d1493

Browse files
committed
Merge branch 'suntzuquote' into 'master'
Add an option to match sunlight to the sun (#8032) Closes #8032 See merge request OpenMW/openmw!4490
2 parents 25c19d5 + aa277c0 commit 52d1493

File tree

11 files changed

+82
-15
lines changed

11 files changed

+82
-15
lines changed

apps/openmw/mwgui/settingswindow.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -650,6 +650,7 @@ namespace MWGui
650650

651651
Settings::shaders().mForcePerPixelLighting.reset();
652652
Settings::shaders().mClassicFalloff.reset();
653+
Settings::shaders().mMatchSunlightToSun.reset();
653654
Settings::shaders().mLightBoundsMultiplier.reset();
654655
Settings::shaders().mMaximumLightDistance.reset();
655656
Settings::shaders().mLightFadeStart.reset();

apps/openmw/mwrender/renderingmanager.cpp

+9-4
Original file line numberDiff line numberDiff line change
@@ -754,13 +754,18 @@ namespace MWRender
754754

755755
void RenderingManager::setSunDirection(const osg::Vec3f& direction)
756756
{
757-
osg::Vec3 position = direction * -1;
758-
// need to wrap this in a StateUpdater?
759-
mSunLight->setPosition(osg::Vec4(position.x(), position.y(), position.z(), 0));
757+
osg::Vec3f position = -direction;
760758

761-
// The sun is not synchronized with the sunlight because sunlight origin can't reach the horizon
759+
// The sun is not synchronized with the sunlight because reasons
762760
// This is based on exterior sun orbit and won't make sense for interiors, see WeatherManager::update
763761
position.z() = 400.f - std::abs(position.x());
762+
763+
// need to wrap this in a StateUpdater?
764+
if (Settings::shaders().mMatchSunlightToSun)
765+
mSunLight->setPosition(osg::Vec4f(position, 0.f));
766+
else
767+
mSunLight->setPosition(osg::Vec4f(-direction, 0.f));
768+
764769
mSky->setSunDirection(position);
765770

766771
mPostProcessor->getStateUpdater()->setSunPos(osg::Vec4f(position, 0.f), mNight);

components/settings/categories/shaders.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ namespace Settings
3333
SettingValue<bool> mApplyLightingToEnvironmentMaps{ mIndex, "Shaders", "apply lighting to environment maps" };
3434
SettingValue<SceneUtil::LightingMethod> mLightingMethod{ mIndex, "Shaders", "lighting method" };
3535
SettingValue<bool> mClassicFalloff{ mIndex, "Shaders", "classic falloff" };
36+
SettingValue<bool> mMatchSunlightToSun{ mIndex, "Shaders", "match sunlight to sun" };
3637
SettingValue<float> mLightBoundsMultiplier{ mIndex, "Shaders", "light bounds multiplier",
3738
makeClampSanitizerFloat(0, 5) };
3839
SettingValue<float> mMaximumLightDistance{ mIndex, "Shaders", "maximum light distance",

docs/source/reference/modding/settings/shaders.rst

+12
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,18 @@ Alternatively, refer to :ref:`minimum interior brightness`.
210210

211211
'legacy' :ref:`lighting method` behaves as if this setting were enabled.
212212

213+
match sunlight to sun
214+
---------------------
215+
216+
:Type: boolean
217+
:Range: True/False
218+
:Default: False
219+
220+
In Morrowind, the apparent sun position does not match its light direction due to mysterious reasons.
221+
We preserve this unrealistic behavior for compatibility.
222+
223+
This option makes the sun light source's position match the sun's position.
224+
213225
maximum light distance
214226
----------------------
215227

files/data/l10n/OMWEngine/de.yaml

+6
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,12 @@ LightsMaximumDistance: "Maximale Lichtreichweite"
142142
LightsMaximumDistanceTooltip: "Standard: 8192 (1 Zelle)\nMaximale Entfernung, bis zu der Lichtquellen noch dargestellt werden (gemessen in In-Game-Einheiten).\n\nEin Wert von 0 entspricht einer unbegrenzten Reichweite."
143143
LightsMinimumInteriorBrightness: "Minimale Helligkeit in Innenräumen"
144144
LightsMinimumInteriorBrightnessTooltip: "Standard: 0,08\nMinimale Umgebungshelligkeit in Innenräumen.\n\nKann erhöht werden, falls Innenräume zu dunkel dargestellt werden.\n\nDies hat keine Auswirkung, wenn der klassische Lichtabfall verwendet wird."
145+
MatchSunlightToSun: "Licht an Sonne ausrichten"
146+
MatchSunlightToSunTooltip: |-
147+
In Morrowind stimmt die sichtbare Sonnenposition aus mysteriösen Gründen nicht mit ihrer Lichtrichtung überein.
148+
Wir bewahren dieses unrealistische Verhalten, um die Kompatibilität sicherzustellen.
149+
150+
Diese Option passt die Position der Sonnenlichtquelle an die sichtbare Position der Sonne an.
145151
MaxLights: "Maximale Anzahl von Lichtquellen pro Objekt"
146152
MaxLightsTooltip: "Standard: 8\nMaximale Anzahl von Lichtquellen, die ein Objekt beleuchten können.\n\nKleine Werte können gerade an Orten mit vielen Lichtquellen zum Aufploppen und zum schnellen Wechsel von Lichtern führen, wie es aus der Original-Engine und anderen The-Elder-Scrolls-Titeln bekannt ist."
147153
MenuHelpDelay: "Verzögerung des Hilfe-Menüs"

files/data/l10n/OMWEngine/en.yaml

+6
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,12 @@ LightsMaximumDistance: "Maximum Light Distance"
142142
LightsMaximumDistanceTooltip: "Default: 8192\nMaximum distance at which lights will appear (measured in units).\n\nSet this to 0 to use an unlimited distance."
143143
LightsMinimumInteriorBrightness: "Minimum Interior Brightness"
144144
LightsMinimumInteriorBrightnessTooltip: "Default: 0.08\nMinimum ambient interior brightness.\n\nIncrease this if you feel interiors are too dark.\n\nThis has no effect if classic falloff is used."
145+
MatchSunlightToSun: "Match Sunlight to Sun"
146+
MatchSunlightToSunTooltip: |-
147+
In Morrowind, the apparent sun position does not match its light direction due to mysterious reasons.
148+
We preserve this unrealistic behavior for compatibility.
149+
150+
This option makes the sun light source's position match the sun's position.
145151
MaxLights: "Max Lights"
146152
MaxLightsTooltip: "Default: 8\nMaximum number of lights per object.\n\nA low number near default will cause light popping similar to what you would see with legacy lighting."
147153
MenuHelpDelay: "Menu Help Delay"

files/data/l10n/OMWEngine/fr.yaml

+6
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,12 @@ LightsMaximumDistance: "Distance maximale des sources lumineuses"
142142
LightsMaximumDistanceTooltip: "valeur par défaut: 8192\nDistance maximale d'affichage des sources lumineuses (en unité de distance).\n\nMettez cette valeur à 0 pour une distance d'affichage infinie."
143143
LightsMinimumInteriorBrightness: "Luminosité intérieure minimale"
144144
LightsMinimumInteriorBrightnessTooltip: "valeur par défaut: 0.08\nLuminosité ambiante minimum en intérieur.\n\nAugmentez cette valeur si les intérieurs vous semblent trop sombres.\n\nCela n'a aucun effet si l'atténuation classique est utilisée."
145+
MatchSunlightToSun: "Aligner la lumière du soleil"
146+
MatchSunlightToSunTooltip: |-
147+
Dans Morrowind, la position apparente du soleil ne correspond pas à la direction de sa lumière pour des raisons mystérieuses.
148+
Nous conservons ce comportement irréaliste pour maintenir la compatibilité.
149+
150+
Cette option aligne la source lumineuse du soleil sur la position réelle du soleil.
145151
MaxLights: "Maximum de sources lumineuses"
146152
MaxLightsTooltip: "valeur par défaut: 8\nNombre maximum de sources lumineuses par objet.\n\nUne valeur faible mène à des apparitions tardives des sources lumineuses similaires à celles obtenues avec la méthode d'éclairage traditionnelle."
147153
MenuHelpDelay: "Délai d'affichage du menu d'aide"

files/data/l10n/OMWEngine/ru.yaml

+6
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,12 @@ LightsMaximumDistance: "Дальность отображения источни
142142
LightsMaximumDistanceTooltip: "Значение по умолчанию: 8192\nМаксимальное расстояние, на котором будут отображаться источники света (во внутриигровых единицах измерения).\n\nЕсли 0, то расстояние не ограничено."
143143
LightsMinimumInteriorBrightness: "Минимальный уровень освещения в помещениях"
144144
LightsMinimumInteriorBrightnessTooltip: "Значение по умолчанию: 0.08\nМинимальный уровень фонового освещения в помещениях.\n\nУвеличьте значение, если помещения в игре кажутся слишком темными. Эта настройка не имеет эффекта, если используется классическое угасание."
145+
MatchSunlightToSun: "Свет солнца идет от солнца"
146+
MatchSunlightToSunTooltip: |-
147+
В Morrowind по загадочным причинам видимое положение солнца не соответствует направлению его света.
148+
Мы копируем это нереалистичное поведение ради совместимости.
149+
150+
Настройка делает так, чтобы направление света от солнца соответствовало его положению.
145151
MaxLights: "Макс. кол-во источников света"
146152
MaxLightsTooltip: "Значение по умолчанию: 8\nМаксимальное количество источников света для каждого объекта.\n\nНизкие числа (близкие к значению по умолчанию) приводят к резким перепадам освещения, как при устаревшем методе освещения."
147153
MenuHelpDelay: "Задержка всплывающих подсказок"

files/data/l10n/OMWEngine/sv.yaml

+6
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,12 @@ LightsMaximumDistance: "Maximalt ljusavstånd"
143143
LightsMaximumDistanceTooltip: "Förvalt: 8192\nMaximala avståndet där ljuskällor syns (mätt i enheter).\n\nVärdet 0 ger oändligt avstånd."
144144
LightsMinimumInteriorBrightness: "Minsta ljusstyrka i interiörer"
145145
LightsMinimumInteriorBrightnessTooltip: "Förvalt: 0.08\nMinsta omgivande ljusstyrka i interiörer.\n\nÖka värdet om du anser att interiörer är för mörka.\n\nDetta har ingen effekt om klassiskt ljusavtagande används."
146+
MatchSunlightToSun: "Matcha solljus med solen"
147+
MatchSunlightToSunTooltip: |-
148+
I Morrowind stämmer inte solens synbara position överens med dess ljusriktning av mystiska skäl.
149+
Vi behåller detta orealistiska beteende för att behålla kompatibilitet.
150+
151+
Detta alternativ gör att solljuskällans position matchar solens synliga position.
146152
MaxLights: "Max antal ljuskällor"
147153
MaxLightsTooltip: "Förvalt: 8\nMaximalt antal ljuskällor per objekt.\n\nEtt lågt tal nära det förvalda kommer orsaka att ljuskällor poppar upp som vid ljussättningsmetoden Gammaldags."
148154
MenuHelpDelay: "Menyhjälp, fördröjning" #Unsure in what context this goes

files/data/mygui/openmw_settings_window.layout

+26-11
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<MyGUI type="Layout" version="3.2.0">
33
<Widget type="Window" skin="MW_Window" position="0 0 400 485" layer="Settings" name="_Main">
4-
<Property key="MinSize" value="640 490"/>
4+
<Property key="MinSize" value="640 540"/>
55
<Widget type="TabControl" skin="TabControl" position="8 8 368 405" align="Stretch" name="SettingsTab">
66
<Property key="ButtonAutoWidth" value="true"/>
77
<Widget type="TabItem">
@@ -626,15 +626,30 @@
626626
</Widget>
627627
</Widget>
628628

629-
<Widget type="ImageBox" skin="MW_HLine" position="0 84 360 18" align="Top HStretch"/>
629+
<Widget type="HBox" position="0 90 600 24">
630+
<!-- Match Sunlight To Sun -->
631+
<Widget type="AutoSizedButton" skin="MW_Button" align="Left Top">
632+
<UserString key="SettingCategory" value="Shaders"/>
633+
<UserString key="SettingName" value="match sunlight to sun"/>
634+
<UserString key="SettingType" value="CheckButton"/>
635+
</Widget>
636+
<Widget type="AutoSizedTextBox" skin="SandText" align="Left Top">
637+
<Property key="Caption" value="#{OMWEngine:MatchSunlightToSun}"/>
638+
<UserString key="ToolTipType" value="Layout"/>
639+
<UserString key="ToolTipLayout" value="TextToolTip"/>
640+
<UserString key="Caption_Text" value="#{OMWEngine:MatchSunlightToSunTooltip}"/>
641+
</Widget>
642+
</Widget>
643+
644+
<Widget type="ImageBox" skin="MW_HLine" position="0 114 360 18" align="Top HStretch"/>
630645

631646
<!-- Light Fade Start -->
632-
<Widget type="TextBox" skin="NormalText" position="0 104 500 18" align="Left Top" name="MaxLightDistanceText">
647+
<Widget type="TextBox" skin="NormalText" position="0 134 500 18" align="Left Top" name="MaxLightDistanceText">
633648
<UserString key="ToolTipType" value="Layout"/>
634649
<UserString key="ToolTipLayout" value="TextToolTip"/>
635650
<UserString key="Caption_Text" value="#{OMWEngine:LightsMaximumDistanceTooltip}"/>
636651
</Widget>
637-
<Widget type="ScrollBar" skin="MW_HScroll" position="0 128 352 18" align="HStretch Top">
652+
<Widget type="ScrollBar" skin="MW_HScroll" position="0 158 352 18" align="HStretch Top">
638653
<Property key="Range" value="8193"/>
639654
<Property key="Page" value="128"/>
640655
<UserString key="SettingType" value="Slider"/>
@@ -647,12 +662,12 @@
647662
<UserString key="SettingLabelCaption" value="#{OMWEngine:LightsMaximumDistance} (%s)"/>
648663
</Widget>
649664
<!-- Light Fade Multiplier -->
650-
<Widget type="TextBox" skin="NormalText" position="0 152 500 18" align="Left Top" name="LightFadeMultiplierText">
665+
<Widget type="TextBox" skin="NormalText" position="0 182 500 18" align="Left Top" name="LightFadeMultiplierText">
651666
<UserString key="ToolTipType" value="Layout"/>
652667
<UserString key="ToolTipLayout" value="TextToolTip"/>
653668
<UserString key="Caption_Text" value="#{OMWEngine:LightsFadeStartMultiplierTooltip}"/>
654669
</Widget>
655-
<Widget type="ScrollBar" skin="MW_HScroll" position="0 176 352 18" align="HStretch Top">
670+
<Widget type="ScrollBar" skin="MW_HScroll" position="0 206 352 18" align="HStretch Top">
656671
<Property key="Range" value="10000"/>
657672
<Property key="Page" value="100"/>
658673
<UserString key="SettingType" value="Slider"/>
@@ -665,12 +680,12 @@
665680
<UserString key="SettingLabelCaption" value="#{OMWEngine:LightsFadeStartMultiplier} (%s)"/>
666681
</Widget>
667682
<!-- Bounding Sphere Multiplier -->
668-
<Widget type="TextBox" skin="NormalText" position="0 200 500 18" align="Left Top" name="BoundingSphereMultText">
683+
<Widget type="TextBox" skin="NormalText" position="0 230 500 18" align="Left Top" name="BoundingSphereMultText">
669684
<UserString key="ToolTipType" value="Layout"/>
670685
<UserString key="ToolTipLayout" value="TextToolTip"/>
671686
<UserString key="Caption_Text" value="#{OMWEngine:LightsBoundingSphereMultiplierTooltip}"/>
672687
</Widget>
673-
<Widget type="ScrollBar" skin="MW_HScroll" position="0 224 352 18" align="HStretch Top">
688+
<Widget type="ScrollBar" skin="MW_HScroll" position="0 254 352 18" align="HStretch Top">
674689
<Property key="Range" value="500000"/>
675690
<Property key="Page" value="1000"/>
676691
<UserString key="SettingType" value="Slider"/>
@@ -683,12 +698,12 @@
683698
<UserString key="SettingLabelCaption" value="#{OMWEngine:LightsBoundingSphereMultiplier} (%s)"/>
684699
</Widget>
685700
<!-- Minimum Ambient Brightness -->
686-
<Widget type="TextBox" skin="NormalText" position="0 248 500 18" align="Left Top" name="MinimumBrightnessText">
701+
<Widget type="TextBox" skin="NormalText" position="0 278 500 18" align="Left Top" name="MinimumBrightnessText">
687702
<UserString key="ToolTipType" value="Layout"/>
688703
<UserString key="ToolTipLayout" value="TextToolTip"/>
689704
<UserString key="Caption_Text" value="#{OMWEngine:LightsMinimumInteriorBrightnessTooltip}"/>
690705
</Widget>
691-
<Widget type="ScrollBar" skin="MW_HScroll" position="0 272 352 18" align="HStretch Top">
706+
<Widget type="ScrollBar" skin="MW_HScroll" position="0 302 352 18" align="HStretch Top">
692707
<Property key="Range" value="10000"/>
693708
<Property key="Page" value="100"/>
694709
<UserString key="SettingType" value="Slider"/>
@@ -698,7 +713,7 @@
698713
<UserString key="SettingLabelWidget" value="MinimumBrightnessText"/>
699714
<UserString key="SettingLabelCaption" value="#{OMWEngine:LightsMinimumInteriorBrightness} (%s)"/>
700715
</Widget>
701-
<Widget type="AutoSizedButton" skin="MW_Button" position="0 306 0 0" align="Top Left" name="LightsResetButton">
716+
<Widget type="AutoSizedButton" skin="MW_Button" position="0 336 0 0" align="Top Left" name="LightsResetButton">
702717
<Property key="Caption" value="#{Interface:Reset}"/>
703718
</Widget>
704719
</Widget>

files/settings-default.cfg

+3
Original file line numberDiff line numberDiff line change
@@ -484,6 +484,9 @@ lighting method = shaders compatibility
484484
# When 'lighting method' is set to 'legacy', this setting is always true.
485485
classic falloff = false
486486

487+
# Matches exterior sunlight to the apparent sun orbit
488+
match sunlight to sun = false
489+
487490
# Sets the bounding sphere multiplier of light sources.
488491
# The bounding sphere is used to determine if an object should receive lighting.
489492
# Higher values will allow for smoother transitions of light sources,

0 commit comments

Comments
 (0)