Initial fix for blurry/noisy transparencies on TAA

This commit is contained in:
Karol Suprynowicz 2025-03-12 00:51:56 +01:00
parent 5b6cda34dc
commit ac344e26bb
3 changed files with 13 additions and 10 deletions

View file

@ -73,10 +73,10 @@ void packDeferredFragmentTranslucent(vec4 prevPositionCS, vec3 normal, float alp
discard;
}
_albedoMetallic = vec4(albedo.rgb, alpha);
_normalRoughness = vec4(packNormal(normal), clamp(roughness, 0.0, 1.0));
_scatteringEmissiveOcclusion = vec4(vec3(0.0), 1.0);
_velocity = vec4(packVelocity(prevPositionCS), 0.0, 0.0);
_lighting = vec4(0.0);
//_normalRoughness = vec4(packNormal(normal), clamp(roughness, 0.0, 1.0));
//_scatteringEmissiveOcclusion = vec4(vec3(0.0), 1.0);
//_velocity = vec4(packVelocity(prevPositionCS), 0.0, 0.0);
//_lighting = vec4(0.0);
}
void packDeferredFragmentTranslucentUnlit(vec4 prevPositionCS, vec3 normal, float alpha, vec3 color) {
@ -84,10 +84,10 @@ void packDeferredFragmentTranslucentUnlit(vec4 prevPositionCS, vec3 normal, floa
discard;
}
_albedoMetallic = vec4(color, alpha);
_normalRoughness = vec4(packNormal(normal), 1.0);
_scatteringEmissiveOcclusion = vec4(vec3(0.0), 1.0);
_velocity = vec4(packVelocity(prevPositionCS), 0.0, 0.0);
_lighting = vec4(color, 1.0);
//_normalRoughness = vec4(packNormal(normal), 1.0);
//_scatteringEmissiveOcclusion = vec4(vec3(0.0), 1.0);
//_velocity = vec4(packVelocity(prevPositionCS), 0.0, 0.0);
//_lighting = vec4(color, 1.0);
}
<@endif@>

View file

@ -216,7 +216,7 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren
task.addJob<DrawHaze>("DrawHazeDeferred", drawHazeInputs, depth > 0);
// Render transparent objects forward in LightingBuffer
const auto transparentsInputs = RenderTransparentDeferred::Inputs(transparents, hazeFrame, lightFrame, lightingModel, lightClusters, shadowFrame, deferredFrameTransform).asVarying();
const auto transparentsInputs = RenderTransparentDeferred::Inputs(transparents, hazeFrame, lightFrame, lightingModel, lightClusters, shadowFrame, deferredFrameTransform, deferredFramebuffer).asVarying();
task.addJob<RenderTransparentDeferred>("DrawTransparentDeferred", transparentsInputs, shapePlumberDeferred, mainViewTransformSlot);
// Highlight
@ -465,12 +465,15 @@ void RenderTransparentDeferred::run(const RenderContextPointer& renderContext, c
const auto& lightClusters = inputs.get4();
// Not needed yet: const auto& shadowFrame = inputs.get5();
const auto& deferredFrameTransform = inputs.get6();
auto &deferredFramebuffer = inputs.get7();
auto deferredLightingEffect = DependencyManager::get<DeferredLightingEffect>();
RenderArgs* args = renderContext->args;
gpu::doInBatch("RenderTransparentDeferred::run", args->_context, [&](gpu::Batch& batch) {
args->_batch = &batch;
batch.setFramebuffer(deferredFramebuffer->getLightingFramebuffer());
// Setup camera, projection and viewport for all items
batch.setViewportTransform(args->_viewport);

View file

@ -44,7 +44,7 @@ protected:
class RenderTransparentDeferred {
public:
using Inputs = render::VaryingSet7<render::ItemBounds, HazeStage::FramePointer, LightStage::FramePointer, LightingModelPointer, LightClustersPointer, LightStage::ShadowFramePointer, DeferredFrameTransformPointer>;
using Inputs = render::VaryingSet8<render::ItemBounds, HazeStage::FramePointer, LightStage::FramePointer, LightingModelPointer, LightClustersPointer, LightStage::ShadowFramePointer, DeferredFrameTransformPointer, DeferredFramebufferPointer>;
using Config = RenderTransparentDeferredConfig;
using JobModel = render::Job::ModelI<RenderTransparentDeferred, Inputs, Config>;