Skip to content

Softer shadows in raytracing and RTAO - #7653

Open
The-E wants to merge 4 commits into
scp-fs2open:masterfrom
The-E:feat/softer-shadows
Open

Softer shadows in raytracing and RTAO#7653
The-E wants to merge 4 commits into
scp-fs2open:masterfrom
The-E:feat/softer-shadows

Conversation

@The-E

@The-E The-E commented Jul 25, 2026

Copy link
Copy Markdown
Member

Adds methods for softening RT shadows. This mechanism works by setting an apparent light size either in the mission file, a lab override, or by deriving it from the sun bitmap. The current implementation limits the apparent size to 1.5°; this is an artificial constraint based around the limits of raytraced shadows - the wider the sun is, the sparser the rays to check whether something is in shadow become, and the more grainy the shadows appear.
There are table settings and FRED/qtFRED controls to set this in missions.

And because the methods required to do soft shadows are mostly identical to what you need to do in order to do raytraced Ambient Occlusion, I threw in that effect as well - but I seriously cannot recommend anyone use it. The visual impact is only noticeable when you really look for it, and the performance cost is pretty large.

The-E and others added 3 commits July 25, 2026 11:43
Raytraced shadow penumbras needed a hand-authored $SunAngularSize: in
stars.tbl, which no shipped content sets -- so in practice nothing ever
got a penumbra. Measure the size from the sun bitmap instead:
g3_render_rect_screen_aligned_2d() sizes the sun quad so its rad is the
tangent of the half-angle it subtends, making tan(angular radius) equal
to 0.05 * the mission's +Scale: * the emitting disc's fraction of the
bitmap.

That fraction is the area of the pixels at or above 90% of the brightest
one, converted to an equivalent radius. Across 90 sun bitmaps from retail,
the MediaVPs, Blue Planet and BtA it lands at a median of 0.261 (retail's
chunkier art at 0.487), and the threshold acts as a constant factor rather
than a per-bitmap judgement call -- Spearman rho 0.96 between a 90% and a
50% cutoff.

Taken literally that yields suns 3.9-8.5x Sol's apparent diameter once
+Scale: is folded in (median 1.55, up to 5.0 in retail's own missions), so
the measurement is scaled by 0.25 and clamped to 1.5 degrees, putting
typical content near Sol.

Derivation is the default: $SunAngularSize: 0 asks for hard shadows, an
explicit value still wins, and "derived" states the default outright.
Bitmaps that can't be read -- and the deliberately blank sun bitmaps mods
ship to get a light source with no visible disc -- fall back to hard
shadows rather than to the widest possible penumbra.

Also adds lab controls for RT shadow quality (Low/High) and the local
light cap. Both are safe to change live: they only gate which lights are
picked as shadow casters while filling the per-frame light uniforms.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Introduce +AngularSize: for suns in mission files, overriding stars.tbl or bitmap-derived sizes. Updates FRED and QtFRED UI to support this feature, including validation and default fallback logic.
@The-E
The-E force-pushed the feat/softer-shadows branch from 46ed13c to c975b84 Compare July 25, 2026 18:18
@Shivansps

Copy link
Copy Markdown
Contributor

please dont forget there is another shadowCascadeParams in shadow_map-g

@The-E

The-E commented Jul 25, 2026

Copy link
Copy Markdown
Member Author

please dont forget there is another shadowCascadeParams in shadow_map-g

done.

@The-E The-E added enhancement A new feature or upgrade of an existing feature to add additional functionality. graphics A feature or issue related to graphics (2d and 3d) vulkan Issues and Features related to the vulkan render backend labels Jul 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement A new feature or upgrade of an existing feature to add additional functionality. graphics A feature or issue related to graphics (2d and 3d) vulkan Issues and Features related to the vulkan render backend

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants