mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-03-25 00:20:16 +00:00
Implement FSR 2.2 temporal upscaling
Full FSR 2.2 pipeline with depth-based motion vector reprojection, temporal accumulation with YCoCg neighborhood clamping, and RCAS contrast-adaptive sharpening. Architecture (designed for FSR 3.x frame generation readiness): - Camera: Halton(2,3) sub-pixel jitter with unjittered projection stored separately for motion vector computation - Motion vectors: compute shader reconstructs world position from depth + inverse VP, reprojects with previous frame's VP - Temporal accumulation: compute shader blends 5-10% current frame with 90-95% clamped history, adaptive blend for disocclusion - History: ping-pong R16G16B16A16 buffers at display resolution - Sharpening: RCAS fragment pass with contrast-adaptive weights Integration: - FSR2 replaces both FSR1 and MSAA when enabled - Scene renders to internal resolution framebuffer (no MSAA) - Compute passes run between scene and swapchain render passes - Camera cut detection resets history on teleport - Quality presets shared with FSR1 (0.50-0.77 scale factors) - UI: "Upscaling" combo with Off/FSR 1.0/FSR 2.2 options
This commit is contained in:
parent
0ffeabd4ed
commit
52317d1edd
11 changed files with 957 additions and 12 deletions
|
|
@ -23,9 +23,16 @@ public:
|
|||
const glm::vec3& getPosition() const { return position; }
|
||||
const glm::mat4& getViewMatrix() const { return viewMatrix; }
|
||||
const glm::mat4& getProjectionMatrix() const { return projectionMatrix; }
|
||||
const glm::mat4& getUnjitteredProjectionMatrix() const { return unjitteredProjectionMatrix; }
|
||||
glm::mat4 getViewProjectionMatrix() const { return projectionMatrix * viewMatrix; }
|
||||
glm::mat4 getUnjitteredViewProjectionMatrix() const { return unjitteredProjectionMatrix * viewMatrix; }
|
||||
float getAspectRatio() const { return aspectRatio; }
|
||||
|
||||
// Sub-pixel jitter for temporal upscaling (FSR 2)
|
||||
void setJitter(float jx, float jy);
|
||||
void clearJitter();
|
||||
glm::vec2 getJitter() const { return jitterOffset; }
|
||||
|
||||
glm::vec3 getForward() const;
|
||||
glm::vec3 getRight() const;
|
||||
glm::vec3 getUp() const;
|
||||
|
|
@ -46,6 +53,8 @@ private:
|
|||
|
||||
glm::mat4 viewMatrix = glm::mat4(1.0f);
|
||||
glm::mat4 projectionMatrix = glm::mat4(1.0f);
|
||||
glm::mat4 unjitteredProjectionMatrix = glm::mat4(1.0f);
|
||||
glm::vec2 jitterOffset = glm::vec2(0.0f); // NDC jitter (applied to projection)
|
||||
};
|
||||
|
||||
} // namespace rendering
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue