Daggerfall Unity 0.13 Rendering Update – Part 3
Posted on
November 25, 2021 by
Interkarma
In this third and final instalment, Daggerfall Unity’s rendering review wraps up by fixing more bugs and giving Retro Mode some overdue love. Preview release 0.13.3 is now available on
Releases page.
To quickly recap, this review set out to resolve problem of specular “shine” from Unity’s default Standard shader, switch to more accurate and flexible linear lighting space, and upgrade postprocessing stack to PPv2. Along the way, we fixed many small problems with loose texture mods and reviewed lighting. Almost every part of the game involved with drawing something to screen was inspected and tuned up if tuning was needed.
Thanks to community feedback, we were able to address several issues created by initial 0.13 preview release. Our new shaders were extended to support more PBR capabilities. The game received an extensible “Effect Settings” UI to configure postprocessing and other effects at runtime. We helped several mod authors overcome compatibility issues so their mod works with 0.13 and beyond.
With all the large changes now settling down, we could start refining a few things. Here’s what’s new in 0.13.3.
Remove Nature Shadows
Projecting shadows from 2D billboards comes with downsides. These are just 2D cutouts rotating to face camera, so their shadow either twists and turns with billboard or stays fixed in place. Fixed shadows look better overall, but results in any asymmetry becoming disconnected from cutout when seen from the wrong angle.
Nature shadows had other tradeoffs too. In deferred rendering, screen objects always receive shadows, which means trees received self-shadow artifacts while rotating. To workaround this problem, it was necessary to render nature objects in transparent queue which doesn’t write to depth buffer. This in turn created other problems with rendering elements relying on depth information.
After trialling more solutions and workarounds, it became obvious these shadows were causing too many issues for a minor aesthetic hack that only looked good some of the time. Considering classic didn’t have tree shadows either, the best solution was to simply remove them.
If you prefer these nature shadows despite their limitations, you can switch them back on by opening settings.ini and changing “NatureBillboardShadows=False” into True.
Please keep in mind that enabling nature shadows will revert them to transparent rendering queue, so trees and other nature billboards will not operate fully with effects requiring depth information – Ambient Occlusion, Retro Mode Postprocess, ColorBoost, to name a few.
Retro Mode Enhancements
Retro Mode is a feature in Daggerfall Unity where camera renders to a 320×200 or 640×400 resolution target before scaling output into your display area. The feature also comes with postprocess settings for palettization or posterization to crush palette down to fewer colours with neat side-effects like colour banding from nearby light sources.
From 0.13.3, Retro Mode is now in the Game Effects UI. You can access these settings from drop-down arrow at top-left of screen when game is on pause menu.
In addition to previous settings for retro mode and postprocess, you now have the option to adjust render scale into 4:3 or 16:10. Enabling either of these settings will scale output to selected aspect ratio inside your actual screen area. If you have a wider screen, e.g. 16:9, then vertical pillarbox bars are added.
Previously this aspect correction was only available as a hacky workaround by fiddling with resolution and UI scaling settings, which was error prone and didn’t work under all platforms. Now with this in Game Effects UI, you can switch around these settings at runtime without restarting game.
If you’re coming from an older version of Daggerfall Unity and have already setup Retro Mode based on the old hacky method, please reset your game resolution back to something with correct aspect ratio for your monitor. For example, if you have a 1920×1080 monitor and set your game resolution to 1280×960 to force the aspect change, please set your game resolution back to 1920×1080 or some other 16:9 resolution. You also no longer need to enable “FreeScaling” option, which has been removed from 0.13.3. This is now all handled automatically in-game from checkboxes shown above, along with fixes for problems created by the old FreeScaling option.
One final note about Retro Mode – now that you can switch settings at runtime and change aspect ratio, not all mods will support runtime switching of resolution or aspect. Any mods rendering to a stacked camera (e.g. Enhanced Sky, Distant Terrain) will need added support for runtime resolution switching (update: Enhanced Sky has this support from v3.0.2). Also custom UI mods might need to add aspect handling based on how they calculate screen position. If you have problems with a mod in Retro Mode, try restarting game, switching off aspect correction, or switching off Retro Mode entirely.
ColorBoost Effect
The best way to introduce ColorBoost is by talking about darkness in dungeons. Daggerfall dungeons aren’t dark, exactly. They’re actually quite bright near player then ramp down sharply into darkness after 30 metres or so. This is technically a requirement of lower draw distance in classic, but it creates a uniquely claustrophobic feeling. In classic, even light sources fade into darkness at range. To put it another way, there’s a high contrast between brightness levels depending on distance from player.
See below classic screenshots for example. Here our player is standing near throne lift in Privateer’s Hold. Note how environment around player is rather bright then ramps down into blackness at farthest point.
If you walk down toward that farthest point and turn around, now the brightly lit area near throne is plunged into darkness and world near player is bright instead. Step back a few more metres and area above stairs becomes totally black. Even those bright torches will fade away.
Daggerfall Unity uses a modern naturalistic lighting system where this kind of thing doesn’t happen. Lights have radius and intensity, and geometry is either touched by some amount light or not. In a naturalistic environment, torches don’t stop casting light behind themselves just because player walked a few dozen metres away.
It’s not quite feasible to capture classic’s rendering and lighting perfectly here (totally different engines and lighting systems after all) but it is possible to create more contrast between near and far brightness to capture this same
atmosphere.
Let’s start with a screenshot of Daggerfall Unity, once again at top of stairs in Privateer’s Hold looking down. Note how distant torches still affect the wall behind them, and scene overall is rather uniform in brightness. A ramp down into darkness isn’t present at all.
Now ColorBoost comes into play. This postprocessing effect can both increase brightness near player and produce ramp down into darkness inside dungeons. Compare above screen with one below, and note difference in contrast between near and far points. Even the torches start to fade into darkness at range.
In addition to atmosphere, this gives you another way to tune brightness to your preference. Some ColorBoost will brighten things up without completely flattening or over-brightening whole scene. The dungeon falloff effect has adjustable strength down to 0 (disabled).
ColorBoost was originally intended to help in Retro Mode with posterization / palettization enabled, and it’s recommend to use a good amount of ColorBoost in combination with those effects.
Here’s a another shot of stairs in Daggerfall Unity at 320×200 16:10 Retro Mode with adjusted ColorBoost settings. This is finally approaching reasonable parity with classic Daggerfall’s dungeon atmosphere despite underlying engine differences.
You can enable ColorBoost at any time and it will work alongside your mods, lighting setup, and other settings.
Speaking of mods and settings, you’ll likely need to dial-in ColorBoost to suit your environment and preferences. Everyone can have a unique setup and world can light very differently as a result. For this reason, ColorBoost config page has several sliders to help dial-in Radius of effect, global Intensity, strength of effect in Dungeons, Exteriors, Interiors, and control Dungeon Falloff. Like all effects, ColorBoost is disabled by default.
General Improvements & Fixes
This release also brings several minor fixes and refinements:
- Don’t use transparent queue for standalone cutout billboards so they operate with AO and other depth effects
- Fix volume collider blocking spells and other missiles (fixed in 0.13.2b)
- Flag window textures in archives 171-173 to support emissive from replacements
- Allow changing retro mode settings at runtime
- Remove global UI FreeScaling method, this is now part of retro mode aspect correction
- Fix overlapping text in popup message boxes with FreeScaling enabled
- Change protections on MaterialReader Uniforms to public
- Fix StreamingWorld.TrackLooseObject “mapPixelX” and “mapPixelY” (KABoissonneault)
- Fix retro mode colour accuracy with higher precision render textures
- Hide spell icons when pause options dropdown is open
- Refine automap panel sizing with custom screen rect
Conclusion
We have now reached the end of rendering review in 0.13. Unless a blocking issue is found, the “preview” tag will be dropped from next release. Moving forward, there are no more large changes scheduled to engine or rendering, only bug fixes and minor refinements. This is to ensure best possible stability and mod compatibility moving towards 1.0.
If you are a mod author, please ensure your mod is rebuilt and tested compatible for 0.13.3. This release is very close to next full Beta release without “preview” tag.
Thank you for reading, and for playing Daggerfall Unity!