fix: sync upstream Community Shaders v1.6.1 hotfix#74
Conversation
…shaders#2444) (cherry picked from commit 4c0f278)
…y-shaders#2410) (cherry picked from commit ca1c494)
(cherry picked from commit 055d508)
…ders#2440) (cherry picked from commit 22ea056)
(cherry picked from commit 26c10c4)
Sync the fixes staged on community-shaders hotfix/1.6.x onto our 1.6.0 base: snow render targets → fp16 (banding), emat solid-black height masks, water blending/ghosting + LOD gaps, and the feature-audit AuditVersion opt-out. Resolution per our upstream-merge pattern: - Fork pipeline workflows kept (--ours); upstream's divergent CI changes dropped (release-build et al.). - tools/feature_version_audit.py: take upstream's AuditVersion opt-out. - Terrain Helper .ini: AuditVersion = false (upstream, activation-only) + autoupload = true (fork — we ship it in the AIO). Folds PR #73. Upstream is staged, not yet tagged v1.6.1 — re-verify against the tag when published. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
📝 WalkthroughWalkthroughThis PR re-enables Terrain Helper in the AIO bundle and adds version audit opt-out support. It includes three independent water rendering improvements: un-premultiplied blend history, refined environment mask format detection, and water visibility tied to cell flags. Render targets are upgraded to higher-precision float formats. ChangesWater Rendering & Visibility Improvements
Terrain Helper AIO & Version Audit Opt-out
🎯 3 (Moderate) | ⏱️ ~20 minutes
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Warning There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure. 🔧 OpenGrep (1.22.0)OpenGrep fatal error (exit code 2): [00.17][ERROR]: Error: exception Unix_error: No such file or directory stat src/Hooks.cpp 🔧 Infer (1.2.0)src/Features/UnifiedWater.cppUsage Error: Failed to execute compilation command: Error message: *** Infer needs a working compilation command to run. src/Hooks.cppUsage Error: Failed to execute compilation command: Error message: *** Infer needs a working compilation command to run. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Actionable Suggestions
|
There was a problem hiding this comment.
Pull request overview
Syncs the upstream Community Shaders hotfix/1.6.x (staged v1.6.1 hotfix) into this fork’s 1.6.0 base, including the Terrain Helper AIO inclusion and the upstream AuditVersion opt-out support for the feature audit tool.
Changes:
- Update the feature version audit script to support
AuditVersion = falseto fully opt a feature out of version auditing/bump suggestions. - Apply upstream rendering fixes: promote snow RTs to fp16 to reduce banding, adjust water history handling to reduce blending/ghosting artifacts, and refine water LOD culling behavior.
- Fix extended material mask handling to preserve valid “height-only” masks while still rejecting incorrect grayscale environment masks; enable Terrain Helper autoupload while opting it out of audit-version churn.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| tools/feature_version_audit.py | Adds audit_version metadata parsing and skips version auditing for features with AuditVersion = false. |
| src/Hooks.cpp | Hooks water blend render to clear stale history coverage; promotes snow render targets to fp16 during RT creation. |
| src/Features/UnifiedWater.cpp | Adjusts LOD culling to keep LOD visible for loaded cells that don’t actually have water. |
| package/Shaders/Lighting.hlsl | Fixes complex material detection to avoid incorrectly rejecting solid-black height-only masks. |
| package/Shaders/ISWaterBlend.hlsl | Stores premultiplied history and un-premultiplies on read to reduce edge darkening/ghosting. |
| features/Terrain Helper/Shaders/Features/TerrainHelper.ini | Sets AuditVersion = false and autoupload = true for Terrain Helper. |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
src/Hooks.cpp (1)
584-605: 🏗️ Heavy liftConsider gating the fp16 snow targets behind a quality toggle.
kSNOWandkSNOW_SWAPmoving fromR8G8B8A8_UNORMtoR16G16B16A16_FLOATincreases bandwidth and RT memory pressure on every snow pass. That seems justified for the banding fix, but it is still a performance-sensitive graphics change and should ideally be user-configurable, especially for VR/lower-end GPUs.As per coding guidelines, "Always consider GPU workload and user experience when implementing graphics features" and "Flag potential performance impact issues for graphics features and suggest user toggles for performance-sensitive features".
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/Hooks.cpp` around lines 584 - 605, The change forces kSNOW and kSNOW_SWAP targets to fp16 in CreateRenderTarget_Snow::thunk and CreateRenderTarget_SnowSwap::thunk unconditionally; add a user-configurable quality toggle check so fp16 is only set when high-snow-quality is enabled (and otherwise keep the original format), e.g. consult a runtime setting or config flag before calling a_properties->format.set(RE::BSGraphics::Format::kR16G16B16A16_FLOAT) in both CreateRenderTarget_Snow and CreateRenderTarget_SnowSwap, defaulting to current behavior for low/VR/low-end profiles and ensuring the code falls back to the original R8G8B8A8_UNORM when the toggle is off.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@src/Hooks.cpp`:
- Around line 584-605: The change forces kSNOW and kSNOW_SWAP targets to fp16 in
CreateRenderTarget_Snow::thunk and CreateRenderTarget_SnowSwap::thunk
unconditionally; add a user-configurable quality toggle check so fp16 is only
set when high-snow-quality is enabled (and otherwise keep the original format),
e.g. consult a runtime setting or config flag before calling
a_properties->format.set(RE::BSGraphics::Format::kR16G16B16A16_FLOAT) in both
CreateRenderTarget_Snow and CreateRenderTarget_SnowSwap, defaulting to current
behavior for low/VR/low-end profiles and ensuring the code falls back to the
original R8G8B8A8_UNORM when the toggle is off.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 35db8d9c-c510-4398-98cc-29f6df5ac8f0
📒 Files selected for processing (6)
features/Terrain Helper/Shaders/Features/TerrainHelper.inipackage/Shaders/ISWaterBlend.hlslpackage/Shaders/Lighting.hlslsrc/Features/UnifiedWater.cppsrc/Hooks.cpptools/feature_version_audit.py
|
✅ A pre-release build is available for this PR: |
## What
- **Regenerate** `.github/configs/shader-validation{,-vr}.yaml` from
fresh Debug-level `CommunityShaders.log` captures on the deployed
**1.6.1** build (SE + VR), via `generate-shader-configs.ps1`. Picks up
permutation changes from the 1.6.1 shader fixes (`Lighting.hlsl`,
`ISWaterBlend.hlsl`). Both regenerated **0 errors** (SE 24 shaders /
3324 variants, VR 25 / 3617).
- **Add** `docs/development/release-validation.md` — runbook for in-game
release validation via the devbench MCP (shader-cache gate, feature
load, in-game load, log scan) + the config-refresh procedure.
## On the large diff
The config diff is a **full mechanical regen** (variant reordering +
1.6.1 additions; files grew SE +2.3k / VR +6k lines), **not
hand-edited**. Don't review line-by-line — the **shader-validation CI
job validates it** by compiling every variant in the matrix.
## Validation that produced this
Built + deployed 1.6.1 (PR #74 content) to SE + VR; via devbench MCP
both editions passed: **0 failed shaders**, **all features loaded** (37
VR / 36 SE), `loadLast` → WhiterunWorld with **no CTD**, and **0 `[E]`
log errors** traceable to 1.6.1 (only pre-existing
Streamline/terrain/WeatherEditor notices).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **Documentation**
* Added a new development guide for validating release builds using
internal testing tools and procedures.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
What
Syncs upstream community-shaders
hotfix/1.6.x(the staged v1.6.1 hotfix) onto our 1.6.0 base, and folds in the Terrain Helper AIO inclusion (supersedes #73). Cuts our v1.6.1, aligned with upstream's.Upstream fixes pulled in
fix(hooks): snow render targets → fp16 (banding)fix(emat): solid-black height-only masksfix(water): blending/ghosting + LOD gapscici: fix release build and nexus upload pipeline after 1.6 community-shaders/skyrim-community-shaders#2444: the feature-auditAuditVersionopt-outResolution (per our upstream-merge pattern)
--ours(kept the fork's; dropped upstream's divergent CI changes incl. release-build).tools/feature_version_audit.py→ upstream (theAuditVersionopt-out — this is the native version of the cherry-pick fix(aio): include Terrain Helper in AIO bundle #73 was doing)..ini→AuditVersion = false(upstream; activation-only) +autoupload = true(fork — we ship it in the AIO). Folds fix(aio): include Terrain Helper in AIO bundle #73.Net diff vs dev: 6 files (4 code fixes + audit script + the
.ini) — no pipeline drift.v1.6.1— re-verify against the tag when published (you approved syncing the staged branch now).fix:attribution and let semantic-release count them toward the 1.6.1 bump.Closes #73.
🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Bug Fixes