Drakonas icon

Untitled

Drakonas | PRO | 05/29/16 08:15:13 PM UTC | 0 ⭐ | 245 👁️ | Never ⏰ | []
OpenGL Shading |

0 B

|

None

|

0 👍

/

0 👎

[OptionBool]
GUIName = Bloom
OptionName = C_BLOOM
DefaultValue = true
 
[OptionBool]
GUIName = Bloom Only
OptionName = A_BLOOMONLY
DefaultValue = false
DependentOption = C_BLOOM
GUIDescription = Only show Bloom effects. (Testing purposes)
 
[OptionRangeInteger]
GUIName = Mix Mode
OptionName = A_BLOOM_MIXMODE
MinValue = 1
MaxValue = 4
StepAmount = 1
DefaultValue = 2
DependentOption = C_BLOOM
GUIDescription = 1 = Linear add | 2 = Screen add | 3 = Screen/Lighten/Opacity | 4 = Lighten
 
[OptionRangeFloat]
GUIName = Threshold
OptionName = A_BLOOM_THRESHOLD
MinValue = 0.01
MaxValue = 1.00
StepAmount = 0.01
DefaultValue = 0.80
DependentOption = C_BLOOM
GUIDescription = Every pixel brighter than this value triggers bloom.
 
[OptionRangeFloat]
GUIName = Amount
OptionName = B_BLOOM_AMOUNT
MinValue = 0.0
MaxValue = 20.0
StepAmount = 0.1
DefaultValue = 0.8
DependentOption = C_BLOOM
GUIDescription = Intensity of bloom.
 
[OptionRangeFloat]
GUIName = Saturation
OptionName = B_BLOOM_SATURATION
MinValue = 0.00
MaxValue = 2.00
StepAmount = 0.01
DefaultValue = 0.80
DependentOption = C_BLOOM
GUIDescription = Bloom saturation. 0.0 means white bloom, 2.0 means very very colorful bloom.
 
[OptionRangeFloat]
GUIName = Tint
OptionName = B_BLOOM_TINT
MinValue = 0.00, 0.00, 0.00
MaxValue = 1.00, 1.00, 1.00
StepAmount = 0.01, 0.01, 0.01
DefaultValue = 0.70, 0.80, 1.00
DependentOption = C_BLOOM
GUIDescription = R, G and B components of bloom tintcolor the bloom color gets shifted to.
 
[OptionBool]
GUIName = Light Scattering
OptionName = D_SCATTERRING
DefaultValue = True
DependentOption = C_BLOOM
 
[OptionRangeFloat]
GUIName = Density
OptionName = E_SDENSITY
MinValue = 0.0
MaxValue = 1.0
StepAmount = 0.01
DefaultValue = 0.17
DependentOption = C_BLOOM
 
[OptionRangeFloat]
GUIName = Start
OptionName = F_SSTART
MinValue = 0.0
MaxValue = 0.5
StepAmount = 0.01
DefaultValue = 0.05
DependentOption = C_BLOOM
 
[OptionRangeFloat]
GUIName = End
OptionName = G_SEND
MinValue = 0.5
MaxValue = 2.0
StepAmount = 0.01
DefaultValue = 2.0
DependentOption = C_BLOOM
 
[OptionRangeFloat]
GUIName = Default Color
OptionName = H_SCOLOR
MinValue = 0.1, 0.1, 0.1
MaxValue = 1.0, 1.0, 1.0
StepAmount = 0.01, 0.01, 0.01
DefaultValue = 0.91, 0.52, 1
DependentOption = C_BLOOM
 
[OptionRangeFloat]
GUIName = Scattering Intensity
OptionName = I_SINTENSITY
MinValue = 0.0
MaxValue = 1.0
StepAmount = 0.01
DefaultValue = 0.36
DependentOption = C_BLOOM
 
[Pass]
EntryPoint = BloomPrePass
DependantOption = C_BLOOM
Input0=PreviousPass
Input0Filter=Linear
Input0Mode=Clamp
[Pass]
EntryPoint = BloomPass1
DependantOption = C_BLOOM
Input0=PreviousPass
Input0Filter=Linear
Input0Mode=Clamp
[Pass]
EntryPoint = BloomPass2
DependantOption = C_BLOOM
OutputScale = 0.5
Input0=PreviousPass
Input0Filter=Linear
Input0Mode=Clamp
[Pass]
EntryPoint = BloomPass3
DependantOption = C_BLOOM
OutputScale = 0.25
Input0=PreviousPass
Input0Filter=Linear
Input0Mode=Clamp
Input1=DepthBuffer
Input1Filter=Nearest
Input1Mode=Clamp
[Pass]
EntryPoint = BloomPass4
DependantOption = C_BLOOM
OutputScale = 0.125
Input0=PreviousPass
Input0Filter=Linear
Input0Mode=Clamp
Input1=DepthBuffer
Input1Filter=Nearest
Input1Mode=Clamp
[Pass]
EntryPoint = BloomScatering
DependantOption = C_BLOOM
OutputScale = 0.03125
Input0=PreviousPass
Input0Filter=Linear
Input0Mode=Clamp
[Pass]
EntryPoint = BloomMerger
DependantOption = C_BLOOM
Input0=Pass9
Input0Filter=Linear
Input0Mode=Clamp
Input1=Pass14
Input1Filter=Linear
Input1Mode=Clamp
Input2=PreviousPass
Input2Filter=Linear
Input2Mode=Clamp
Input3=DepthBuffer
Input3Filter=Nearest
Input3Mode=Clamp
 
