Visual regressions after latest update: foliage LOD pop-out, crushed black shadows, untextured green geometry #763
Labels
No labels
accessibility
autorelease: pending
autorelease: tagged
bug
dependencies
documentation
duplicate
enhancement
github_actions
good first issue
help wanted
invalid
question
testing wanted
wontfix
No milestone
No assignees
1 participant
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Hookshot#763
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Hookshot version
2.0.3
What kind of problem
Graphics (missing, black or wrong-coloured things, lighting, flicker)
What happened
1. Foliage LOD: tree leaves disappear at short distance
Leaves on trees vanish after moving only a small distance away. The LOD transition distance seems far too short, or the lower LODs are missing their leaf geometry.
Trees are not floating anymore. FIXED
2. Shadows are crushed to near-black
Shadowed areas and characters in shade render almost pure black with no ambient/fill light. Characters standing against the sun become silhouettes (screenshot 1), and Link loses nearly all detail in the shade by the bell (screenshot 4).
3. Some textures don't load and render as flat green
Some surfaces render as solid/untextured green instead of their texture:
This looks like a missing texture or fallback material.
Where in the game
Everywhere
How often
Every time
Graphics card and driver version
RTX 5080, driver 621.14
CPU, RAM and operating system
AMD Ryzen 7 7700X, 32 GB DDR5-4800, Windows 11 Pro 26H2 (build 26300.9818)
Changes from the defaults
Ultrawide = Monitor's shape (21:9). Only other mod: Xbox UI (romfs, button icons only).
Other software hooked into the game
No, nothing hooked in
hookshot_log.txt
hookshot_log.txt
Screenshots or video
Before you send it
Same, I was wondering what was going on, latest build is bugged
I feel like each update is making things worse instead of better.
Update on v2.0.4:
happened on v2.0.3 with the port on.
cabb432turned the port off for.
Side effect: with the port off by default, the floating trees are back on v2.0.4 (see #729).
Same PC: RTX 5080 (621.14), Ryzen 7 7700X, 32 GB, Windows 11 Pro 26H2, Ultrawide 21:9, Xbox UI mod only.
A/B of the Fritchii port's switches (RTX 5080, driver 621.14, i9-13900K, 32 GB, Windows 11): its native-pointer rules are what take out the grass and leaves
Data for re-enabling the port (
cabb432keeps it behindEDEN_NX2_GM_LEGACY=0). Tested on a source build of v2.0.3 (45620e8), where the port was the default, with the same save at the same spot in Hyrule Field, side by side with a Switch 2 console at the same time of day. Each run had one line inhookshot_env.txt:hookshot_env.txtstorage buffer NOT bound (reads zeros)EDEN_NX2_GM_COMPETING=0EDEN_NX2_GM_NATIVE=0EDEN_NX2_GM_LEGACY=1(v2.0.4+ default)So the pairing alone (
NATIVE=0) keeps the foliage, and the native rules fix the flower colours but take out the grass and canopies. That suggests the native rules are the part to narrow, not the pairing.The 40 zero reads are the same programs in both runs: stage 7
c5+0x60(68642bb810ee3e7c, 6b4dea601798c255, 739acd678ae08655, d905f52b7517c681), 51183fe750d5d0c8c5+0x1d0, 4f0c0b40ab3a32cdc5+0x228, and stage 5c3+0x60(a54f19e927d8faef, b612216258832b9c).No device lost in any of these runs. Logs available on request. Screenshots below.
Switch 2 (Left) - Hookshot (Right)
This adds to @KrysGG's A/B above. It looks at which programs draw the white grass, and what they bind, with the port off.
Some data on the white/neon grass (point 3), on an RTX 3070 8 GB, Windows 11. The build is v2.0.4 (
58af2c0) + #761 with the port off (the default), and the place is a save in Hyrule Field near Lon Lon Ranch, where the near grass blades are white.How the white comes about. In an
RX_VK_DUMPframe, the main colour target is first filled with a flat bright green (pass489438d734e2463a, HDR max ~3.6). Then each mesh pair draws its depth and then its colour, the colour pass testing EQUAL. The white blades are pixels that the depth program covered and the colour program never did, so the fill shows through.Which pair.
RX_VK_DRAW_STATSat that spot, comparing a run withRX_VK_EQ_BIAS=64(the Intel margin from629e2af, forced on):RX_VK_EQ_BIAS=643bde059fb051af1f@116ba9a000(91 groups, 2885)d4abbcb4c2140609Both get the same groups, but the colour program clips a different number of primitives and covers almost nothing. With the margin, it covers 12.6 M fragments of black and cyan shapes in the wrong places. So this is not EQUAL precision: the colour program computes other positions than its depth twin.
What differs.
RX_VK_DRAW_STATS_PROGS=3bde059fb051af1f,d4abbcb4c2140609, task stage (s6):3bde059f:s6 ssbo1 at 0x116ba94000 size 0x4040(762 of 4112 words non-zero)d4abbcb4:s6 ssbo1 at 0x116ba70000 size 0x4040(0 of 4112 words non-zero)These are two entries of the same per-category region that the culling (
b612216258832b9c) writes, three entries apart.0x116ba70000is also the args of43ec86f35fd937b9/8a8304edb7bdf4bf, which run 0 groups here. So the colour task seems to take its instance list from another entry of the table than its depth twin does. (The word counts are guest memory as submitted, which may not be what the GPU culling wrote there.) The mesh stages bind different buffers too, the other way round: depths7 ssbo1 0x116ba3d000is all zero, colours7 ssbo3 0x116ba49000has 1536 words.This would also fit the size of the white area. It matches the near range (~10 m) that keeps its leaves and grass with
EDEN_NX2_GM_LEGACY=0, where the far range is lost instead. The port's pointer rules pick the right entry for these near programs and the wrong one for the far ones, and the legacy tracking does the opposite. I haven't found yet which constant-buffer word each task'sssbo1comes from. I can dump more at this save if you tell me what would help.@Nitnek thanks, your depth/colour pair analysis was the key. More data on the same pair from my side (RTX 5080, driver 621.14, v2.0.5 cd9cebb6, port off, Hyrule Field). Near lupines are white and the same lupines are purple from a distance, so it is the near LOD pair. (This is likely the white/glowing flowers tracked in #659.)
What I could rule out, at the same spot:
RX_VK_DRAW_STATS, only 3bde059fb051af1f and d4abbcb4c2140609)c0+0x770, colour s7c0+0x790, both 0x116ba9a000, same indirect argsRX_VK_IRof both mesh stages)c3+48..108of the same ubo (0x112e75e500), and read the same vec3 at +64 of 0x116b921100 (depth as c4, colour as c5)c0+0x780's buffer)RX_VK_MISS_LOG=1,RX_VK_MISS_LOG_PROG=d4abbcb4c2140609: 0 missesInvariant(local test): no change, droppedFragments at that spot: depth 63 337, colour 4 194 (clip in 3228 for both, clip out 3211 vs 3221).
So with the same inputs the two mesh stages still put the blades in different places, and your
RX_VK_EQ_BIAS=64run says it is the colour program that lands in the wrong places. The colour stage is the one with the pointer chase (122 LoadGlobal128, 22 LoadGlobal32, 10 LoadStorage64); the depth stage reads onlyc0+0x770's buffer and its record from c5 at +32..56. The next step I see is the colour stage's actual vertex positions on the GPU; I can dump more at this save if you have a tool in mind.Data point from Windows, RTX 4080 16 GB, i9-14900KF:
EDEN_NX2_GM_LEGACY=1inhookshot_env.txt(what v2.0.4 made the default) fixed the light / shadow flicker and the light-shaft clipping near geometry on this card. With it, the full per-present GPU wait we had been testing for the #570 flicker was no longer needed.One thing for anyone A/B-testing these switches: every
EDEN_*(and severalRX_VK_*) environment line is hashed into the program cache's stamp as the rawNAME=VALUEstring (vk_shader.cpp, the_environloop at the end ofdisk_stamp). So addingEDEN_NX2_GM_LEGACY=1explicitly, or removing it, re-prepares every shader once even though 1 is the default since v2.0.4. Hashing the effective value of each switch instead of the raw line would avoid those full re-prepares.Tracked in #994, follow there. That issue collects every report of floating trees and missing or vanishing vegetation, and this one is linked from it with its GPU, version and log details. It is a known issue in v2.0.6 and not fixed yet. If it still happens on v2.0.6 (https://github.com/NotRexed/Hookshot/releases/tag/v2.0.6; Update next to Play in the launcher), please add a comment there with your
hookshot_log.txt.