Temporal Smear Update

This commit is contained in:
Josef 2025-04-24 16:20:58 +02:00
parent 89138f1a1c
commit e95ce87015
2 changed files with 23 additions and 2 deletions

View File

@ -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 );
}

View File

@ -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
);
}