mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-03-22 23:30:14 +00:00
Some checks are pending
Build / Build (arm64) (push) Waiting to run
Build / Build (x86-64) (push) Waiting to run
Build / Build (macOS arm64) (push) Waiting to run
Build / Build (windows-arm64) (push) Waiting to run
Build / Build (windows-x86-64) (push) Waiting to run
Security / CodeQL (C/C++) (push) Waiting to run
Security / Semgrep (push) Waiting to run
Security / Sanitizer Build (ASan/UBSan) (push) Waiting to run
- Motion vectors: single unjittered reprojection matrix (80 bytes) instead of two jittered matrices (160 bytes), eliminating numerical instability from jitter amplification through large world coordinates - Sharpen pass: fix Y-flip for correct UV sampling, double-buffer descriptor sets to avoid race with in-flight command buffers - MSAA: auto-disable when FSR2 enabled, grey out AA setting in UI - Accumulation: variance-based neighborhood clamping in YCoCg space, correct history layout transitions - Frame index: wrap at 256 for stable Halton sequence
35 lines
1.3 KiB
GLSL
35 lines
1.3 KiB
GLSL
#version 450
|
|
|
|
layout(local_size_x = 8, local_size_y = 8) in;
|
|
|
|
layout(set = 0, binding = 0) uniform sampler2D depthBuffer;
|
|
layout(set = 0, binding = 1, rg16f) uniform writeonly image2D motionVectors;
|
|
|
|
layout(push_constant) uniform PushConstants {
|
|
mat4 reprojMatrix; // prevUnjitteredVP * inverse(currentUnjitteredVP)
|
|
vec4 resolution; // xy = internal size, zw = 1/internal size
|
|
} pc;
|
|
|
|
void main() {
|
|
ivec2 pixelCoord = ivec2(gl_GlobalInvocationID.xy);
|
|
ivec2 imgSize = ivec2(pc.resolution.xy);
|
|
if (pixelCoord.x >= imgSize.x || pixelCoord.y >= imgSize.y) return;
|
|
|
|
// Sample depth (Vulkan: 0 = near, 1 = far)
|
|
float depth = texelFetch(depthBuffer, pixelCoord, 0).r;
|
|
|
|
// Pixel center in UV [0,1] and NDC [-1,1]
|
|
vec2 uv = (vec2(pixelCoord) + 0.5) * pc.resolution.zw;
|
|
vec2 ndc = uv * 2.0 - 1.0;
|
|
|
|
// Clip-to-clip reprojection: current unjittered clip → previous unjittered clip
|
|
vec4 clipPos = vec4(ndc, depth, 1.0);
|
|
vec4 prevClip = pc.reprojMatrix * clipPos;
|
|
vec2 prevNdc = prevClip.xy / prevClip.w;
|
|
vec2 prevUV = prevNdc * 0.5 + 0.5;
|
|
|
|
// Motion = previous position - current position (both unjittered, in UV space)
|
|
vec2 motion = prevUV - uv;
|
|
|
|
imageStore(motionVectors, pixelCoord, vec4(motion, 0.0, 0.0));
|
|
}
|