rokojori_action_library/Runtime/VFX/FlareVFX/FlareChromaticAberation/FlareChromaticAberation.cs

55 lines
1.4 KiB
C#

using Godot;
namespace Rokojori
{
[Tool]
[GlobalClass]
public abstract partial class FlareChromaticAberation:Resource
{
[Export( PropertyHint.Range, "0,100" ) ]
public float amount = 0.1f;
[Export( PropertyHint.Range, "0,32" ) ]
public int steps = 3;
[Export( PropertyHint.Range, "1,50" ) ]
public float smear = 2f;
[ExportGroup("Channel Offset")]
[Export( PropertyHint.Range, "0,1" ) ]
public float offsetScale = 0.2f;
[Export( PropertyHint.Range, "-1,1" ) ]
public float offsetR = -0.1f;
[Export( PropertyHint.Range, "-1,1" ) ]
public float offsetG = 0;
[Export( PropertyHint.Range, "-1,1" ) ]
public float offsetB = 0.1f;
public abstract void ApplyChromaticAberation( FlareLayer.Data data );
protected void ApplyChromaticAberationBase( FlareLayer.Data data )
{
var material = data.material;
BaseFlareShader.chromaticAberationMode.Set( material, 1 );
BaseFlareShader.chromaticAberationAmount.Set( material, amount );
var shifts = Vector3.One;
shifts.X += offsetR * offsetScale;
shifts.Y += offsetG * offsetScale;
shifts.Z += offsetB * offsetScale;
BaseFlareShader.chromaticAberationShifts.Set( material, shifts );
BaseFlareShader.chromaticAberationSteps.Set( material, steps );
BaseFlareShader.chromaticAberationSmear.Set( material, smear );
}
}
}