Temporal Smear Update
This commit is contained in:
parent
89138f1a1c
commit
e95ce87015
|
@ -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 );
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue