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 luma;
float minBrightness; float minBrightness;
float saturate; float saturate;
float blur;
float blurRange;
} params; } params;
@ -27,13 +29,25 @@ void main()
vec4 currentPixel = imageLoad( currentImage, currentPosition ); vec4 currentPixel = imageLoad( currentImage, currentPosition );
vec4 lastPixel = imageLoad( lastProcessedImage, 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 luminance = min( 1.0, length( vec3( lastPixel.r, lastPixel.g, lastPixel.b ) ) );
float amount = ( luminance - params.minBrightness ) / ( 1.0 - params.minBrightness ); float amount = ( luminance - params.minBrightness ) / ( 1.0 - params.minBrightness );
amount = min( max( 0.0, amount * params.saturate ), 1.0 ) * params.smearing; amount = min( max( 0.0, amount * params.saturate ), 1.0 ) * params.smearing;
amount = mix( 1.0, amount, params.luma ); amount = mix( 1.0, amount, params.luma );
vec4 nextPixel = currentPixel + min( 1.0, amount * params.smearing ) * ( lastPixel - currentPixel ); 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 ); imageStore( lastProcessedImage, currentPosition, nextPixel );
} }

View File

@ -27,6 +27,11 @@ namespace Rokojori
[Export( PropertyHint.Range, "0.5,5")] [Export( PropertyHint.Range, "0.5,5")]
public float lumaSaturate = 1.3f; 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() protected override void OnConfigure()
{ {
@ -43,7 +48,9 @@ namespace Rokojori
smearing, smearing,
lumaAmount, lumaAmount,
lumaTreshold, lumaTreshold,
lumaSaturate lumaSaturate,
blur,
blurRange
); );
} }