float4 Gauss1dPrev2(float2 coord, float2 axis, float mult)
{
    float4 sum = 0;
    float weight[11] = { 0.082607, 0.080977, 0.076276, 0.069041, 0.060049, 0.050187, 0.040306, 0.031105, 0.023066, 0.016436, 0.011254 };
    axis *= GetInvResolution() * mult;
    for (int i = -10; i < 11; i++)
    {
        float currweight = weight[abs(i)];
        sum += SamplePrevLocation(coord.xy + axis.xy * (float)i) * currweight;
    }
    return sum;
}
 
//------------------------------------------------------------------------------
// BLOOM
//------------------------------------------------------------------------------
 
void BloomPrePass()
{
    float4 bloom=0.0;
    float2 bloomuv;
    float2 texcoord = GetCoordinates();
 
    float2 offset[4]=
    {
        float2(1.0, 1.0),
        float2(1.0, 1.0),
        float2(-1.0, 1.0),
        float2(-1.0, -1.0)
    };
 
    for (int i=0; i<4; i++)
    {
        bloomuv.xy=offset[i]*2;
        bloomuv.xy=texcoord.xy + bloomuv.xy;
        float4 tempbloom = SampleLocation(bloomuv.xy);
        tempbloom.a = max(0,dot(tempbloom.xyz,float3(0.333,0.333,0.333))-GetOption(A_ANAMFLARE_THRESHOLD));
        tempbloom.xyz = max(float3(0,0,0), tempbloom.xyz-GetOption(A_BLOOM_THRESHOLD));
        bloom+=tempbloom;
    }
 
    bloom *= 0.25;
    SetOutput(bloom);
}
 
void BloomPass1()
{
 
    float4 bloom=0.0;
    float2 bloomuv;
    float2 texcoord = GetCoordinates();
 
    float2 offset[8]=
    {
        float2(1.0, 1.0),
        float2(0.0, -1.0),
        float2(-1.0, 1.0),
        float2(-1.0, -1.0),
        float2(0.0, 1.0),
        float2(0.0, -1.0),
        float2(1.0, 0.0),
        float2(-1.0, 0.0)
    };
 
    for (int i=0; i<8; i++)
    {
        bloomuv.xy=offset[i]*4;
        bloomuv.xy=texcoord.xy + bloomuv.xy;
        float4 tempbloom=SampleLocation(bloomuv.xy);
        bloom+=tempbloom;
    }
 
    bloom *= 0.125;
    SetOutput(bloom);
}
 
void BloomPass2()
{
    float4 bloom=0.0;
    float2 bloomuv;
    float2 texcoord = GetCoordinates();
 
    float2 offset[8]=
    {
        float2(0.707, 0.707),
        float2(0.707, -0.707),
        float2(-0.707, 0.707),
        float2(-0.707, -0.707),
        float2(0.0, 1.0),
        float2(0.0, -1.0),
        float2(1.0, 0.0),
        float2(-1.0, 0.0)
    };
 
    for (int i=0; i<8; i++)
    {
        bloomuv.xy=offset[i]*8;
        bloomuv.xy=texcoord.xy + bloomuv.xy;
        float4 tempbloom=SampleLocation(bloomuv.xy);
        bloom+=tempbloom;
    }
 
    bloom *= 0.5; //to brighten up the sample, it will lose brightness in H/V gaussian blur
    SetOutput(bloom);
}
 
void BloomPass3()
{
    float4 bloom = 0.0;
    float2 texcoord = GetCoordinates();
    bloom = Gauss1dPrev2(texcoord, float2(1.0, 0.0), 16);
    bloom.a *= GetOption(B_ANAMFLARE_AMOUNT);
    bloom.xyz *= GetOption(B_BLOOM_AMOUNT);
 
    SetOutput(bloom);
}
 
