Skip to content

Conversation

@slipher
Copy link
Member

@slipher slipher commented Feb 3, 2026

Adapt the global fog shader to use a vertex position so it can draw finite-sized fogs. Right now it is only implemented for fogs that the viewer is inside of, but this is enough to fix the artifacts with MSAA as in #1480 (comment). Later I will update the PR with commits to draw fogs the viewer is outside of this way as well.

This cheat cvar controlled whether the Quake 3 fog shader is used (while
leaving the ET global fog unaffected). Instead you can use r_noFog which
toggles all fogs.
A shader with a name 58-63 chars long would fail to generate a depth
pass shader due to a length check. Add some extra space in the name
buffer so this can't happen.
When the viewer is inside a fog volume, render the fog with a single
draw call instead of drawing a corresponding fog surface for every
opaque surface. The fogGlobal GLSL shader is modified to use a vertex
position so it can handle finite-sized fogs.

Before:
- Each opaque surface inside a fog volume is drawn a second time using
  the fog shader with GL_EQUAL depth test.
- The underside of the fog plane is drawn with a normal depth test, to
  cover things outside the fog when the viewer is inside.

After:
- If the viewer is inside the fog, draw all inside faces of the fog
  brush, using the depth buffer to reduce the fog distance in the case
  that something is in front of the fog boundary.
- If the viewer is outside the fog, do everything as before.

For the moment this is only used when material system is disabled.

Fixes seams at the edge of fog that appear when MSAA is enabled.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant