BIN
Content/Shaders/MotionBlur.flax
(Stored with Git LFS)
BIN
Content/Shaders/MotionBlur.flax
(Stored with Git LFS)
Binary file not shown.
@@ -30,6 +30,9 @@ GPU_CB_STRUCT(Data {
|
|||||||
|
|
||||||
Float2 Input0SizeInv;
|
Float2 Input0SizeInv;
|
||||||
Float2 Input2SizeInv;
|
Float2 Input2SizeInv;
|
||||||
|
|
||||||
|
Float3 PrevWorldOriginOffset;
|
||||||
|
float Dummy1;
|
||||||
});
|
});
|
||||||
|
|
||||||
MotionBlurPass::MotionBlurPass()
|
MotionBlurPass::MotionBlurPass()
|
||||||
@@ -194,6 +197,7 @@ void MotionBlurPass::RenderMotionVectors(RenderContext& renderContext)
|
|||||||
Matrix::Transpose(renderContext.View.ViewProjection(), data.CurrentVP);
|
Matrix::Transpose(renderContext.View.ViewProjection(), data.CurrentVP);
|
||||||
Matrix::Transpose(renderContext.View.PrevViewProjection, data.PreviousVP);
|
Matrix::Transpose(renderContext.View.PrevViewProjection, data.PreviousVP);
|
||||||
data.TemporalAAJitter = renderContext.View.TemporalAAJitter;
|
data.TemporalAAJitter = renderContext.View.TemporalAAJitter;
|
||||||
|
data.PrevWorldOriginOffset = renderContext.View.Origin - renderContext.View.PrevOrigin;
|
||||||
auto cb = _shader->GetShader()->GetCB(0);
|
auto cb = _shader->GetShader()->GetCB(0);
|
||||||
context->UpdateCB(cb, &data);
|
context->UpdateCB(cb, &data);
|
||||||
context->BindCB(0, cb);
|
context->BindCB(0, cb);
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ int MaxBlurSamples;
|
|||||||
uint VariableTileLoopCount;
|
uint VariableTileLoopCount;
|
||||||
float2 Input0SizeInv;
|
float2 Input0SizeInv;
|
||||||
float2 Input2SizeInv;
|
float2 Input2SizeInv;
|
||||||
|
float3 PrevWorldOriginOffset;
|
||||||
|
float Dummy1;
|
||||||
META_CB_END
|
META_CB_END
|
||||||
|
|
||||||
DECLARE_GBUFFERDATA_ACCESS(GBuffer)
|
DECLARE_GBUFFERDATA_ACCESS(GBuffer)
|
||||||
@@ -39,7 +41,7 @@ float4 PS_CameraMotionVectors(Quad_VS2PS input) : SV_Target
|
|||||||
GBufferData gBufferData = GetGBufferData();
|
GBufferData gBufferData = GetGBufferData();
|
||||||
float4 worldPos = float4(GetWorldPos(gBufferData, input.TexCoord, deviceDepth), 1);
|
float4 worldPos = float4(GetWorldPos(gBufferData, input.TexCoord, deviceDepth), 1);
|
||||||
|
|
||||||
float4 prevClipPos = mul(worldPos, PreviousVP);
|
float4 prevClipPos = mul(worldPos + float4(PrevWorldOriginOffset, 0), PreviousVP);
|
||||||
float4 curClipPos = mul(worldPos, CurrentVP);
|
float4 curClipPos = mul(worldPos, CurrentVP);
|
||||||
float2 prevHPos = prevClipPos.xy / prevClipPos.w;
|
float2 prevHPos = prevClipPos.xy / prevClipPos.w;
|
||||||
float2 curHPos = curClipPos.xy / curClipPos.w;
|
float2 curHPos = curClipPos.xy / curClipPos.w;
|
||||||
|
|||||||
Reference in New Issue
Block a user