void BloomPass4()
{
    float4 bloom = 0.0;
    float2 texcoord = GetCoordinates();
    bloom.xyz = Gauss1dPrev2(texcoord, float2(0.0, 1.0), 16).xyz*2.5;
    bloom.a = Gauss1dPrev2(texcoord, float2(1.0, 0.0), 32*GetOption(A_ANAMFLARE_WIDENESS)).a*2.5; //to have anamflare texture (bloom.w) avoid vertical blur
    SetOutput(bloom);
}
 
void BloomScatering()
{
    float2 SamplePos[20] = {
        float2(0.25, 0.125),
        float2(0.375, 0.125),
        float2(0.5, 0.125),
        float2(0.625, 0.125),
        float2(0.75, 0.125),
 
        float2(0.25, 0.25),
        float2(0.375, 0.25),
        float2(0.5, 0.25),
        float2(0.625, 0.25),
        float2(0.75, 0.25),
 
        float2(0.25, 0.75),
        float2(0.375, 0.75),
        float2(0.5, 0.75),
        float2(0.625, 0.75),
        float2(0.75, 0.75),
 
        float2(0.25, 0.875),
        float2(0.375, 0.875),
        float2(0.5, 0.875),
        float2(0.625, 0.875),
        float2(0.75, 0.875),
    };
    float3 lumColor = GetOption(H_SCOLOR) * 3.0;
    float samplecount = 3.0;
    for (int i = 0; i < 20; i++)
    {
        float3 color = SamplePrevLocation(SamplePos[i]).rgb;
        lumColor += color;
        samplecount += 1.0;
    }
    lumColor /= samplecount;
    float luma = dot(lumColor, lumCoeff);
    float maxval = max(max(lumColor.r, lumColor.g), lumColor.b);
    lumColor /= maxval;
    SetOutput(float4(lumColor, luma * luma));
}
 
void BloomMerger()
{
    float2 texcoord = GetCoordinates();
    float4 basecolor = float4(0.0,0.0,0.0,0.0);
    float3 colorbloom = float3(0.0,0.0,0.0);
    float4 lumColor = SamplePrevLocation(float2(0.5, 0.5));
    if (!OptionEnabled(A_BLOOMONLY))
    {
        basecolor = SampleInput(0);
    }
    float4 color = basecolor;
 
    colorbloom.xyz += SampleInputLocation(1,texcoord.xy).xyz*9.0;
    colorbloom.xyz *= 0.1;
 
    colorbloom.xyz = saturate(colorbloom.xyz);
    float colorbloomgray = dot(colorbloom.xyz, 0.333);
    colorbloom.xyz = lerp(colorbloomgray, colorbloom.xyz, GetOption(B_BLOOM_SATURATION));
    colorbloom.xyz *= GetOption(B_BLOOM_TINT);
    float colorgray = dot(color.xyz, 0.333);
 
    if (GetOption(A_BLOOM_MIXMODE) == 1)
    {
        color.xyz = color.xyz + colorbloom.xyz;
    }
    else if (GetOption(A_BLOOM_MIXMODE) == 2)
    {
        color.xyz = 1-(1-color.xyz)*(1-colorbloom.xyz);
    }
    else if (GetOption(A_BLOOM_MIXMODE) == 3)
    {
        color.xyz = max(float3(0.0,0.0,0.0),max(color.xyz,lerp(color.xyz,(float3(1.0,1.0,1.0) - (float3(1.0,1.0,1.0) - saturate(colorbloom.xyz)) *(float3(1.0,1.0,1.0) - saturate(colorbloom.xyz * float3(1.0,1.0,1.0)))),float3(1.0,1.0,1.0))));
    }
    else if (GetOption(A_BLOOM_MIXMODE) == 4)
    {
        color.xyz = max(color.xyz, colorbloom.xyz);
    }
 
    if (OptionEnabled(D_SCATTERRING))
    {
        float depth = SampleDepth();
        float linearcomponent = (GetOption(G_SEND) - depth) / (GetOption(G_SEND) - GetOption(F_SSTART));
        depth = depth * GetOption(E_SDENSITY);
        lumColor.rgb = lerp(basecolor.rgb, lumColor.rgb, saturate(GetOption(I_SINTENSITY) + lumColor.a));
        basecolor.rgb = lerp(lumColor.rgb, basecolor.rgb, clamp(linearcomponent / exp(depth * depth), 0.0, 1.0));
    }
 
    color.rgb += basecolor.rgb;
 
    if (OptionEnabled(C_GAUSSIAN_ANAMFLARE))
    {
        float3 anamflare = SampleInputBicubic(1).w*2*GetOption(C_ANAMFLARE_COLOR);
        color.xyz += pow(anamflare.xyz,1/GetOption(B_ANAMFLARE_CURVE));
    }
    SetOutput(color);
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