diff --git a/Runtime/Rendering/CompositorEffects/TemporalSmear/TemporalSmear.glsl b/Runtime/Rendering/CompositorEffects/TemporalSmear/TemporalSmear.glsl index 07b5b51..ca822f3 100644 --- a/Runtime/Rendering/CompositorEffects/TemporalSmear/TemporalSmear.glsl +++ b/Runtime/Rendering/CompositorEffects/TemporalSmear/TemporalSmear.glsl @@ -17,6 +17,8 @@ uniform Params float luma; float minBrightness; float saturate; + float blur; + float blurRange; } params; @@ -27,13 +29,25 @@ void main() vec4 currentPixel = imageLoad( currentImage, currentPosition ); vec4 lastPixel = imageLoad( lastProcessedImage, currentPosition ); + int blurOffset = int( params.blurRange ); + vec4 top = imageLoad( lastProcessedImage, currentPosition + ivec2( 0, -blurOffset ) ); + vec4 left = imageLoad( lastProcessedImage, currentPosition + ivec2( -blurOffset, 0 ) ); + vec4 bottom = imageLoad( lastProcessedImage, currentPosition + ivec2( 0, blurOffset ) ); + vec4 right = imageLoad( lastProcessedImage, currentPosition + ivec2( blurOffset, 0 ) ); + + vec4 blurred = ( top + left + bottom + right ) / 4.0; + + vec4 blurredLastPixel = mix( lastPixel, blurred, params.blur ); + float luminance = min( 1.0, length( vec3( lastPixel.r, lastPixel.g, lastPixel.b ) ) ); float amount = ( luminance - params.minBrightness ) / ( 1.0 - params.minBrightness ); amount = min( max( 0.0, amount * params.saturate ), 1.0 ) * params.smearing; amount = mix( 1.0, amount, params.luma ); + vec4 nextPixel = currentPixel + min( 1.0, amount * params.smearing ) * ( lastPixel - currentPixel ); + vec4 nextPixelBlurred = currentPixel + min( 1.0, amount * params.smearing ) * ( blurredLastPixel - currentPixel ); - imageStore( currentImage, currentPosition, mix( currentPixel, nextPixel, params.amount ) ); + imageStore( currentImage, currentPosition, mix( currentPixel, nextPixelBlurred, params.amount ) ); imageStore( lastProcessedImage, currentPosition, nextPixel ); } diff --git a/Runtime/Rendering/CompositorEffects/TemporalSmear/TemporalSmearEffect.cs b/Runtime/Rendering/CompositorEffects/TemporalSmear/TemporalSmearEffect.cs index 70dd1bd..8d4a7fd 100644 --- a/Runtime/Rendering/CompositorEffects/TemporalSmear/TemporalSmearEffect.cs +++ b/Runtime/Rendering/CompositorEffects/TemporalSmear/TemporalSmearEffect.cs @@ -27,6 +27,11 @@ namespace Rokojori [Export( PropertyHint.Range, "0.5,5")] public float lumaSaturate = 1.3f; + [Export( PropertyHint.Range, "0,1")] + public float blur = 0.5f; + + [Export( PropertyHint.Range, "1,30")] + public float blurRange = 2f; protected override void OnConfigure() { @@ -43,7 +48,9 @@ namespace Rokojori smearing, lumaAmount, lumaTreshold, - lumaSaturate + lumaSaturate, + blur, + blurRange ); }