rj-action-library/Runtime/Shading/Generators/Spatial/Fading/DepthProximity/DepthPromixityFading.cs

55 lines
1.4 KiB
C#

using Godot;
using System.Reflection;
using System.Collections.Generic;
using System.Linq;
namespace Rokojori
{
[Tool]
[GlobalClass]
public partial class DepthPromixityFading:FadingModifier
{
public override List<ShaderCode> GetFadingCode( ShaderGenerationContext context, int offsetIndex, AlphaFadeMode parentFadeMode )
{
var alphaFadeMode = GetFadeMode( parentFadeMode );
var suffix = GetSuffix( offsetIndex );
if ( context.isIncludesPhase )
{
return IncludeDepthLibrary();
}
if ( context.isVariablesPhase )
{
var depthProximityFadeDistanceUniform = Uniform( "depthProximityFadeDistance" + suffix, 0.2f, 0, 1000 ).LineBreak();
var list = new List<ShaderCode>()
{
BuiltInTextureShaderCode.Depth,
ToCode( depthProximityFadeDistanceUniform )
};
return list;
}
if ( context.isFragmentPhase )
{
var code =
$@"
float depthProximityAlpha{suffix} = getDepthProximityAlpha( depthTexture,
SCREEN_UV, INV_PROJECTION_MATRIX,
VERTEX.z, depthProximityFadeDistance{suffix}
);
";
return ToCode( code.Indent( " " ) ).Concat( ToCode( AlphaFade.Fragment( "depthProximityAlpha" + suffix, alphaFadeMode ) ) );
}
return [];
}
}
}