Added velocity buffer + start of TAA implementation

This commit is contained in:
antopilo
2024-09-24 21:19:56 -04:00
parent bf75c04a8c
commit 6e8f14c5da
10 changed files with 436 additions and 398 deletions

View File

@@ -10,6 +10,8 @@ layout(location = 4) in vec3 Bitangent;
uniform mat4 u_Model;
uniform mat4 u_View;
uniform mat4 u_Projection;
uniform mat4 u_PreviousViewModel;
uniform vec2 u_Jitter;
out vec4 FragPos;
out mat3 TBN;
@@ -18,6 +20,7 @@ out mat4 Inv_Proj;
out mat4 Inv_View;
out mat4 view;
out vec3 o_Tangent;
out vec4 PreviousFragPos;
void main()
{
@@ -37,8 +40,11 @@ void main()
Inv_View = u_View;
o_Tangent = Tangent;
gl_Position = u_Projection * u_View * u_Model * vec4(VertexPosition, 1.0f);
FragPos = gl_Position;
vec4 clipPosition = u_Projection * u_View * u_Model * vec4(VertexPosition, 1.0f);
FragPos = clipPosition;
gl_Position = clipPosition;
PreviousFragPos = u_PreviousViewModel * vec4(VertexPosition, 1.0f);
}
#shader fragment
@@ -49,14 +55,14 @@ layout(location = 1) out vec4 gNormal;
layout(location = 2) out vec4 gMaterial;
layout(location = 3) out int gEntityID;
layout(location = 4) out float gEmissive;
layout(location = 5) out vec4 gTexelOffset;
layout(location = 5) out vec4 gVelocity;
in vec4 FragPos;
in vec2 UV;
in mat3 TBN;
in mat4 Inv_Proj;
in mat4 Inv_View;
in vec4 PreviousFragPos;
// Material
uniform sampler2D m_Albedo;
@@ -143,27 +149,8 @@ void main()
gMaterial.b = finalRoughness;
gEntityID = int(u_EntityID);
gEmissive = u_Emissive;
vec3 right = vec3(1.0, 0, 0);
right = TBN * normalize(right);
vec3 up = TBN * normalize(vec3(0, 1, 0));
vec2 textureSize2d = textureSize(m_Albedo, 0);
vec2 pixelPos = UV * textureSize2d;
vec2 centerOfPixel = (vec2(0.5) + floor(pixelPos));
vec2 uvCenter = centerOfPixel;
vec3 uvDiff = vec3(uvCenter.x - pixelPos.x, uvCenter.y - pixelPos.y, 0.0f) / vec3(textureSize2d.x, textureSize2d.y, 1.0f);
uvDiff = uvDiff.x * right;
uvDiff = uvDiff.y * up;
//uvDiff * right;
uvDiff = uvDiff * 100.0f;
vec2 offset = (centerOfPixel - vec2(FragPos.x, FragPos.y)) * 10.0f;
vec3 finalTransformed = normalize(uvDiff);
vec4 conversion = Inv_Proj * Inv_View * vec4(finalTransformed, 1.0f);
gTexelOffset = vec4(conversion.x / 2.0 + 0.5f, conversion.y / 2.0 + 0.5f, 0, 1);
vec4 positionDifference = FragPos - PreviousFragPos;
gVelocity = vec4((positionDifference.x + 1.0) / 2.0, (positionDifference.y + 1.0) / 2.0, 0.0f, 1);
}