perf(render3d): a depth prepass for the near tree foliage
Needle-card crowns are many cut-out quads deep and a discarding shader turns early depth rejection off, so every card behind the front one ran the full lighting shader. The near tree LODs now write depth first (depth.frag, the same alpha coverage test), terrain under them is rejected before shading, and the lit pass draws them with no discard and an equal depth test (invariant gl_Position). R3D_NOPREPASS=1 restores the old path. Dense forest on a Windows PC: 61 -> 78 fps at 3840x2160, 116 -> 164 fps at 1920x1080. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
21bc611455
commit
d6ffdfa638
6 changed files with 123 additions and 1 deletions
|
|
@ -40,6 +40,10 @@ float heightSmooth(sampler2D tex, vec2 uv) {
|
|||
+ (texture(tex, vec2(o0.x, o1.y)).r * s0.x + texture(tex, vec2(o1.x, o1.y)).r * s1.x) * s1.y;
|
||||
}
|
||||
out vec3 v_wpos;
|
||||
// The foliage prepass (depth.frag) and the lit pass after it compile this same source
|
||||
// into two programs and compare depths for equality: the position must come out
|
||||
// bit-identical in both, which is what `invariant` promises.
|
||||
invariant gl_Position;
|
||||
out vec3 v_nrm;
|
||||
out vec2 v_uv;
|
||||
out float v_seed;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue