- chore: shadow limit fix prep by @doodlum
- feat: read shadow data by @doodlum
- chore: clean up by @doodlum
- chore: add more nonsense by @doodlum
- chore: more nonsense by @doodlum
- chore: work on optimised shadow functions by @doodlum
- chore: clean up nonsense by @doodlum
- chore: fix more nonsense by @doodlum
- chore: updates by @doodlum
- chore: optimise by @doodlum
- chore: clean up by @doodlum
- chore: less nonsense bindings by @doodlum
- chore: sample dir shadow correctly by @doodlum
- feat: working dir shadow sample by @doodlum
- fix: fix shadow comp for now by @doodlum
- chore: meh by @doodlum
- feat: other shadow types by @doodlum
- chore: more correct but no worky by @doodlum
- fix: fix nonsense by @doodlum
- feat: all shadows working by @doodlum
- chore: remove checks by @doodlum
- chore: clean up by @doodlum
- chore: getting there by @doodlum
- fix: fix nonsense by @doodlum
- fix: fix pb shadow by @doodlum
- feat: shadows working by @doodlum
- chore: clean up by @doodlum
- chore: add meh thing by @doodlum
- chore: try new meh method by @doodlum
- fix: do meh method properly by @doodlum
- chore: all meh updates by @doodlum
- feat: shadow limit fix by @doodlum
- feat: up to 16 shadows by @doodlum
- chore: dont modify resource by @doodlum
- chore: updates by @doodlum
- chore: add inv shadow proj by @doodlum
- fix: fix nonsense by @doodlum
- fix: avoid texture slot collision by @alandtse
- fix: missing shadows due to buffer mismatch by @alandtse
- fix: use shadowmapIndex for slotIndex by @alandtse
- fix: grass and volumetric lighting compilation by @alandtse
- refactor: remove unused rotationMatrix by @alandtse
- feat: tie shadowlights to kSHADOWMAPS size by @alandtse
- fix: ignore bad shadow data by @alandtse
- fix: cap shadow light processing by slot count by @alandtse
- fix: avoid double counting shadowlights by @alandtse
- feat: add shadow settings by @alandtse
- refactor: move shadow limit into LLF by @alandtse
- feat: enable VR shadows by @alandtse
- feat: filter omnishadows by @alandtse
- refactor: dry code by @alandtse
- fix: filter settings by @alandtse
- chore: update logging and ui display by @alandtse
- chore: fix light overcount for ui info by @alandtse
- feat: add shadow light visualization debug by @alandtse
- refactor: move point/spot shadow lights into LLF by @alandtse
- fix: shadow-space transformations by @alandtse
- perf: use cold war center pixel for spotlights by @alandtse
- refactor: simplify shadow sampling by @alandtse
- chore: add additional debug by @alandtse
- style: 🎨 apply pre-commit.ci formatting by @pre-commit-ci[bot]
- fix: fix shadow detection by @doodlum
- fix: update to latest clib by @doodlum
- refactor: use BSTArray accessor by @alandtse
- revert: "refactor: use BSTArray accessor" by @alandtse
- fix: fix shadow flicker by @alandtse
- build: bump commonlib to 4.8.2 by @alandtse
- feat: initial port of intellightent by @alandtse
- chore: cleanup comments by @alandtse
- refactor: remove unused sections per meh by @alandtse
- chore: simplify settings by @alandtse
- feat: enhance shadow light debug table by @alandtse
- feat(SCM): add enable toggle by @alandtse
- feat: add in-scene column by @alandtse
- chore: rename ui to shadow limit fix by @alandtse
- chore: remove extraneous comments by @alandtse
- fix: fix spotlights by @alandtse
- feat: improve shadow sampling filters by @alandtse
- refactor: move hooks and game globals by @alandtse
- chore: fix settings descriptions by @alandtse
- feat: add autobudget by @alandtse
- chore: swap to ascii by @alandtse
- chore: disable if intellightent-ng.dll detected by @alandtse
- chore: address ai comments by @alandtse
- perf: compute slope bias outside of loop by @alandtse
- fix: light leaks from SampleCmpLevelZero by @alandtse
- feat: add auto budget mode by @alandtse
- feat: set pcf to default sampling by @alandtse
- feat: set auto target fps by @alandtse
- refactor: use enums for modes by @alandtse
- refactor(llf): extract shadow ops to ShadowRenderer.cpp by @alandtse
- fix: auto budget throttling at target fps by @alandtse
- fix(VR): use worldspace for rotation calculation by @alandtse
- refactor: dry by @alandtse
- fix(rebase): restore VR cluster defines, ThemeManager overlay pos, category constant by @alandtse
- fix(shadows): slop bias in per-light shadow loop by @alandtse
- fix(VR): fix wrong eye offset by @alandtse
- chore: address AI comments by @alandtse
- fix: fix slot count display by @alandtse
- refactor(llf): extract shadow UI into ShadowCasterManager by @alandtse
- feat(shadows): importance-weighted redraw scheduling by @alandtse
- chore: remove stale comment by @alandtse
- fix(llf): use stable slot index in shadow upload by @alandtse
- fix: Point Light Shadow Factor visualizer by @alandtse
- build: fix warnings by @alandtse
- chore: address ai comments by @alandtse
- fix: exterior shadow casters not showing by @alandtse
- chore: address ai comments by @alandtse
- fix: set min redraw floor to match vanilla by @alandtse
- docs: remove stale comments by @alandtse
- fix(VR): detect hmd refresh rate by @alandtse
- fix(VR): fix missing shadow casters by @alandtse
- fix: ctd from stale lightkey by @alandtse
- fix: CTD with empty shadowmapDescriptors by @alandtse
- chore(upscaling): bump version by @alandtse
- chore: bump versions by @alandtse
- chore: remove dead code by @alandtse
- chore: remove shadow filtering by @alandtse
- chore: remove useless statements by @alandtse
- refactor: address comments by @alandtse
- fix: CTD when switching locations with overlay by @alandtse
- style: fix line endings by @alandtse
- chore: bump vr version by @alandtse
- feat: add directional shadow sampling by @doodlum
- fix: Change SharedShadowMap register back from t80 to t18 by @SkrubbySkrubInAShrub
- style: 🎨 apply pre-commit.ci formatting by @pre-commit-ci[bot]
- fix(shaders): replace missing GetLightingShadow in Particle.hlsl by @alandtse
- chore: clean up shadow sampling by @doodlum
- style: 🎨 apply pre-commit.ci formatting by @pre-commit-ci[bot]
- fix: shadow fixes by @doodlum
- style: 🎨 apply pre-commit.ci formatting by @pre-commit-ci[bot]
- feat: improved quality of shadows by @doodlum
- Merge branch 'shadow-limit-fix' of https://github.com/doodlum/skyrim-community-shaders into shadow-limit-fix by @doodlum
- style: 🎨 apply pre-commit.ci formatting by @pre-commit-ci[bot]
- Revert "feat: improved quality of shadows" by @doodlum
- Merge branch 'shadow-limit-fix' of https://github.com/doodlum/skyrim-community-shaders into shadow-limit-fix by @doodlum
- style: 🎨 apply pre-commit.ci formatting by @pre-commit-ci[bot]
- perf: optimise world positions by @doodlum
- refactor: uniform names by @doodlum
- fix: fix shadow cascades by @doodlum
- style: 🎨 apply pre-commit.ci formatting by @pre-commit-ci[bot]
- Merge branch 'shadow-limit-fix' of https://github.com/doodlum/skyrim-community-shaders into shadow-limit-fix by @doodlum
- feat: effect shadows by @doodlum
- perf: speed by @doodlum
- chore: integrate SLF inside LLF properly by @doodlum
- style: 🎨 apply pre-commit.ci formatting by @pre-commit-ci[bot]
- fix: add effect.hlsl change by @doodlum
- Merge branch 'shadow-limit-fix' of https://github.com/doodlum/skyrim-community-shaders into shadow-limit-fix by @doodlum
- Merge branch 'dev' into shadow-limit-fix by @doodlum
- fix: fixes by @doodlum
- style: 🎨 apply pre-commit.ci formatting by @pre-commit-ci[bot]
- Merge branch 'dev' into shadow-limit-fix by @doodlum
- fix: fix acne by @doodlum
- fix: more acne fixes by @doodlum
- fix: more acne fixes by @doodlum
- Merge upstream/dev into shadow-limit-fix by @alandtse
- fix(scm): guard re-entrant VR scheduling and null e.Light by @alandtse
- fix(llf): restore DirectionalShadowCascades t99 binding by @alandtse
- fix(vsmshader): update GetVSMShadow2D to 4-parameter signature by @alandtse
- Merge remote-tracking branch 'upstream/dev' into shadow-limit-fix by @alandtse
- fix(scm): convert excess shadow lights to normal (with UAF fix) by @alandtse
- Merge upstream/dev into shadow-limit-fix by @alandtse
- fix(rungrass): include ShadowSampling.hlsli before LightLimitFix.hlsli by @alandtse
- fix(rungrass): use SLF shadow API for per-light shadows by @alandtse
- fix(scm): UAF in EnableLight->EndLight via NiPointer keepalive by @alandtse
- fix(scm): revert NiPointer keepalive; null-check before EndLight by @alandtse
- Revert "fix(scm): convert excess shadow lights to normal (with UAF fix)" by @alandtse
- refactor(scm): atomic per-candidate scheduling loop (option C) by @alandtse
- fix(scm): stop DrawSettings clamping MaxRedrawPerFrame to 1 by @alandtse
- fix(scm): restore WSU no-cull + flicker fixes lost in May-1 reset by @alandtse
- fix(llf): vtable guard against game-side refcount bypasses by @alandtse
- fix(scm): clamp auto budget target to actual frame time by @alandtse
- fix(llf): resolve LLFDEBUG shader compile errors by @alandtse
- fix(isl): preserve shadow-caster cutoff for converted lights by @alandtse
- chore(scm): expose converted-lights count in DrawShadowStats by @alandtse
- fix(llf): converted shadow lights reach the cluster + per-surface pipelines by @alandtse
- chore(scm): code cleanup post-Ghidra discovery by @alandtse
- Merge remote-tracking branch 'upstream/dev' into shadow-limit-fix by @alandtse
- build(isl): bump by @alandtse
- fix(scm): drop spot-light excess instead of wrongly converting by @alandtse
- feat(scm): show converted lights in shadow caster table by @alandtse
- feat(scm): add Conv group toggle in shadow caster table by @alandtse
- feat(scm): debug overrides in shadow caster table by @alandtse
- refactor(scm): drop Auto budget mode, keep its useful diagnostics by @alandtse
- fix(scm): gate hover pulse on Shift, stop instantly on release by @alandtse
- feat(llf): explicit Show Shadow Overlay toggle by @alandtse
- fix(scm): restore Intellightent budget formula, default Manual @ 5 ms by @alandtse
- fix(llf): hemi shadow distortion (RenderDoc-verified) by @alandtse
- fix(scm): scheduler correctness + per-frame shadowLightsAccum reset by @alandtse
- refactor(llf): consolidate shadow stats UX by @alandtse
- fix(scm): amortise BudgetTracker GC, add Tracy zones by @alandtse
- Merge remote-tracking branch 'upstream/dev' into shadow-limit-fix by @alandtse
- fix(scm): harden ForEachShadowLight against corrupted accumulator by @alandtse
- Merge remote-tracking branch 'upstream/dev' into shadow-limit-fix by @alandtse
- fix(scm): restore sun shadow rendering by @alandtse
- fix(scm): VR shadow lights capped at vanilla 4 + sun by @alandtse
- fix: distant shadow lights not converting by @alandtse
- feat(scm): VRAM-aware shadow array sizing + portal-strict per type by @alandtse
- perf(scm): add Tracy zones + annotations for scheduler hot path by @alandtse
- perf(scm): sub-zone ValidateAndScheduleBudget for Tracy profiling by @alandtse
- fix(llf): converted lights go dark on subsequent frames by @alandtse
- fix(scm): reconcile s_normalConvert with engine state each frame by @alandtse
- fix(scm): reset session state on LoadingMenu open by @alandtse
- fix(llf): fall through to engine ShadowMask past cascade 1 by @alandtse
- feat(scm): expose iShadowMapResolution as a launcher-style tier setting by @alandtse
- fix(scm): RemoveLight converted lights on scene transition by @alandtse
- fix(llf): mitigate stale BSRenderPass.sceneLights crash from converted lights by @alandtse
- fix(llf): correct directional cascade fadeFactor inversion + camera relativity by @alandtse
- fix(scm): respect MaxRedrawPerFrame for new-light first-render by @alandtse
- perf(scm): schedule new lights by importance instead of pool order by @alandtse
- fix(scm): drop no-op GameRemoveLight call on scene transition by @alandtse
- Merge upstream/dev into shadow-limit-fix by @alandtse
- perf(scm): rank shadow lights by screen-space coverage, not just distance by @alandtse
- chore(scm): Tracy instrumentation for slot lifecycle + live config by @alandtse
- fix(scm): retain shadow slots across one-frame scheduling blips by @alandtse
- fix(scm): suppress shadow caster insertion for never-rendered slots by @alandtse
- chore(scm): classify invalidCamera into frustum / LOD / other sub-reasons by @alandtse
- perf(scm): drop frustum-culled lights from convert pipeline by @alandtse
- perf(scm): cache shadow maps when geometry hasn't changed since last render by @alandtse
- fix(scm): reset slot metadata at acquire site instead of eviction sites by @alandtse
- style(scm): tighten comments by @alandtse
- fix(scm): validate light pointer with isUsableLight after engine calls by @alandtse
- fix(scm): floor MaxRedrawPerFrame at 4 by @alandtse
- Merge remote-tracking branch 'upstream/dev' into shadow-limit-fix by @alandtse
- revert: "fix(llf): fall through to engine ShadowMask past cascade 1" by @alandtse
- refactor(scm): move rank-drift suppression into score formula by @alandtse
- fix(scm): convert frustum-out omnis instead of dropping them by @alandtse
- fix(llf): leave ShadowParam.y=0 when descriptors are unpopulated by @alandtse
- fix(scm): install conversion hooks unconditionally, preserve smooth lodDimmer by @alandtse
- chore(llf): throttle the shadow-light-count debug log by @alandtse
- fix(scm): restart-gate the Enabled toggle by @alandtse
- fix(scm): persist restart-required label against boot Enabled value by @alandtse
- Merge remote-tracking branch 'upstream/dev' into shadow-limit-fix by @alandtse
- docs(scm): clarify slot reservation and hook firing scope by @alandtse
- docs(scm): trim verbose comments across cpp and header by @alandtse
- chore(sync): merge origin/shadow-limit-fix by @alandtse
- fix(effect): pass world-space position to GetShadowLightShadow by @alandtse
- chore(scm): name LLF::ShadowLights buffer for RenderDoc by @alandtse
- fix(deferred,llf): address PR review (sun upload + persistence) by @alandtse
- revert(llf): don't persist debug visualization settings by @alandtse
- fix(scm): reserve focus shadow slots dynamically, drop disable patches by @alandtse
- feat(scm): backwards-fill focus slots + show focus rows in table by @alandtse
- feat(scm,llf): sample focus shadows in LLF directional shadow by @alandtse
- fix(llf): guard focus shadow sampling against NaN and OOB by @alandtse
- fix(scm): trigger focus accumulate in extended mode by @alandtse
- style(llf): use EPSILON_DIVISION over magic 1e-6 by @alandtse
- style(llf): use QPC over std::chrono for shadow-count log throttle by @alandtse
- fix(llf): restore engine-mask fall-through past cascade 1 by @alandtse
- fix(scm): suppress engine focus path in extended mode by @alandtse
- Merge branch 'dev' into shadow-limit-fix by @SkrubbySkrubInAShrub