diff --git a/Icons/FlareLayer.svg b/Icons/FlareLayer.svg
new file mode 100644
index 0000000..fbd3232
--- /dev/null
+++ b/Icons/FlareLayer.svg
@@ -0,0 +1,341 @@
+
+
diff --git a/Icons/FlareLayer.svg.import b/Icons/FlareLayer.svg.import
new file mode 100644
index 0000000..228a5e7
--- /dev/null
+++ b/Icons/FlareLayer.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dwi8fojg2liiy"
+path="res://.godot/imported/FlareLayer.svg-e1353f58817cb61a716788afff27f399.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/rokojori_action_library/Icons/FlareLayer.svg"
+dest_files=["res://.godot/imported/FlareLayer.svg-e1353f58817cb61a716788afff27f399.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/Icons/FlarePreset.svg b/Icons/FlarePreset.svg
new file mode 100644
index 0000000..820d1cd
--- /dev/null
+++ b/Icons/FlarePreset.svg
@@ -0,0 +1,341 @@
+
+
diff --git a/Icons/FlarePreset.svg.import b/Icons/FlarePreset.svg.import
new file mode 100644
index 0000000..f534d41
--- /dev/null
+++ b/Icons/FlarePreset.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cnlcxdt2wtmkm"
+path="res://.godot/imported/FlarePreset.svg-857e6afe476b69ed548435249c549c84.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/rokojori_action_library/Icons/FlarePreset.svg"
+dest_files=["res://.godot/imported/FlarePreset.svg-857e6afe476b69ed548435249c549c84.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/Icons/FlareVFX.svg b/Icons/FlareVFX.svg
new file mode 100644
index 0000000..b844da0
--- /dev/null
+++ b/Icons/FlareVFX.svg
@@ -0,0 +1,341 @@
+
+
diff --git a/Icons/FlareVFX.svg.import b/Icons/FlareVFX.svg.import
new file mode 100644
index 0000000..7377265
--- /dev/null
+++ b/Icons/FlareVFX.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b7u8spfui08e7"
+path="res://.godot/imported/FlareVFX.svg-7c0691138c416c828300e95f7f8b3111.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/rokojori_action_library/Icons/FlareVFX.svg"
+dest_files=["res://.godot/imported/FlareVFX.svg-7c0691138c416c828300e95f7f8b3111.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/Runtime/Actions/Node3D/SetScreenTransform.cs b/Runtime/Actions/Node3D/SetScreenTransform.cs
new file mode 100644
index 0000000..8d10e8e
--- /dev/null
+++ b/Runtime/Actions/Node3D/SetScreenTransform.cs
@@ -0,0 +1,56 @@
+
+using Godot;
+
+
+namespace Rokojori
+{
+ [Tool][GlobalClass ]
+ public partial class SetScreenTransform : Action
+ {
+ [Export]
+ public Camera3D source;
+
+ [Export]
+ public Node3D target;
+
+ [Export]
+ public Vector3 screenPosition;
+
+
+ protected override void _OnTrigger()
+ {
+ var applyingSource = source;
+
+ if ( Engine.IsEditorHint() )
+ {
+ #if TOOLS
+
+ applyingSource = EditorInterface.Singleton.GetEditorViewport3D().GetCamera3D();
+
+ #endif
+ }
+
+ if ( source == null )
+ {
+ return;
+ }
+
+ target.GlobalPosition = NormalizedScreenToWorld( applyingSource, screenPosition.XY(), screenPosition.Z );
+ target.SetGlobalQuaternion( applyingSource.GlobalQuaternion() );
+
+ }
+
+ public static Vector3 NormalizedScreenToWorld( Camera3D camera, Vector2 normalizedPos, float depth )
+ {
+ var viewPort = camera.GetViewport();
+ var viewportSize = viewPort.GetVisibleRect().Size;
+
+ var screenPixelPos = new Vector2(
+ normalizedPos.X * viewportSize.X,
+ normalizedPos.Y * viewportSize.Y
+ );
+
+ return camera.ProjectPosition(screenPixelPos, depth);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Runtime/Actions/Node3D/SetScreenTransform.cs.uid b/Runtime/Actions/Node3D/SetScreenTransform.cs.uid
new file mode 100644
index 0000000..9f57859
--- /dev/null
+++ b/Runtime/Actions/Node3D/SetScreenTransform.cs.uid
@@ -0,0 +1 @@
+uid://cf5jsfq6agufc
diff --git a/Runtime/Actions/UI/SetLabelText.cs b/Runtime/Actions/UI/SetLabelText.cs
new file mode 100644
index 0000000..190b19a
--- /dev/null
+++ b/Runtime/Actions/UI/SetLabelText.cs
@@ -0,0 +1,22 @@
+
+using Godot;
+
+
+namespace Rokojori
+{
+ [Tool]
+ [GlobalClass ]
+ public partial class SetLabelText : Action
+ {
+ [Export]
+ public Label3D label;
+
+ [Export]
+ public string text;
+
+ protected override void _OnTrigger()
+ {
+ label.Text = text;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Runtime/Actions/UI/SetLabelText.cs.uid b/Runtime/Actions/UI/SetLabelText.cs.uid
new file mode 100644
index 0000000..d3dfd01
--- /dev/null
+++ b/Runtime/Actions/UI/SetLabelText.cs.uid
@@ -0,0 +1 @@
+uid://bvomnqpw05n5w
diff --git a/Runtime/Colors/ColorX.cs b/Runtime/Colors/ColorX.cs
index 513c99c..8e36a6e 100644
--- a/Runtime/Colors/ColorX.cs
+++ b/Runtime/Colors/ColorX.cs
@@ -5,6 +5,22 @@ namespace Rokojori
{
public static class ColorX
{
+ public static float GetColorScale( this Color c )
+ {
+ return Mathf.Max( 1f, Mathf.Max( c.R, Mathf.Max( c.G, c.B ) ) );
+ }
+
+ public static Color ScaleColor( this Color c, float scale )
+ {
+ return new Color( c.R * scale, c.G * scale, c.B * scale, c.A );
+ }
+
+ public static HSLColor ToHSL( this Color c, float scale = 1f )
+ {
+ return HSLColor.FromRGBA( c.ScaleColor( 1f / scale ) );
+ }
+
+
public static float r( this Vector4 rgba )
{
return rgba.X;
diff --git a/Runtime/Colors/HSLColor.cs b/Runtime/Colors/HSLColor.cs
index 0fa9198..4f1ecce 100644
--- a/Runtime/Colors/HSLColor.cs
+++ b/Runtime/Colors/HSLColor.cs
@@ -174,6 +174,43 @@ namespace Rokojori
return new HSLColor( h, s, l, a );
}
+ static float modPolarDegrees( float value )
+ {
+ return MathX.Repeat( value + 180.0f, 360.0f ) - 180.0f;
+ }
+
+ public static float hue360ToYB( float hue )
+ {
+ return modPolarDegrees( hue - 240.0f );
+ }
+
+ public static float ybToHue360( float yb )
+ {
+ return ( yb + 240.0f ) % 360.0f;
+ }
+
+ public static float changeHue360( float hue, float change )
+ {
+ float yb = hue360ToYB( hue );
+
+ float absYB = Mathf.Abs( yb );
+
+ absYB = Mathf.Clamp( absYB + change, 0.0f, 180.0f );
+
+ float realYB = Mathf.Sign( yb ) * absYB;
+
+ return ybToHue360( realYB );
+ }
+
+ public static float ShiftTemparatureOfHue( float hue, float offset, float blendRadius = 60f )
+ {
+ float distanceToYellow = Mathf.Min( 1.0f, Mathf.Abs( hue - 60.0f ) / blendRadius );
+ float distanceToBlue = Mathf.Min( 1.0f, Mathf.Abs( hue - 240.0f ) / blendRadius );
+
+ return changeHue360( hue, offset * distanceToYellow * distanceToBlue );
+
+ }
+
public static Color Lerp( Color x, Color y, float t )
{
var hx = new HSLColor( x );
@@ -185,7 +222,7 @@ namespace Rokojori
}
- public Color ToRGBA()
+ public Color ToRGBA( float scale = 1 )
{
var r = 0f;
var g = 0f;
@@ -208,6 +245,10 @@ namespace Rokojori
b = Value( m1, m2, h - 120f );
}
+ r *= scale;
+ g *= scale;
+ b *= scale;
+
return new Color( r, g, b, a );
}
diff --git a/Runtime/Files/FilePath.cs b/Runtime/Files/FilePath.cs
index 6846223..3ea41ed 100644
--- a/Runtime/Files/FilePath.cs
+++ b/Runtime/Files/FilePath.cs
@@ -304,6 +304,15 @@ namespace Rokojori
public static string Normalize( string path, bool removeFirst = true, bool removeLast = true )
{
+ var protocollStart = path.IndexOf( "://" );
+ var protocoll = "";
+
+ if ( protocollStart != -1 )
+ {
+ protocoll = path.Substring( 0, protocollStart + 3 );
+ path = path.Substring( protocollStart + 3 );
+ }
+
path = Regex.Replace( path, @"\\", "/" );
path = Regex.Replace( path, @"/+", "/" );
@@ -316,10 +325,8 @@ namespace Rokojori
{
path = Regex.Replace( path, @"/$", "" );
}
-
-
- return path;
+ return protocoll + path;
}
public static string Join( params string[] paths )
diff --git a/Runtime/Files/FilesSync.cs b/Runtime/Files/FilesSync.cs
index 5d777ad..4239253 100644
--- a/Runtime/Files/FilesSync.cs
+++ b/Runtime/Files/FilesSync.cs
@@ -104,6 +104,11 @@ namespace Rokojori
public static List GetFiles( string path, System.Func evaluator = null, bool recursive = false )
{
+ if ( ! Directory.Exists( path ) )
+ {
+ return [];
+ }
+
var list = new List();
var files = Directory.GetFiles( path, "*", recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly );
diff --git a/Runtime/Godot/ResourceRunner.cs b/Runtime/Godot/ResourceRunner.cs
new file mode 100644
index 0000000..b29764d
--- /dev/null
+++ b/Runtime/Godot/ResourceRunner.cs
@@ -0,0 +1,12 @@
+using Godot;
+using System.Text;
+using System.Collections.Generic;
+
+namespace Rokojori
+{
+ public class ResourceRunner where R:Resource where P:Node
+ {
+ public D data;
+
+ }
+}
\ No newline at end of file
diff --git a/Runtime/Godot/ResourceRunner.cs.uid b/Runtime/Godot/ResourceRunner.cs.uid
new file mode 100644
index 0000000..ae9fae9
--- /dev/null
+++ b/Runtime/Godot/ResourceRunner.cs.uid
@@ -0,0 +1 @@
+uid://b0iux3mchi43r
diff --git a/Runtime/Paths.cs b/Runtime/Paths.cs
index c367469..acb015d 100644
--- a/Runtime/Paths.cs
+++ b/Runtime/Paths.cs
@@ -12,5 +12,21 @@ namespace Rokojori
{
public static readonly string AddonLibraryPath = "res://addons/rokojori_action_library/";
public static readonly string RuntimePath = "res://addons/rokojori_action_library/Runtime/";
+
+
+ public static string ProjectPath()
+ {
+ return ProjectSettings.GlobalizePath( "res://" );
+ }
+
+ public static string ToGlobal( string path )
+ {
+ if ( path.StartsWith( "res://" ) )
+ {
+ return path.Replace( "res://", ProjectPath() );
+ }
+
+ return path;
+ }
}
}
\ No newline at end of file
diff --git a/Runtime/Procedural/ExtendedMesh.cs b/Runtime/Procedural/ExtendedMesh.cs
new file mode 100644
index 0000000..5880d9b
--- /dev/null
+++ b/Runtime/Procedural/ExtendedMesh.cs
@@ -0,0 +1,14 @@
+using System.Collections;
+using System.Collections.Generic;
+using Godot;
+using System;
+using System.Threading.Tasks;
+
+namespace Rokojori
+{
+ [GlobalClass,Tool]
+ public partial class ExtendedMesh:Mesh
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/Runtime/Procedural/ExtendedMesh.cs.uid b/Runtime/Procedural/ExtendedMesh.cs.uid
new file mode 100644
index 0000000..0bdc843
--- /dev/null
+++ b/Runtime/Procedural/ExtendedMesh.cs.uid
@@ -0,0 +1 @@
+uid://lf7pc0al3lb8
diff --git a/Runtime/Procedural/Mesh/Generator/MeshGenerator.cs b/Runtime/Procedural/Mesh/Generator/MeshGenerator.cs
new file mode 100644
index 0000000..67e292d
--- /dev/null
+++ b/Runtime/Procedural/Mesh/Generator/MeshGenerator.cs
@@ -0,0 +1,26 @@
+using System.Collections;
+using System.Collections.Generic;
+using Godot;
+using System;
+
+
+
+namespace Rokojori
+{
+ [Tool]
+ [GlobalClass]
+ public partial class MeshGenerator:Node
+ {
+ [Export]
+ public MeshGeneratorType generator;
+
+ [ExportToolButton( "Generate")]
+ public Callable generateButton => Callable.From( ()=>{ mesh = generator.Generate(); } );
+
+ [Export]
+ public ArrayMesh mesh;
+
+
+
+ }
+}
\ No newline at end of file
diff --git a/Runtime/Procedural/Mesh/Generator/MeshGenerator.cs.uid b/Runtime/Procedural/Mesh/Generator/MeshGenerator.cs.uid
new file mode 100644
index 0000000..c8acbab
--- /dev/null
+++ b/Runtime/Procedural/Mesh/Generator/MeshGenerator.cs.uid
@@ -0,0 +1 @@
+uid://csr18y8chfxwo
diff --git a/Runtime/Procedural/Mesh/Generator/MeshGeneratorType.cs b/Runtime/Procedural/Mesh/Generator/MeshGeneratorType.cs
new file mode 100644
index 0000000..bd694d4
--- /dev/null
+++ b/Runtime/Procedural/Mesh/Generator/MeshGeneratorType.cs
@@ -0,0 +1,91 @@
+using System.Collections;
+using System.Collections.Generic;
+using Godot;
+using System;
+
+
+
+namespace Rokojori
+{
+ [Tool]
+ [GlobalClass]
+ public abstract partial class MeshGeneratorType:Resource
+ {
+ [Export]
+ public bool cacheMeshes = true;
+
+ public static readonly string cachePath = "res://.rokojori/cache/MeshGeneratorType";
+
+ public static string GetProjectCachePath( string cacheName )
+ {
+ return FilePath.Join( cachePath, cacheName + ".tres" );
+ }
+
+ public static ArrayMesh FromCache( string cacheName )
+ {
+ var path = GetProjectCachePath( cacheName );
+ var globalPath = Paths.ToGlobal( path );
+
+ RJLog.Log( path, globalPath );
+
+ if ( ! FilesSync.FileExists( globalPath ) )
+ {
+ return null;
+ }
+
+ return GD.Load( path );
+ }
+
+ public static void ToCache( string cacheName, ArrayMesh arrayMesh )
+ {
+
+ var path = GetProjectCachePath( cacheName );
+ var globalPath = Paths.ToGlobal( path );
+
+ RJLog.Log( path, globalPath );
+
+ FilesSync.EnsureParentDirectoryExists( globalPath );
+ ResourceSaver.Save( arrayMesh, path, ResourceSaver.SaverFlags.Compress );
+ }
+
+
+
+ public ArrayMesh Generate()
+ {
+ var cachePath = GetCachePath();
+
+ if ( cachePath != null && Engine.IsEditorHint() )
+ {
+ this.LogInfo( "Checking cache for:", cachePath );
+ var cached = FromCache( cachePath );
+
+ if ( cached != null )
+ {
+ this.LogInfo( "Found cache for:", cachePath, cached.SurfaceGetArrayLen( 0 ) );
+ return cached;
+ }
+
+ this.LogInfo( "Not cached:", cachePath );
+ }
+
+ var mg = _GenerateMeshGeometry();
+
+ var arrayMesh = mg.GenerateMesh();
+
+ if ( cachePath != null && Engine.IsEditorHint() )
+ {
+ this.LogInfo( "To cache:", cachePath, arrayMesh.SurfaceGetArrayLen( 0 ) );
+
+
+ ToCache( cachePath, arrayMesh );
+
+ return FromCache( cachePath );
+ }
+
+ return arrayMesh;
+ }
+
+ protected abstract string GetCachePath();
+ protected abstract MeshGeometry _GenerateMeshGeometry();
+ }
+}
\ No newline at end of file
diff --git a/Runtime/Procedural/Mesh/Generator/MeshGeneratorType.cs.uid b/Runtime/Procedural/Mesh/Generator/MeshGeneratorType.cs.uid
new file mode 100644
index 0000000..d98edfc
--- /dev/null
+++ b/Runtime/Procedural/Mesh/Generator/MeshGeneratorType.cs.uid
@@ -0,0 +1 @@
+uid://bv1dvb053gokl
diff --git a/Runtime/Procedural/Mesh/Generator/UnitBillboardQuadsGenerator.cs b/Runtime/Procedural/Mesh/Generator/UnitBillboardQuadsGenerator.cs
new file mode 100644
index 0000000..65164ca
--- /dev/null
+++ b/Runtime/Procedural/Mesh/Generator/UnitBillboardQuadsGenerator.cs
@@ -0,0 +1,27 @@
+using System.Collections;
+using System.Collections.Generic;
+using Godot;
+using System;
+
+
+
+namespace Rokojori
+{
+ [Tool]
+ [GlobalClass]
+ public partial class UnitBillboardQuadsGenerator:MeshGeneratorType
+ {
+ [Export]
+ public int num = 1;
+
+ protected override string GetCachePath()
+ {
+ return "UnitBillboardQuadsGenerator-" + num;
+ }
+
+ protected override MeshGeometry _GenerateMeshGeometry()
+ {
+ return MeshGeometry.UnitBillboardQuads( num, 0f, 1f );
+ }
+ }
+}
\ No newline at end of file
diff --git a/Runtime/Procedural/Mesh/Generator/UnitBillboardQuadsGenerator.cs.uid b/Runtime/Procedural/Mesh/Generator/UnitBillboardQuadsGenerator.cs.uid
new file mode 100644
index 0000000..3f41222
--- /dev/null
+++ b/Runtime/Procedural/Mesh/Generator/UnitBillboardQuadsGenerator.cs.uid
@@ -0,0 +1 @@
+uid://djb5k01vcut20
diff --git a/Runtime/Procedural/Mesh/MeshGeometry.cs b/Runtime/Procedural/Mesh/MeshGeometry.cs
index 7b3d629..07e6ebd 100644
--- a/Runtime/Procedural/Mesh/MeshGeometry.cs
+++ b/Runtime/Procedural/Mesh/MeshGeometry.cs
@@ -863,7 +863,7 @@ namespace Rokojori
for ( int i = 0; i < num; i++ )
{
- var t = num == 1 ? 0 : i / ( num - 1f );
+ var t = num <= 1 ? 0.5f : i / ( num - 1f );
var z = Mathf.Lerp( zMin, zMax, t );
var quad = BillboardQuad( 1f, z );
diff --git a/Runtime/Rendering/Compositor/CompositorVFXPresets/Glow/Green Cinematic Flares.tres b/Runtime/Rendering/Compositor/CompositorVFXPresets/Glow/Green Cinematic Flares.tres
index 5633d4b..c46fdb2 100644
--- a/Runtime/Rendering/Compositor/CompositorVFXPresets/Glow/Green Cinematic Flares.tres
+++ b/Runtime/Rendering/Compositor/CompositorVFXPresets/Glow/Green Cinematic Flares.tres
@@ -63,7 +63,7 @@ height = 1
noise = SubResource("FastNoiseLite_gxlxg")
seamless = true
-[sub_resource type="CompositorEffect" id="CompositorEffect_mdsx3"]
+[sub_resource type="CompositorEffect" id="CompositorEffect_fv6nb"]
resource_local_to_scene = false
resource_name = ""
enabled = true
@@ -115,7 +115,7 @@ height = 256
noise = SubResource("FastNoiseLite_w6tyf")
seamless = true
-[sub_resource type="CompositorEffect" id="CompositorEffect_wpvj8"]
+[sub_resource type="CompositorEffect" id="CompositorEffect_faje8"]
resource_local_to_scene = false
resource_name = ""
enabled = true
@@ -155,7 +155,7 @@ metadata/_custom_type_script = "uid://dvvfvlutisecy"
script = ExtResource("3_55j2s")
owner = SubResource("Resource_i5utj")
-[sub_resource type="CompositorEffect" id="CompositorEffect_ysmsc"]
+[sub_resource type="CompositorEffect" id="CompositorEffect_55j2s"]
resource_local_to_scene = false
resource_name = ""
enabled = true
@@ -201,7 +201,7 @@ metadata/_custom_type_script = "uid://dvvfvlutisecy"
script = ExtResource("3_55j2s")
owner = SubResource("Resource_i5utj")
-[sub_resource type="CompositorEffect" id="CompositorEffect_t5au6"]
+[sub_resource type="CompositorEffect" id="CompositorEffect_rxqvv"]
resource_local_to_scene = false
resource_name = ""
enabled = true
@@ -234,5 +234,5 @@ metadata/_custom_type_script = "uid://6jkixa201wux"
[resource]
script = ExtResource("8_v2hqv")
-effects = [SubResource("CompositorEffect_mdsx3"), SubResource("CompositorEffect_wpvj8"), SubResource("CompositorEffect_ysmsc"), SubResource("CompositorEffect_t5au6")]
+effects = [SubResource("CompositorEffect_fv6nb"), SubResource("CompositorEffect_faje8"), SubResource("CompositorEffect_55j2s"), SubResource("CompositorEffect_rxqvv")]
metadata/_custom_type_script = "uid://ckixweetchlo0"
diff --git a/Runtime/Rendering/Compositor/CompositorVFXPresets/Glow/Rainbow Star Glow.tres b/Runtime/Rendering/Compositor/CompositorVFXPresets/Glow/Rainbow Star Glow.tres
index 313fca8..636c1fc 100644
--- a/Runtime/Rendering/Compositor/CompositorVFXPresets/Glow/Rainbow Star Glow.tres
+++ b/Runtime/Rendering/Compositor/CompositorVFXPresets/Glow/Rainbow Star Glow.tres
@@ -47,7 +47,7 @@ fill_from = Vector2(0.5, 0.50427353)
[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_g6idi"]
load_path = "res://.godot/imported/star-glow.png-61f0458024aeba1668f3516b3db84782.ctex"
-[sub_resource type="CompositorEffect" id="CompositorEffect_ixqtu"]
+[sub_resource type="CompositorEffect" id="CompositorEffect_e74ec"]
resource_local_to_scene = false
resource_name = ""
enabled = true
@@ -55,7 +55,7 @@ effect_callback_type = 4
needs_motion_vectors = false
needs_normal_roughness = false
script = ExtResource("4_chktd")
-opacity = 0.5578947
+opacity = 0.0
blendMode = 1
overlayTexture = SubResource("CompressedTexture2D_g6idi")
overlayTint = Color(1, 1, 1, 0.050980393)
@@ -94,7 +94,7 @@ use_hdr = true
fill = 1
fill_from = Vector2(0.5, 0.50427353)
-[sub_resource type="CompositorEffect" id="CompositorEffect_m7r8b"]
+[sub_resource type="CompositorEffect" id="CompositorEffect_bfksq"]
resource_local_to_scene = false
resource_name = ""
enabled = true
@@ -102,7 +102,7 @@ effect_callback_type = 4
needs_motion_vectors = false
needs_normal_roughness = false
script = ExtResource("4_chktd")
-opacity = 0.5578947
+opacity = 0.0
blendMode = 1
overlayTexture = ExtResource("5_1gqhf")
overlayTint = Color(1, 1, 1, 0.21568628)
@@ -128,7 +128,7 @@ curve = SubResource("Curve_nxurn")
script = ExtResource("3_eyvih")
owner = SubResource("Resource_1ntwo")
-[sub_resource type="CompositorEffect" id="CompositorEffect_sw5v3"]
+[sub_resource type="CompositorEffect" id="CompositorEffect_eyvih"]
resource_local_to_scene = false
resource_name = ""
enabled = true
@@ -136,7 +136,7 @@ effect_callback_type = 4
needs_motion_vectors = false
needs_normal_roughness = false
script = ExtResource("6_t8xaw")
-distortionAmount = 0.12
+distortionAmount = 0.0
ellipseScale = 1.138
ringsDistribution = 0.7727
animationTargets = [SubResource("Resource_35pef")]
@@ -156,7 +156,7 @@ curve = SubResource("Curve_71075")
script = ExtResource("3_eyvih")
owner = SubResource("Resource_1ntwo")
-[sub_resource type="CompositorEffect" id="CompositorEffect_wi6eu"]
+[sub_resource type="CompositorEffect" id="CompositorEffect_chktd"]
resource_local_to_scene = false
resource_name = ""
enabled = true
@@ -164,7 +164,7 @@ effect_callback_type = 4
needs_motion_vectors = false
needs_normal_roughness = false
script = ExtResource("7_g2w8j")
-amount = 1.0
+amount = 0.0
num = 3
distortionAmount = 0.4369
distortionAngle = 168.8496
@@ -198,7 +198,7 @@ curve = SubResource("Curve_su8gi")
script = ExtResource("3_eyvih")
owner = SubResource("Resource_1ntwo")
-[sub_resource type="CompositorEffect" id="CompositorEffect_7720d"]
+[sub_resource type="CompositorEffect" id="CompositorEffect_1gqhf"]
resource_local_to_scene = false
resource_name = ""
enabled = true
@@ -206,7 +206,7 @@ effect_callback_type = 4
needs_motion_vectors = false
needs_normal_roughness = false
script = ExtResource("8_bfeok")
-amount = 1.0
+amount = 0.0
saturationOffset = 30.0
saturationGamma = 37.9747
lightnessOffset = 2.0
@@ -217,5 +217,5 @@ metadata/_custom_type_script = "uid://pevgspwywsxi"
[resource]
script = ExtResource("9_fgrt2")
-effects = [SubResource("CompositorEffect_ixqtu"), SubResource("CompositorEffect_m7r8b"), SubResource("CompositorEffect_sw5v3"), SubResource("CompositorEffect_wi6eu"), SubResource("CompositorEffect_7720d")]
+effects = [SubResource("CompositorEffect_e74ec"), SubResource("CompositorEffect_bfksq"), SubResource("CompositorEffect_eyvih"), SubResource("CompositorEffect_chktd"), SubResource("CompositorEffect_1gqhf")]
metadata/_custom_type_script = "uid://ckixweetchlo0"
diff --git a/Runtime/Rendering/Compositor/CompositorVFXPresets/Glow/Yellow Cinematic Bloom.tres b/Runtime/Rendering/Compositor/CompositorVFXPresets/Glow/Yellow Cinematic Bloom.tres
index 748f669..092d4f0 100644
--- a/Runtime/Rendering/Compositor/CompositorVFXPresets/Glow/Yellow Cinematic Bloom.tres
+++ b/Runtime/Rendering/Compositor/CompositorVFXPresets/Glow/Yellow Cinematic Bloom.tres
@@ -61,7 +61,7 @@ noise = SubResource("FastNoiseLite_3tnad")
color_ramp = SubResource("Gradient_0c48d")
seamless = true
-[sub_resource type="CompositorEffect" id="CompositorEffect_ysmsc"]
+[sub_resource type="CompositorEffect" id="CompositorEffect_nnbdi"]
resource_local_to_scene = false
resource_name = ""
enabled = true
@@ -69,7 +69,7 @@ effect_callback_type = 4
needs_motion_vectors = false
needs_normal_roughness = false
script = ExtResource("4_qyiel")
-amount = 0.1
+amount = 0.0
blendMode = 0.0
inputFading = SubResource("GradientTexture2D_i46l2")
outputFading = SubResource("GradientTexture2D_d1ujc")
@@ -82,7 +82,7 @@ smearingSteps = 10
smearing = 1.5
redShift = 0.1689
blueShift = -0.0889
-lumaTint = Color(0.8206905, 0.5294989, 0.1740212, 1)
+lumaTint = Color(2.3825946, 1.5737975, 0.5791954, 1)
lumaInputRange = Vector2(1.015, 1.5)
lumaOutputRange = Vector2(0, 1)
desaturation = 0.0
@@ -143,7 +143,7 @@ colors = PackedColorArray(1, 1, 1, 1)
gradient = SubResource("Gradient_ie6m2")
width = 2
-[sub_resource type="CompositorEffect" id="CompositorEffect_7axlu"]
+[sub_resource type="CompositorEffect" id="CompositorEffect_c6fon"]
resource_local_to_scene = false
resource_name = ""
enabled = true
@@ -151,7 +151,7 @@ effect_callback_type = 4
needs_motion_vectors = false
needs_normal_roughness = false
script = ExtResource("6_cc1ov")
-amount = 1.0
+amount = 0.0
lumaTint = Color(0.26849365, 0.1881681, 0.06346091, 1)
blurRadius = 2
lumaInputRange = Vector2(1, 1.5)
@@ -179,7 +179,7 @@ metadata/_custom_type_script = "uid://dvvfvlutisecy"
script = ExtResource("3_c6fon")
owner = SubResource("Resource_d1ujc")
-[sub_resource type="CompositorEffect" id="CompositorEffect_frwbc"]
+[sub_resource type="CompositorEffect" id="CompositorEffect_qyiel"]
resource_local_to_scene = false
resource_name = ""
enabled = true
@@ -187,9 +187,9 @@ effect_callback_type = 4
needs_motion_vectors = false
needs_normal_roughness = false
script = ExtResource("7_nnbdi")
-amount = 1.0
+amount = 0.0
num = 1
-blendMode = 0.7151
+blendMode = 0.51
distortionAmount = 0.3446
distortionAngle = 0.0
distortionAngleSpeed = 0.0
@@ -198,7 +198,7 @@ redShift = 0.0415
blueShift = -0.0065
blurRadiusX = 5
blurRadiusY = 5
-lumaTint = Color(1.340301, 0.78043133, 0, 1)
+lumaTint = Color(4.2130003, 3.380445, 0.5407243, 1)
downSampling = 3
animationTargets = [SubResource("Resource_22k1k")]
compositorEffectID = SubResource("Resource_hpfyh")
@@ -206,5 +206,5 @@ metadata/_custom_type_script = "uid://6jkixa201wux"
[resource]
script = ExtResource("7_txjlu")
-effects = [SubResource("CompositorEffect_ysmsc"), SubResource("CompositorEffect_7axlu"), SubResource("CompositorEffect_frwbc")]
+effects = [SubResource("CompositorEffect_nnbdi"), SubResource("CompositorEffect_c6fon"), SubResource("CompositorEffect_qyiel")]
metadata/_custom_type_script = "uid://ckixweetchlo0"
diff --git a/Runtime/Rendering/Compositor/CompositorVFXPresets/Screen/Sketch.tres b/Runtime/Rendering/Compositor/CompositorVFXPresets/Screen/Sketch.tres
index 1457584..aeeb691 100644
--- a/Runtime/Rendering/Compositor/CompositorVFXPresets/Screen/Sketch.tres
+++ b/Runtime/Rendering/Compositor/CompositorVFXPresets/Screen/Sketch.tres
@@ -1,7 +1,8 @@
-[gd_resource type="Resource" script_class="CompositorVFXPreset" load_steps=35 format=3 uid="uid://0blw3yhjw7y0"]
+[gd_resource type="Resource" script_class="CompositorVFXPreset" load_steps=36 format=3 uid="uid://0blw3yhjw7y0"]
[ext_resource type="Script" uid="uid://cx5qcow1mmd11" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/CompositorEffectOwner.cs" id="1_0ail8"]
[ext_resource type="Script" uid="uid://dvvfvlutisecy" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/AnimationTargets/CompFXMemberCurveTarget.cs" id="1_4xviq"]
+[ext_resource type="Resource" uid="uid://bwhnq7w0tpgv" path="res://VFX/Action FX Compositor Effect Layer.tres" id="2_4xviq"]
[ext_resource type="Script" uid="uid://comuvej4dr22k" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/RokojoriCompositorEffectID.cs" id="2_tc21q"]
[ext_resource type="Script" uid="uid://bx4j8ic80vl7f" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffects/Edge/DepthOutlines/DepthOutlinesEffect.cs" id="3_dryyw"]
[ext_resource type="Texture2D" uid="uid://c30nul6romace" path="res://addons/rokojori_action_library/Runtime/Procedural/Noise/RGB 3D Noise.png" id="5_orb2s"]
@@ -25,6 +26,7 @@ script = ExtResource("1_0ail8")
[sub_resource type="Resource" id="Resource_p64cs"]
script = ExtResource("2_tc21q")
owner = SubResource("Resource_ie6m2")
+layer = ExtResource("2_4xviq")
[sub_resource type="Curve" id="Curve_7axlu"]
_data = [Vector2(0, 1), 0.0, -18.573792, 0, 0, Vector2(0.07774799, 0.15679264), -0.687919, -0.687919, 0, 0, Vector2(1, 0), -0.069252, 0.0, 0, 0]
@@ -48,7 +50,7 @@ point_count = 3
[sub_resource type="CurveTexture" id="CurveTexture_hpfyh"]
curve = SubResource("Curve_22k1k")
-[sub_resource type="CompositorEffect" id="CompositorEffect_ie6m2"]
+[sub_resource type="CompositorEffect" id="CompositorEffect_4xviq"]
resource_local_to_scene = false
resource_name = ""
enabled = true
@@ -56,6 +58,7 @@ effect_callback_type = 4
needs_motion_vectors = false
needs_normal_roughness = false
script = ExtResource("3_dryyw")
+amount = 0.0
outlineWidth = -0.0516
outlineWidthCurve = SubResource("CurveTexture_p64cs")
edgeColor = Color(0.14817011, 0.21073082, 0.29634023, 1)
@@ -89,6 +92,7 @@ metadata/_custom_type_script = "uid://dvvfvlutisecy"
[sub_resource type="Resource" id="Resource_hpfyh"]
script = ExtResource("2_tc21q")
owner = SubResource("Resource_ie6m2")
+layer = ExtResource("2_4xviq")
[sub_resource type="Gradient" id="Gradient_frwbc"]
offsets = PackedFloat32Array(1)
@@ -97,7 +101,7 @@ colors = PackedColorArray(1, 1, 1, 1)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_w6tyf"]
gradient = SubResource("Gradient_frwbc")
-[sub_resource type="CompositorEffect" id="CompositorEffect_i5utj"]
+[sub_resource type="CompositorEffect" id="CompositorEffect_0m0g3"]
resource_local_to_scene = false
resource_name = ""
enabled = true
@@ -106,6 +110,7 @@ needs_motion_vectors = false
needs_normal_roughness = false
script = ExtResource("6_hdnet")
distortionAmount = 0.0049
+blendAmount = 0.0
smearingSteps = 1
smearing = 1.0
redShift = 0.0
@@ -132,6 +137,7 @@ metadata/_custom_type_script = "uid://dvvfvlutisecy"
[sub_resource type="Resource" id="Resource_gxlxg"]
script = ExtResource("2_tc21q")
owner = SubResource("Resource_ie6m2")
+layer = ExtResource("2_4xviq")
[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_4n83u"]
load_path = "res://.godot/imported/RGB 3D Noise.png-daebfe00d2f3fcd5d3bc528f8a3972e1.ctex"
@@ -143,7 +149,7 @@ colors = PackedColorArray(1, 1, 1, 1)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_ixn1d"]
gradient = SubResource("Gradient_72jau")
-[sub_resource type="CompositorEffect" id="CompositorEffect_22k1k"]
+[sub_resource type="CompositorEffect" id="CompositorEffect_orb2s"]
resource_local_to_scene = false
resource_name = ""
enabled = true
@@ -152,6 +158,7 @@ needs_motion_vectors = false
needs_normal_roughness = false
script = ExtResource("6_hdnet")
distortionAmount = 0.0026
+blendAmount = 0.0
smearingSteps = 1
smearing = 1.0
redShift = 0.0
@@ -168,8 +175,9 @@ metadata/_custom_type_script = "uid://balixgskgouhm"
[sub_resource type="Resource" id="Resource_3tnad"]
script = ExtResource("2_tc21q")
owner = SubResource("Resource_ie6m2")
+layer = ExtResource("2_4xviq")
-[sub_resource type="CompositorEffect" id="CompositorEffect_y3g14"]
+[sub_resource type="CompositorEffect" id="CompositorEffect_hdnet"]
resource_local_to_scene = false
resource_name = ""
enabled = true
@@ -184,5 +192,5 @@ metadata/_custom_type_script = "uid://cjfxcl3cdhnku"
[resource]
script = ExtResource("6_orb2s")
-effects = [SubResource("CompositorEffect_ie6m2"), SubResource("CompositorEffect_i5utj"), SubResource("CompositorEffect_22k1k"), SubResource("CompositorEffect_y3g14")]
+effects = [SubResource("CompositorEffect_4xviq"), SubResource("CompositorEffect_0m0g3"), SubResource("CompositorEffect_orb2s"), SubResource("CompositorEffect_hdnet")]
metadata/_custom_type_script = "uid://ckixweetchlo0"
diff --git a/Runtime/Shading/Library/Colors.gdshaderinc b/Runtime/Shading/Library/Colors.gdshaderinc
index 53248e6..1a03634 100644
--- a/Runtime/Shading/Library/Colors.gdshaderinc
+++ b/Runtime/Shading/Library/Colors.gdshaderinc
@@ -223,10 +223,7 @@ vec4 colorSpaceConversion( vec4 color, int mode )
return mode == 1 ? LINEARtoSRGB( color ) : SRGBtoLINEAR( color );
}
-float modPolarDegrees( float value )
-{
- return mod( value + 180.0, 360.0 ) - 180.0;
-}
+
vec3 changeHueOfRGB( vec3 rgb, float hueChange )
@@ -237,6 +234,11 @@ vec3 changeHueOfRGB( vec3 rgb, float hueChange )
return HSLtoRGB( hsl );
}
+float modPolarDegrees( float value )
+{
+ return mod( value + 180.0, 360.0 ) - 180.0;
+}
+
float hue360ToYB( float hue )
{
return modPolarDegrees( hue - 240.0 );
diff --git a/Runtime/Shading/Library/Noise.gdshaderinc b/Runtime/Shading/Library/Noise.gdshaderinc
index 8e074ce..ef7b6e8 100644
--- a/Runtime/Shading/Library/Noise.gdshaderinc
+++ b/Runtime/Shading/Library/Noise.gdshaderinc
@@ -21,7 +21,7 @@ vec2 random_v2( vec2 uv )
vec3 random_v3( vec3 uvw )
{
-
+
uvw = vec3( dot(uvw, vec3(127.1,311.7, 513.7) ),
dot(uvw, vec3(269.5,183.3, 396.5) ),
dot(uvw, vec3(421.3,314.1, 119.7) ) );
@@ -80,6 +80,7 @@ vec2 seamLessCoordinate( vec2 uv, vec2 seamRange, vec2 seamFade, vec2 type )
return mod( uv - seamFade * type, seamRange );
}
+
float perlinOctavesSeamless( vec2 uv, int octaves, float scale, float gain, vec2 seamRange, vec2 seamFade )
{
// uv = mod( uv , seamRange );
@@ -109,57 +110,90 @@ float perlinOctavesSeamless( vec2 uv, int octaves, float scale, float gain, vec2
}
+vec2 seamlessModulo( vec2 divident, vec2 divisor )
+{
+ vec2 positiveDivident = mod( divident, divisor ) + divisor;
+ return mod( positiveDivident, divisor );
+}
+
+float perlinSeamlessWithRange( vec2 uv, vec2 repeat )
+{
+ uv *= repeat;
+
+ vec2 i = floor( uv );
+ vec2 f = fract( uv );
+
+ vec2 fade = f;
+
+ vec2 i00 = mod( i + vec2( 0.0, 0.0 ), repeat );
+ vec2 i10 = mod( i + vec2( 1.0, 0.0 ), repeat );
+ vec2 i01 = mod( i + vec2( 0.0, 1.0 ), repeat );
+ vec2 i11 = mod( i + vec2( 1.0, 1.0 ), repeat );
+
+
+ float a = random( i00 );
+ float b = random( i10 );
+ float c = random( i01 );
+ float d = random( i11 );
+
+ return mix(
+ mix(a, b, fade.x),
+ mix(c, d, fade.x),
+ fade.y
+ );
+}
+
float perlin3D( vec3 uvw )
-{
- vec3 gridIndex = floor( uvw );
- vec3 gridFract = fract( uvw );
-
- vec3 blur = smoothstep( 0.0, 1.0, gridFract );
-
- vec3 blb = gridIndex + vec3(0.0, 0.0, 0.0);
- vec3 brb = gridIndex + vec3(1.0, 0.0, 0.0);
- vec3 tlb = gridIndex + vec3(0.0, 1.0, 0.0);
- vec3 trb = gridIndex + vec3(1.0, 1.0, 0.0);
- vec3 blf = gridIndex + vec3(0.0, 0.0, 1.0);
- vec3 brf = gridIndex + vec3(1.0, 0.0, 1.0);
- vec3 tlf = gridIndex + vec3(0.0, 1.0, 1.0);
- vec3 trf = gridIndex + vec3(1.0, 1.0, 1.0);
-
- vec3 gradBLB = random_v3( blb );
- vec3 gradBRB = random_v3( brb );
- vec3 gradTLB = random_v3( tlb );
- vec3 gradTRB = random_v3( trb );
- vec3 gradBLF = random_v3( blf );
- vec3 gradBRF = random_v3( brf );
- vec3 gradTLF = random_v3( tlf );
- vec3 gradTRF = random_v3( trf );
-
-
- vec3 distToPixelFromBLB = gridFract - vec3( 0.0, 0.0, 0.0 );
- vec3 distToPixelFromBRB = gridFract - vec3( 1.0, 0.0, 0.0 );
- vec3 distToPixelFromTLB = gridFract - vec3( 0.0, 1.0, 0.0 );
- vec3 distToPixelFromTRB = gridFract - vec3( 1.0, 1.0, 0.0 );
- vec3 distToPixelFromBLF = gridFract - vec3( 0.0, 0.0, 1.0 );
- vec3 distToPixelFromBRF = gridFract - vec3( 1.0, 0.0, 1.0 );
- vec3 distToPixelFromTLF = gridFract - vec3( 0.0, 1.0, 1.0 );
- vec3 distToPixelFromTRF = gridFract - vec3( 1.0, 1.0, 1.0 );
-
- float dotBLB = dot( gradBLB, distToPixelFromBLB );
- float dotBRB = dot( gradBRB, distToPixelFromBRB );
- float dotTLB = dot( gradTLB, distToPixelFromTLB );
- float dotTRB = dot( gradTRB, distToPixelFromTRB );
- float dotBLF = dot( gradBLF, distToPixelFromBLF );
- float dotBRF = dot( gradBRF, distToPixelFromBRF );
- float dotTLF = dot( gradTLF, distToPixelFromTLF );
- float dotTRF = dot( gradTRF, distToPixelFromTRF );
-
-
- return mix(
- mix( mix(dotBLB, dotBRB, blur.x), mix(dotTLB, dotTRB, blur.x), blur.y ),
- mix( mix(dotBLF, dotBRF, blur.x), mix(dotTLF, dotTRF, blur.x), blur.y ),
+{
+ vec3 gridIndex = floor( uvw );
+ vec3 gridFract = fract( uvw );
+
+ vec3 blur = smoothstep( 0.0, 1.0, gridFract );
+
+ vec3 blb = gridIndex + vec3(0.0, 0.0, 0.0);
+ vec3 brb = gridIndex + vec3(1.0, 0.0, 0.0);
+ vec3 tlb = gridIndex + vec3(0.0, 1.0, 0.0);
+ vec3 trb = gridIndex + vec3(1.0, 1.0, 0.0);
+ vec3 blf = gridIndex + vec3(0.0, 0.0, 1.0);
+ vec3 brf = gridIndex + vec3(1.0, 0.0, 1.0);
+ vec3 tlf = gridIndex + vec3(0.0, 1.0, 1.0);
+ vec3 trf = gridIndex + vec3(1.0, 1.0, 1.0);
+
+ vec3 gradBLB = random_v3( blb );
+ vec3 gradBRB = random_v3( brb );
+ vec3 gradTLB = random_v3( tlb );
+ vec3 gradTRB = random_v3( trb );
+ vec3 gradBLF = random_v3( blf );
+ vec3 gradBRF = random_v3( brf );
+ vec3 gradTLF = random_v3( tlf );
+ vec3 gradTRF = random_v3( trf );
+
+
+ vec3 distToPixelFromBLB = gridFract - vec3( 0.0, 0.0, 0.0 );
+ vec3 distToPixelFromBRB = gridFract - vec3( 1.0, 0.0, 0.0 );
+ vec3 distToPixelFromTLB = gridFract - vec3( 0.0, 1.0, 0.0 );
+ vec3 distToPixelFromTRB = gridFract - vec3( 1.0, 1.0, 0.0 );
+ vec3 distToPixelFromBLF = gridFract - vec3( 0.0, 0.0, 1.0 );
+ vec3 distToPixelFromBRF = gridFract - vec3( 1.0, 0.0, 1.0 );
+ vec3 distToPixelFromTLF = gridFract - vec3( 0.0, 1.0, 1.0 );
+ vec3 distToPixelFromTRF = gridFract - vec3( 1.0, 1.0, 1.0 );
+
+ float dotBLB = dot( gradBLB, distToPixelFromBLB );
+ float dotBRB = dot( gradBRB, distToPixelFromBRB );
+ float dotTLB = dot( gradTLB, distToPixelFromTLB );
+ float dotTRB = dot( gradTRB, distToPixelFromTRB );
+ float dotBLF = dot( gradBLF, distToPixelFromBLF );
+ float dotBRF = dot( gradBRF, distToPixelFromBRF );
+ float dotTLF = dot( gradTLF, distToPixelFromTLF );
+ float dotTRF = dot( gradTRF, distToPixelFromTRF );
+
+
+ return mix(
+ mix( mix(dotBLB, dotBRB, blur.x), mix(dotTLB, dotTRB, blur.x), blur.y ),
+ mix( mix(dotBLF, dotBRF, blur.x), mix(dotTLF, dotTRF, blur.x), blur.y ),
blur.z
- ) + 0.5;
+ ) + 0.5;
}
@@ -171,57 +205,57 @@ float perlinPolar( vec2 uv )
float worley( vec2 uv, float columns, float rows )
{
-
- vec2 index_uv = floor( vec2( uv.x * columns, uv.y * rows ) );
- vec2 fract_uv = fract( vec2( uv.x * columns, uv.y * rows ) );
-
- float minimum_dist = 1.0;
-
- for ( int y= -1; y <= 1; y++ )
+
+ vec2 index_uv = floor( vec2( uv.x * columns, uv.y * rows ) );
+ vec2 fract_uv = fract( vec2( uv.x * columns, uv.y * rows ) );
+
+ float minimum_dist = 1.0;
+
+ for ( int y= -1; y <= 1; y++ )
{
- for ( int x= -1; x <= 1; x++ )
+ for ( int x= -1; x <= 1; x++ )
{
- vec2 neighbor = vec2( float( x ), float( y ) );
- vec2 point = random_v2( index_uv + neighbor );
-
- vec2 diff = neighbor + point - fract_uv;
- float dist = length (diff );
+ vec2 neighbor = vec2( float( x ), float( y ) );
+ vec2 point = random_v2( index_uv + neighbor );
+
+ vec2 diff = neighbor + point - fract_uv;
+ float dist = length (diff );
- minimum_dist = min( minimum_dist, dist );
- }
- }
-
- return minimum_dist;
+ minimum_dist = min( minimum_dist, dist );
+ }
+ }
+
+ return minimum_dist;
}
vec2 voronoi( vec2 uv, float columns, float rows )
-{
- vec2 index_uv = floor( vec2( uv.x * columns, uv.y * rows ) );
- vec2 fract_uv = fract( vec2( uv.x * columns, uv.y * rows ) );
-
- float minimum_dist = 1.0;
- vec2 minimum_point;
-
- for ( int y= -1; y <= 1; y++ )
- {
- for ( int x= -1; x <= 1; x++ )
- {
- vec2 neighbor = vec2( float( x ), float( y ) );
- vec2 point = random_v2( index_uv + neighbor );
-
- vec2 diff = neighbor + point - fract_uv;
- float dist = length( diff );
+{
+ vec2 index_uv = floor( vec2( uv.x * columns, uv.y * rows ) );
+ vec2 fract_uv = fract( vec2( uv.x * columns, uv.y * rows ) );
- if ( dist < minimum_dist )
+ float minimum_dist = 1.0;
+ vec2 minimum_point;
+
+ for ( int y= -1; y <= 1; y++ )
+ {
+ for ( int x= -1; x <= 1; x++ )
+ {
+ vec2 neighbor = vec2( float( x ), float( y ) );
+ vec2 point = random_v2( index_uv + neighbor );
+
+ vec2 diff = neighbor + point - fract_uv;
+ float dist = length( diff );
+
+ if ( dist < minimum_dist )
{
- minimum_dist = dist;
- minimum_point = point;
- }
- }
- }
+ minimum_dist = dist;
+ minimum_point = point;
+ }
+ }
+ }
- return minimum_point;
+ return minimum_point;
}
bool ditherDiscard( float ditherFadeValue, vec4 _FRAGCOORD )
diff --git a/Runtime/Shading/Shaders/Flares/BaseFlare/BaseFlare-Variables.gdshaderinc b/Runtime/Shading/Shaders/Flares/BaseFlare/BaseFlare-Variables.gdshaderinc
new file mode 100644
index 0000000..91bbb95
--- /dev/null
+++ b/Runtime/Shading/Shaders/Flares/BaseFlare/BaseFlare-Variables.gdshaderinc
@@ -0,0 +1,100 @@
+// COLOR
+group_uniforms Color;
+
+uniform vec4 color : source_color = vec4( 0.887, 0.434, 0.233, 1.0 );
+uniform float opacity = 1;
+uniform sampler2D opacityCurve:source_color;
+
+uniform float minHueRandom = 0;
+uniform float maxHueRandom = 0;
+
+uniform float shapeNoiseAmount:hint_range(0,1) = 0;
+uniform float shapeNoiseScale = 1.0;
+
+group_uniforms;
+
+
+
+// SIZE
+group_uniforms Size;
+uniform float sizeX:hint_range(1,100) = 1;
+uniform float sizeY:hint_range(1,100) = 1;
+uniform float worldSizeScale = 1;
+uniform float screenSizeScale = 1;
+uniform float worldSize_vs_screenSize:hint_range(0,1) = 0.5;
+uniform float randomScaleMin = 1.0;
+uniform float randomScaleMax = 1.0;
+uniform float extension = 1.0;
+
+group_uniforms;
+
+// ROTATION
+group_uniforms Rotation;
+uniform float rotation:hint_range(-360,360) = 0.0;
+uniform float rotationOverX:hint_range(-360,360) = 0.0;
+uniform float rotationOverY:hint_range(-360,360) = 0.0;
+uniform float rotationPerLayer:hint_range(-360,360) = 0.0;
+// uniform float vertexRotation:hint_range(-360,360) = 0.0;
+// uniform float vertexRotationOverX:hint_range(-360,360) = 0.0;
+// uniform float vertexRotationOverY:hint_range(-360,360) = 0.0;
+// uniform float vertexRotationPerLayer:hint_range(-360,360) = 0.0;
+
+group_uniforms;
+
+// SCREEN OFFSET
+group_uniforms ScreenOffset;
+uniform vec2 screenOffset = vec2( 0, 0 );
+uniform vec2 screenOffsetScale = vec2( 0, 0 );
+uniform vec2 screenOffsetLayerSpread = vec2( 0, 0 );
+group_uniforms;
+
+// CHROMATIC ABERATION
+group_uniforms ChromaticAberation;
+uniform int chromaticAberationMode = 0;
+uniform float chromaticAberationAmount:hint_range(0,100) = 0;
+uniform int chromaticAberationSteps:hint_range(0,32) = 1;
+uniform vec2 chromaticAberationDirection = vec2( 1.0, 1.0 );
+uniform float chromaticAberationDirectionTowardsCenter:hint_range(-1,1) = 1.0;
+uniform float chromaticAberationCenterScale:hint_range(0,1000) = 1.0;
+uniform float chromaticAberationCenterOffset:hint_range(-1,1) = 1.0;
+uniform vec3 chromaticAberationShifts = vec3( 0.95, 1.0, 1.05 );
+uniform float chromaticAberationSmear = 1;
+
+
+group_uniforms;
+
+// FADING
+group_uniforms Fading;
+uniform int fadingMode = 0;
+uniform sampler2D fading:source_color, repeat_disable, filter_linear;
+uniform sampler2D opacityFading:source_color, repeat_disable, filter_linear;
+uniform sampler2D sizeXfading:source_color, repeat_disable, filter_linear;
+uniform sampler2D sizeYfading:source_color, repeat_disable, filter_linear;
+uniform float fadingPower = 1.0;
+uniform float opacityFadingPower = 1.0;
+uniform float sizeXfadingPower = 1.0;
+uniform float sizeYfadingPower = 1.0;
+
+varying float opacityFadeValue;
+group_uniforms;
+
+
+// OCCLUSION
+group_uniforms Occlusion;
+uniform int occlusionMode = 0;
+uniform sampler2D depthTexture:hint_depth_texture;
+uniform float occlusionZOffset:hint_range(-30,30) = 0;
+uniform int occlusionTestMaxSteps = 10;
+uniform float occlusionTestStepStride = 1;
+uniform float occlusionTest_ViewDependingScaleAmount:hint_range(0,1) = 0.5;
+uniform float occlusionTest_ViewDependingDistance = 100;
+uniform float occlusionToSize = 0.5;
+
+varying float occlusionAlpha;
+group_uniforms;
+
+
+varying vec4 combinedColor;
+varying vec2 centerDirection;
+varying float zIndex;
+// varying float nodeRotationOffset;
\ No newline at end of file
diff --git a/Runtime/Shading/Shaders/Flares/BaseFlare/BaseFlare-Variables.gdshaderinc.uid b/Runtime/Shading/Shaders/Flares/BaseFlare/BaseFlare-Variables.gdshaderinc.uid
new file mode 100644
index 0000000..9609097
--- /dev/null
+++ b/Runtime/Shading/Shaders/Flares/BaseFlare/BaseFlare-Variables.gdshaderinc.uid
@@ -0,0 +1 @@
+uid://dijr3jilsh8ue
diff --git a/Runtime/Shading/Shaders/Flares/BaseFlare/BaseFlare-VertexFragment.gdshaderinc b/Runtime/Shading/Shaders/Flares/BaseFlare/BaseFlare-VertexFragment.gdshaderinc
new file mode 100644
index 0000000..9fb026c
--- /dev/null
+++ b/Runtime/Shading/Shaders/Flares/BaseFlare/BaseFlare-VertexFragment.gdshaderinc
@@ -0,0 +1,250 @@
+
+void vertex()
+{
+ float normalizedIndex = VERTEX.z;
+ VERTEX.z = 0.0;
+ zIndex = normalizedIndex;
+
+ vec3 viewOffset = viewToWorldDirection( vec3( 0, 0, occlusionZOffset ), INV_VIEW_MATRIX );
+ vec3 nodePositionView = worldToView( NODE_POSITION_WORLD + viewOffset, VIEW_MATRIX );
+ vec2 screenPosition = viewToScreen( nodePositionView, PROJECTION_MATRIX );
+
+ float fadeValue = 1.0;
+ float opacityValue = 1.0;
+ float sizeXFade = 1.0;
+ float sizeYFade = 1.0;
+
+ if ( fadingMode == 1 )
+ {
+ float edgeDistance = max( 0.0, -sdBox( screenPosition - vec2( 0.5 ), vec2( 0.5 ) ) ) * 2.0;
+
+ fadeValue = pow( edgeDistance, fadingPower );
+ opacityValue = pow( edgeDistance, opacityFadingPower );
+ sizeXFade = pow( edgeDistance, sizeXfadingPower );
+ sizeYFade = pow( edgeDistance, sizeYfadingPower );
+ }
+ else if ( fadingMode == 2 )
+ {
+ fadeValue = textureLod( fading, screenPosition, 0.0 ).r;
+ opacityValue = textureLod( opacityFading, screenPosition, 0.0 ).r;
+ sizeXFade = textureLod( sizeXfading, screenPosition, 0.0 ).r;
+ sizeYFade = textureLod( sizeYfading, screenPosition, 0.0 ).r;
+ }
+
+
+ float nodeScale = length( extractScale( MODEL_MATRIX ) );
+
+ float sX = sizeX * sizeXFade;
+ float sY = sizeY * sizeYFade;
+
+ vec2 uvPixelSize = vec2( 1.0, 1.0 ) / VIEWPORT_SIZE ;
+
+ vec2 scaledUVPixelSize = uvPixelSize * max( 1.0, nodePositionView.z / occlusionTest_ViewDependingDistance );
+ uvPixelSize = mix( uvPixelSize, scaledUVPixelSize, occlusionTest_ViewDependingScaleAmount );
+
+ float occlusionValue = occlusionMode == 0 ? 1.0 : occlusionMode == 1 ?
+
+ getQuickOcclusionAt( depthTexture, nodePositionView, uvPixelSize,
+ occlusionTestMaxSteps, occlusionTestStepStride,
+ PROJECTION_MATRIX, INV_PROJECTION_MATRIX ) :
+
+ getOcclusionAt( depthTexture, nodePositionView, uvPixelSize,
+ occlusionTestMaxSteps, occlusionTestStepStride,
+ PROJECTION_MATRIX, INV_PROJECTION_MATRIX );
+
+ occlusionAlpha = occlusionValue * fadeValue;
+
+ float camDist = length( NODE_POSITION_WORLD - CAMERA_POSITION_WORLD );
+
+ float occlusionSizeFactor = mix( 1.0, occlusionAlpha, occlusionToSize );
+ vec2 sizeScaled = vec2( sX, sY ) * occlusionSizeFactor * nodeScale;
+ vec2 size = mix( sizeScaled * worldSizeScale, sizeScaled * camDist * 0.1 * screenSizeScale, worldSize_vs_screenSize );
+
+ float randomScale = mix( randomScaleMin, randomScaleMax, random( vec2( normalizedIndex ) ) );
+
+ size *= randomScale;
+ size *= extension;
+
+ setFlareOffsetMatrix(
+ MODELVIEW_MATRIX, VIEW_MATRIX, MAIN_CAM_INV_VIEW_MATRIX, MODEL_MATRIX,
+ screenOffsetScale + screenOffsetLayerSpread * ( normalizedIndex * 2.0 - 1.0 ),
+ screenOffset
+ );
+
+ vec2 offsetScreenPosition = localToScreen( vec3( 0.0 ), MODELVIEW_MATRIX, PROJECTION_MATRIX );
+
+ float combinedRotation = rotation;
+ combinedRotation += rotationPerLayer * ( normalizedIndex * 2.0 - 1.0 );
+ combinedRotation += ( offsetScreenPosition.x * 2.0 - 1.0 ) * rotationOverX;
+
+
+ float combinedRotationRadians = combinedRotation / 180.0 * PI;
+
+ setFlareScaleRotation(
+ MODELVIEW_MATRIX, MODELVIEW_NORMAL_MATRIX, MODEL_MATRIX,
+ vec3( size.x, size.y, 1.0 ), combinedRotationRadians
+ );
+
+
+
+ // nodeRotationOffset = ( offsetScreenPosition.x * 2.0 - 1.0 ) * rotationOverX;
+ // nodeRotationOffset += rotationPerLayer * ( normalizedIndex * 2.0 - 1.0 ) ;
+
+ centerDirection = ( offsetScreenPosition - screenPosition );
+ centerDirection.y *= -1.0;
+
+ centerDirection = -centerDirection;
+
+ centerDirection = rotate_v2( centerDirection, -combinedRotationRadians );
+
+ combinedColor = color;
+
+ float rgbScale = getRGBScale( combinedColor.rgb );
+
+ float randomHueOffset = mix( minHueRandom, maxHueRandom, random( vec2( normalizedIndex ) + vec2( 0.23, 0.13 ) ) );
+
+ combinedColor.rgb = changeHueOfRGB( combinedColor.rgb / rgbScale, randomHueOffset ) * rgbScale;
+
+ GENERATE_FLARE_VERTEX_DATA
+
+ opacityFadeValue = fadeValue * opacityValue;
+
+ float opacityMapValue = textureLod( opacityCurve, vec2( normalizedIndex, 0.0 ), 0.0 ).r;
+
+ opacityFadeValue *= opacityMapValue * occlusionAlpha * opacity;
+
+ UV = ( UV - vec2( 0.5 ) ) * extension + vec2( 0.5 );
+ // UV = rotateAround_v2( UV, ( nodeRotationOffset + rotation ) / 180.0 * 3.141592653, vec2(0.5) );
+}
+
+
+float mirrorValue( float x )
+{
+ float t = mod( x, 2.0 );
+ return ( t <= 1.0 ) ? t : 2.0 - t;
+}
+
+vec2 mirrorUV( vec2 uv )
+{
+ return vec2( mirrorValue( uv.x ), mirrorValue( uv.y ) );
+}
+
+vec2 handleOverflow( vec2 uv )
+{
+ return clamp( uv, vec2( 0.0 ), vec2( 1.0 ) );
+ // return mirrorUV( uv );
+}
+
+vec4 sampleChromatic( vec2 uv, vec2 dir, int steps, vec3 shifts, float smear )
+{
+ vec4 combinedChromatic = vec4( 0.0 );
+
+
+ float weights = 0.0;
+
+ for ( int i = -steps; i <= steps; i++ )
+ {
+ float t = float( i ) / float( steps );
+ float w = 1.0 - abs( t );
+ vec2 stepDir = dir * pow( smear, t );
+
+ vec2 rUV = uv + stepDir * shifts.r;
+ rUV = handleOverflow( rUV );
+
+ vec2 gUV = uv + stepDir * shifts.g;
+ gUV = handleOverflow( gUV );
+
+ vec2 bUV = uv + stepDir * shifts.b;
+ bUV = handleOverflow( bUV );
+
+ vec4 colorR = generateFlare( rUV, color, opacityFadeValue );
+ vec4 colorG = generateFlare( gUV, color, opacityFadeValue );
+ vec4 colorB = generateFlare( bUV, color, opacityFadeValue );
+
+ combinedChromatic.r += colorR.r * w;
+ combinedChromatic.g += colorG.g * w;
+ combinedChromatic.b += colorB.b * w;
+ combinedChromatic.a += colorG.a * w;
+
+ weights += w;
+ }
+
+ combinedChromatic /= weights;
+
+ return combinedChromatic;
+}
+
+void fragment()
+{
+
+ vec4 flareColor = vec4( 0.0 );
+ float centerLength = length( centerDirection );
+
+
+
+ float caAmount = chromaticAberationAmount;
+
+ if ( abs( chromaticAberationDirectionTowardsCenter ) > 0.0 )
+ {
+ float maxLength = clamp( centerLength * 100.0, 0.0, 1.0 );
+ caAmount = maxLength * chromaticAberationAmount;
+ }
+
+
+ vec2 uv = UV;
+
+
+ float rx = clamp( perlin( ( vec2( zIndex * 12.03 ) + UV ) * shapeNoiseScale ), 0.0, 1.0 );
+
+ float noiseOpacity = mix( 1.0, rx, shapeNoiseAmount );
+
+ if ( chromaticAberationMode != 0 && caAmount > 0.0 && chromaticAberationSteps > 0 )
+ {
+
+ vec2 alignedDir = chromaticAberationDirection;
+
+ if ( length( alignedDir ) > 1.0 )
+ {
+ alignedDir = normalize( chromaticAberationDirection );
+ }
+
+ vec2 normDir = alignedDir;
+
+ if ( centerLength > 0.0 && chromaticAberationDirectionTowardsCenter != 0.0 )
+ {
+ float amount = chromaticAberationDirectionTowardsCenter;
+ vec2 normalizedCenterDirection = normalize( centerDirection );
+
+ vec2 centerDir = normalizedCenterDirection;
+
+ if ( amount < 0.0 )
+ {
+ amount = -amount;
+ centerDir = -centerDir;
+ }
+
+ alignedDir = mix( normDir, centerDir, amount );
+ alignedDir = normalize( alignedDir ) / vec2( 100.0 );
+ }
+
+ float centerScale = 1.0;
+ float centerTreshold = 0.1;
+
+ if ( centerLength < centerTreshold )
+ {
+ centerScale = centerLength / centerTreshold;
+ }
+
+ // flareColor.rgb = vec3( centerLength, centerScale, 1.0 );
+ // flareColor.a = 1.0;
+ flareColor = sampleChromatic( uv, alignedDir * caAmount * centerScale, chromaticAberationSteps, chromaticAberationShifts, chromaticAberationSmear );
+ }
+ else
+ {
+ flareColor = generateFlare( uv, color, opacityFadeValue );
+ }
+
+ ALBEDO = flareColor.rgb;
+ ALPHA = flareColor.a * noiseOpacity;
+
+}
diff --git a/Runtime/Shading/Shaders/Flares/BaseFlare/BaseFlare-VertexFragment.gdshaderinc.uid b/Runtime/Shading/Shaders/Flares/BaseFlare/BaseFlare-VertexFragment.gdshaderinc.uid
new file mode 100644
index 0000000..2e59d8e
--- /dev/null
+++ b/Runtime/Shading/Shaders/Flares/BaseFlare/BaseFlare-VertexFragment.gdshaderinc.uid
@@ -0,0 +1 @@
+uid://7j2y6whs3pq7
diff --git a/Runtime/Shading/Shaders/Flares/BaseFlare/BaseFlareMaterial.cs b/Runtime/Shading/Shaders/Flares/BaseFlare/BaseFlareMaterial.cs
new file mode 100644
index 0000000..a2ba394
--- /dev/null
+++ b/Runtime/Shading/Shaders/Flares/BaseFlare/BaseFlareMaterial.cs
@@ -0,0 +1,175 @@
+using Godot;
+
+namespace Rokojori
+{
+ // Generated by ShaderClassGenerator
+
+ public class BaseFlareShader
+ {
+ /*
+ public static readonly CachedResource shader = new CachedResource(
+ "C:/rokojori/godot-projects/winter-tales/addons/rokojori_action_library/Runtime/Shading/Shaders/Flares/BaseFlare/BaseFlare.gdshader"
+ );
+ */
+
+ public static readonly ColorPropertyName color = ColorPropertyName.Create( "color" );
+ public static readonly FloatPropertyName opacity = FloatPropertyName.Create( "opacity" );
+ public static readonly Sampler2DPropertyName opacityCurve = Sampler2DPropertyName.Create( "opacityCurve" );
+ public static readonly FloatPropertyName minHueRandom = FloatPropertyName.Create( "minHueRandom" );
+ public static readonly FloatPropertyName maxHueRandom = FloatPropertyName.Create( "maxHueRandom" );
+ public static readonly FloatPropertyName shapeNoiseAmount = FloatPropertyName.Create( "shapeNoiseAmount" );
+ public static readonly FloatPropertyName shapeNoiseScale = FloatPropertyName.Create( "shapeNoiseScale" );
+ public static readonly FloatPropertyName sizeX = FloatPropertyName.Create( "sizeX" );
+ public static readonly FloatPropertyName sizeY = FloatPropertyName.Create( "sizeY" );
+ public static readonly FloatPropertyName worldSizeScale = FloatPropertyName.Create( "worldSizeScale" );
+ public static readonly FloatPropertyName screenSizeScale = FloatPropertyName.Create( "screenSizeScale" );
+ public static readonly FloatPropertyName worldSizeVsScreenSize = FloatPropertyName.Create( "worldSize_vs_screenSize" );
+ public static readonly FloatPropertyName randomScaleMin = FloatPropertyName.Create( "randomScaleMin" );
+ public static readonly FloatPropertyName randomScaleMax = FloatPropertyName.Create( "randomScaleMax" );
+ public static readonly FloatPropertyName extension = FloatPropertyName.Create( "extension" );
+ public static readonly FloatPropertyName rotation = FloatPropertyName.Create( "rotation" );
+ public static readonly FloatPropertyName rotationOverX = FloatPropertyName.Create( "rotationOverX" );
+ public static readonly FloatPropertyName rotationOverY = FloatPropertyName.Create( "rotationOverY" );
+ public static readonly FloatPropertyName rotationPerLayer = FloatPropertyName.Create( "rotationPerLayer" );
+ public static readonly Vector2PropertyName screenOffset = Vector2PropertyName.Create( "screenOffset" );
+ public static readonly Vector2PropertyName screenOffsetScale = Vector2PropertyName.Create( "screenOffsetScale" );
+ public static readonly Vector2PropertyName screenOffsetLayerSpread = Vector2PropertyName.Create( "screenOffsetLayerSpread" );
+ public static readonly IntPropertyName chromaticAberationMode = IntPropertyName.Create( "chromaticAberationMode" );
+ public static readonly FloatPropertyName chromaticAberationAmount = FloatPropertyName.Create( "chromaticAberationAmount" );
+ public static readonly IntPropertyName chromaticAberationSteps = IntPropertyName.Create( "chromaticAberationSteps" );
+ public static readonly Vector2PropertyName chromaticAberationDirection = Vector2PropertyName.Create( "chromaticAberationDirection" );
+ public static readonly FloatPropertyName chromaticAberationDirectionTowardsCenter = FloatPropertyName.Create( "chromaticAberationDirectionTowardsCenter" );
+ public static readonly FloatPropertyName chromaticAberationCenterScale = FloatPropertyName.Create( "chromaticAberationCenterScale" );
+ public static readonly FloatPropertyName chromaticAberationCenterOffset = FloatPropertyName.Create( "chromaticAberationCenterOffset" );
+ public static readonly Vector3PropertyName chromaticAberationShifts = Vector3PropertyName.Create( "chromaticAberationShifts" );
+ public static readonly FloatPropertyName chromaticAberationSmear = FloatPropertyName.Create( "chromaticAberationSmear" );
+ public static readonly IntPropertyName fadingMode = IntPropertyName.Create( "fadingMode" );
+ public static readonly Sampler2DPropertyName fading = Sampler2DPropertyName.Create( "fading" );
+ public static readonly Sampler2DPropertyName opacityFading = Sampler2DPropertyName.Create( "opacityFading" );
+ public static readonly Sampler2DPropertyName sizeXfading = Sampler2DPropertyName.Create( "sizeXfading" );
+ public static readonly Sampler2DPropertyName sizeYfading = Sampler2DPropertyName.Create( "sizeYfading" );
+ public static readonly FloatPropertyName fadingPower = FloatPropertyName.Create( "fadingPower" );
+ public static readonly FloatPropertyName opacityFadingPower = FloatPropertyName.Create( "opacityFadingPower" );
+ public static readonly FloatPropertyName sizeXfadingPower = FloatPropertyName.Create( "sizeXfadingPower" );
+ public static readonly FloatPropertyName sizeYfadingPower = FloatPropertyName.Create( "sizeYfadingPower" );
+ public static readonly IntPropertyName occlusionMode = IntPropertyName.Create( "occlusionMode" );
+ public static readonly FloatPropertyName occlusionZOffset = FloatPropertyName.Create( "occlusionZOffset" );
+ public static readonly IntPropertyName occlusionTestMaxSteps = IntPropertyName.Create( "occlusionTestMaxSteps" );
+ public static readonly FloatPropertyName occlusionTestStepStride = FloatPropertyName.Create( "occlusionTestStepStride" );
+ public static readonly FloatPropertyName occlusionTestViewDependingScaleAmount = FloatPropertyName.Create( "occlusionTest_ViewDependingScaleAmount" );
+ public static readonly FloatPropertyName occlusionTestViewDependingDistance = FloatPropertyName.Create( "occlusionTest_ViewDependingDistance" );
+ public static readonly FloatPropertyName occlusionToSize = FloatPropertyName.Create( "occlusionToSize" );
+
+ }
+
+ [Tool]
+ public partial class BaseFlareMaterial:CustomMaterial
+ {
+
+
+ public readonly CustomMaterialProperty color;
+ public readonly CustomMaterialProperty opacity;
+ public readonly CustomMaterialProperty opacityCurve;
+ public readonly CustomMaterialProperty minHueRandom;
+ public readonly CustomMaterialProperty maxHueRandom;
+ public readonly CustomMaterialProperty shapeNoiseAmount;
+ public readonly CustomMaterialProperty shapeNoiseScale;
+ public readonly CustomMaterialProperty sizeX;
+ public readonly CustomMaterialProperty sizeY;
+ public readonly CustomMaterialProperty worldSizeScale;
+ public readonly CustomMaterialProperty screenSizeScale;
+ public readonly CustomMaterialProperty worldSizeVsScreenSize;
+ public readonly CustomMaterialProperty randomScaleMin;
+ public readonly CustomMaterialProperty randomScaleMax;
+ public readonly CustomMaterialProperty extension;
+ public readonly CustomMaterialProperty rotation;
+ public readonly CustomMaterialProperty rotationOverX;
+ public readonly CustomMaterialProperty rotationOverY;
+ public readonly CustomMaterialProperty rotationPerLayer;
+ public readonly CustomMaterialProperty screenOffset;
+ public readonly CustomMaterialProperty screenOffsetScale;
+ public readonly CustomMaterialProperty screenOffsetLayerSpread;
+ public readonly CustomMaterialProperty chromaticAberationMode;
+ public readonly CustomMaterialProperty chromaticAberationAmount;
+ public readonly CustomMaterialProperty chromaticAberationSteps;
+ public readonly CustomMaterialProperty chromaticAberationDirection;
+ public readonly CustomMaterialProperty chromaticAberationDirectionTowardsCenter;
+ public readonly CustomMaterialProperty chromaticAberationCenterScale;
+ public readonly CustomMaterialProperty chromaticAberationCenterOffset;
+ public readonly CustomMaterialProperty chromaticAberationShifts;
+ public readonly CustomMaterialProperty chromaticAberationSmear;
+ public readonly CustomMaterialProperty fadingMode;
+ public readonly CustomMaterialProperty fading;
+ public readonly CustomMaterialProperty opacityFading;
+ public readonly CustomMaterialProperty sizeXfading;
+ public readonly CustomMaterialProperty sizeYfading;
+ public readonly CustomMaterialProperty fadingPower;
+ public readonly CustomMaterialProperty opacityFadingPower;
+ public readonly CustomMaterialProperty sizeXfadingPower;
+ public readonly CustomMaterialProperty sizeYfadingPower;
+ public readonly CustomMaterialProperty occlusionMode;
+ public readonly CustomMaterialProperty occlusionZOffset;
+ public readonly CustomMaterialProperty occlusionTestMaxSteps;
+ public readonly CustomMaterialProperty occlusionTestStepStride;
+ public readonly CustomMaterialProperty occlusionTestViewDependingScaleAmount;
+ public readonly CustomMaterialProperty occlusionTestViewDependingDistance;
+ public readonly CustomMaterialProperty occlusionToSize;
+
+ public BaseFlareMaterial()
+ {
+ /*
+ Shader = BaseFlareShader.shader.Get();
+ */
+
+ color = new CustomMaterialProperty( this, BaseFlareShader.color );
+ opacity = new CustomMaterialProperty( this, BaseFlareShader.opacity );
+ opacityCurve = new CustomMaterialProperty( this, BaseFlareShader.opacityCurve );
+ minHueRandom = new CustomMaterialProperty( this, BaseFlareShader.minHueRandom );
+ maxHueRandom = new CustomMaterialProperty( this, BaseFlareShader.maxHueRandom );
+ shapeNoiseAmount = new CustomMaterialProperty( this, BaseFlareShader.shapeNoiseAmount );
+ shapeNoiseScale = new CustomMaterialProperty( this, BaseFlareShader.shapeNoiseScale );
+ sizeX = new CustomMaterialProperty( this, BaseFlareShader.sizeX );
+ sizeY = new CustomMaterialProperty( this, BaseFlareShader.sizeY );
+ worldSizeScale = new CustomMaterialProperty( this, BaseFlareShader.worldSizeScale );
+ screenSizeScale = new CustomMaterialProperty( this, BaseFlareShader.screenSizeScale );
+ worldSizeVsScreenSize = new CustomMaterialProperty( this, BaseFlareShader.worldSizeVsScreenSize );
+ randomScaleMin = new CustomMaterialProperty( this, BaseFlareShader.randomScaleMin );
+ randomScaleMax = new CustomMaterialProperty( this, BaseFlareShader.randomScaleMax );
+ extension = new CustomMaterialProperty( this, BaseFlareShader.extension );
+ rotation = new CustomMaterialProperty( this, BaseFlareShader.rotation );
+ rotationOverX = new CustomMaterialProperty( this, BaseFlareShader.rotationOverX );
+ rotationOverY = new CustomMaterialProperty( this, BaseFlareShader.rotationOverY );
+ rotationPerLayer = new CustomMaterialProperty( this, BaseFlareShader.rotationPerLayer );
+ screenOffset = new CustomMaterialProperty( this, BaseFlareShader.screenOffset );
+ screenOffsetScale = new CustomMaterialProperty( this, BaseFlareShader.screenOffsetScale );
+ screenOffsetLayerSpread = new CustomMaterialProperty( this, BaseFlareShader.screenOffsetLayerSpread );
+ chromaticAberationMode = new CustomMaterialProperty( this, BaseFlareShader.chromaticAberationMode );
+ chromaticAberationAmount = new CustomMaterialProperty( this, BaseFlareShader.chromaticAberationAmount );
+ chromaticAberationSteps = new CustomMaterialProperty( this, BaseFlareShader.chromaticAberationSteps );
+ chromaticAberationDirection = new CustomMaterialProperty( this, BaseFlareShader.chromaticAberationDirection );
+ chromaticAberationDirectionTowardsCenter = new CustomMaterialProperty( this, BaseFlareShader.chromaticAberationDirectionTowardsCenter );
+ chromaticAberationCenterScale = new CustomMaterialProperty( this, BaseFlareShader.chromaticAberationCenterScale );
+ chromaticAberationCenterOffset = new CustomMaterialProperty( this, BaseFlareShader.chromaticAberationCenterOffset );
+ chromaticAberationShifts = new CustomMaterialProperty( this, BaseFlareShader.chromaticAberationShifts );
+ chromaticAberationSmear = new CustomMaterialProperty( this, BaseFlareShader.chromaticAberationSmear );
+ fadingMode = new CustomMaterialProperty( this, BaseFlareShader.fadingMode );
+ fading = new CustomMaterialProperty( this, BaseFlareShader.fading );
+ opacityFading = new CustomMaterialProperty( this, BaseFlareShader.opacityFading );
+ sizeXfading = new CustomMaterialProperty( this, BaseFlareShader.sizeXfading );
+ sizeYfading = new CustomMaterialProperty( this, BaseFlareShader.sizeYfading );
+ fadingPower = new CustomMaterialProperty( this, BaseFlareShader.fadingPower );
+ opacityFadingPower = new CustomMaterialProperty( this, BaseFlareShader.opacityFadingPower );
+ sizeXfadingPower = new CustomMaterialProperty( this, BaseFlareShader.sizeXfadingPower );
+ sizeYfadingPower = new CustomMaterialProperty( this, BaseFlareShader.sizeYfadingPower );
+ occlusionMode = new CustomMaterialProperty( this, BaseFlareShader.occlusionMode );
+ occlusionZOffset = new CustomMaterialProperty( this, BaseFlareShader.occlusionZOffset );
+ occlusionTestMaxSteps = new CustomMaterialProperty( this, BaseFlareShader.occlusionTestMaxSteps );
+ occlusionTestStepStride = new CustomMaterialProperty( this, BaseFlareShader.occlusionTestStepStride );
+ occlusionTestViewDependingScaleAmount = new CustomMaterialProperty( this, BaseFlareShader.occlusionTestViewDependingScaleAmount );
+ occlusionTestViewDependingDistance = new CustomMaterialProperty( this, BaseFlareShader.occlusionTestViewDependingDistance );
+ occlusionToSize = new CustomMaterialProperty( this, BaseFlareShader.occlusionToSize );
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/Runtime/Shading/Shaders/Flares/BaseFlare/BaseFlareMaterial.cs.uid b/Runtime/Shading/Shaders/Flares/BaseFlare/BaseFlareMaterial.cs.uid
new file mode 100644
index 0000000..5d2f08f
--- /dev/null
+++ b/Runtime/Shading/Shaders/Flares/BaseFlare/BaseFlareMaterial.cs.uid
@@ -0,0 +1 @@
+uid://dg6f7yio6bhmg
diff --git a/Runtime/Shading/Shaders/Flares/EllipseType/EllipseTypeFlare.gdshaderinc b/Runtime/Shading/Shaders/Flares/EllipseType/EllipseTypeFlare.gdshaderinc
new file mode 100644
index 0000000..92356b1
--- /dev/null
+++ b/Runtime/Shading/Shaders/Flares/EllipseType/EllipseTypeFlare.gdshaderinc
@@ -0,0 +1,119 @@
+#include "res://addons/rokojori_action_library/Runtime/Shading/Shaders/Flares/Flares.gdshaderinc"
+
+
+
+// SHAPE
+group_uniforms Shape;
+
+uniform float shapeScale = 1.0;
+uniform sampler2D radialFill:source_color, filter_linear, repeat_enable;
+uniform float radialFillStrength = 1.0;
+uniform float radialFillTile = 1.0;
+uniform float radialFillOffset = 0.0;
+uniform bool radialFillRepeat = false;
+
+uniform sampler2D conicFill:source_color, filter_linear, repeat_enable;
+uniform float conicFillStrength = 1.0;
+uniform float conicFillTile = 1.0;
+uniform float conicFillOffset = 0.0;
+uniform bool conicFillRepeat = false;
+
+uniform float fillMultiply = 0.0;
+uniform float fillAdd = 0.0;
+
+uniform float shapeColorize:hint_range(0,1) = 0.0;
+
+uniform sampler2D radialMask:filter_linear, repeat_enable;
+uniform float radialMaskStrength = 1.0;
+uniform float radialMaskTile = 1.0;
+uniform float radialMaskOffset = 0.0;
+uniform bool radialMaskRepeat = false;
+
+uniform sampler2D conicMask: filter_linear, repeat_enable;
+uniform float conicMaskStrength = 1.0;
+uniform float conicMaskTile = 1.0;
+uniform float conicMaskOffset = 1.0;
+uniform bool conicMaskRepeat = false;
+
+uniform float maskMultiply = 0.0;
+uniform float maskAdd = 0.0;
+
+group_uniforms;
+
+#include "res://addons/rokojori_action_library/Runtime/Shading/Shaders/Flares/BaseFlare/BaseFlare-Variables.gdshaderinc"
+
+#define GENERATE_FLARE_VERTEX_DATA \
+{ \
+ \
+ \
+} \
+
+
+vec3 colorize( vec3 _original, vec3 _color )
+{
+ float _grey = ( _original.r + _original.g + _original.b ) / 3.0;
+
+ return _grey < 0.5 ? mix( vec3( 0.0 ), _color, _grey * 2.0 ) :
+ mix( _color, vec3( 1.0 ), ( _grey - 0.5 ) * 2.0 );
+}
+
+vec4 blendColor( vec4 _computedColor, vec4 _tintColor, float _colorize )
+{
+ vec4 _mixed = _computedColor * _tintColor;
+ vec4 _colorized = vec4( colorize( _tintColor.rgb, _computedColor.rgb ), _computedColor.a * _tintColor.a );
+
+ return mix( _mixed, _colorized, _colorize );
+}
+
+vec2 polarUV( vec2 _uv, float angleOffset )
+{
+ vec2 toCenter = _uv - vec2( 0.5 );
+ float d = length( toCenter );
+ float a = atan( toCenter.y, toCenter.x );
+ a = ( PI + a + angleOffset + PI * 2.0 * 0.75 ) / ( 2.0 * PI );
+
+ vec2 polarUV = vec2( d / 0.5, mod( a, 1.0 ) );
+
+ return polarUV;
+}
+
+vec4 sample( float x, sampler2D sampler, float strength, float tile, float offset, bool repeat )
+{
+ x = x * tile + offset;
+
+ if ( ! repeat )
+ {
+ x = clamp( x, 0.0, 1.0 );
+ }
+
+ return textureLod( sampler, vec2( x, 0.0 ), 0 ) * strength;
+}
+
+vec4 generateFlare( vec2 _uv, vec4 _color, float _opacity )
+{
+ _uv = ( _uv - vec2( 0.5 ) ) * shapeScale + vec2( 0.5 );
+ _uv = polarUV( _uv, 0.0 );
+
+ vec4 _radialFill = sample( _uv.x, radialFill, radialFillStrength, radialFillTile, radialFillOffset, radialFillRepeat );
+ vec4 _conicFill = sample( _uv.y, conicFill, conicFillStrength, conicFillTile, conicFillOffset, conicFillRepeat );
+
+ float _radialMask = sample( _uv.x, radialMask, radialMaskStrength, radialMaskTile, radialMaskOffset, radialMaskRepeat ).r;
+ float _conicMask = sample( _uv.y, conicMask, conicMaskStrength, conicMaskTile, conicMaskOffset, conicMaskRepeat ).r;
+
+ vec4 fill = _radialFill * _conicFill * fillMultiply + fillAdd * ( _radialFill + _conicFill );
+ float mask = _radialMask * _conicMask * maskMultiply + maskAdd * ( _radialMask + _conicMask );
+
+ vec4 mixedColor = fill;
+ mixedColor.a *= mask;
+
+ mixedColor = blendColor( mixedColor, _color, shapeColorize );
+
+ // mixedColor *= _color;
+ mixedColor.a *= _opacity;
+
+ // mixedColor = vec4( 1.0, 1.0, 1.0, _uv.x );
+
+ return mixedColor;
+}
+
+#include "res://addons/rokojori_action_library/Runtime/Shading/Shaders/Flares/BaseFlare/BaseFlare-VertexFragment.gdshaderinc"
\ No newline at end of file
diff --git a/Runtime/Shading/Shaders/Flares/EllipseType/EllipseTypeFlare.gdshaderinc.uid b/Runtime/Shading/Shaders/Flares/EllipseType/EllipseTypeFlare.gdshaderinc.uid
new file mode 100644
index 0000000..eceb72f
--- /dev/null
+++ b/Runtime/Shading/Shaders/Flares/EllipseType/EllipseTypeFlare.gdshaderinc.uid
@@ -0,0 +1 @@
+uid://bj1s1dgcv5ouu
diff --git a/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareAdd.gdshader b/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareAdd.gdshader
new file mode 100644
index 0000000..269cf47
--- /dev/null
+++ b/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareAdd.gdshader
@@ -0,0 +1,4 @@
+shader_type spatial;
+render_mode blend_add, depth_test_disabled, cull_disabled, unshaded, fog_disabled;
+
+#include "res://addons/rokojori_action_library/Runtime/Shading/Shaders/Flares/EllipseType/EllipseTypeFlare.gdshaderinc"
\ No newline at end of file
diff --git a/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareAdd.gdshader.uid b/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareAdd.gdshader.uid
new file mode 100644
index 0000000..74a61e1
--- /dev/null
+++ b/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareAdd.gdshader.uid
@@ -0,0 +1 @@
+uid://bbb3acmgbp5p0
diff --git a/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareAddMaterial.cs b/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareAddMaterial.cs
new file mode 100644
index 0000000..d94c759
--- /dev/null
+++ b/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareAddMaterial.cs
@@ -0,0 +1,159 @@
+using Godot;
+
+namespace Rokojori
+{
+ // Generated by ShaderClassGenerator
+
+ public class EllipseTypeFlareAddShader
+ {
+ ///*
+ public static readonly CachedResource shader = new CachedResource(
+ "res://addons/rokojori_action_library/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareAdd.gdshader"
+ );
+ //*/
+
+ public static readonly FloatPropertyName shapeScale = FloatPropertyName.Create( "shapeScale" );
+ public static readonly Sampler2DPropertyName radialFill = Sampler2DPropertyName.Create( "radialFill" );
+ public static readonly FloatPropertyName radialFillStrength = FloatPropertyName.Create( "radialFillStrength" );
+ public static readonly FloatPropertyName radialFillTile = FloatPropertyName.Create( "radialFillTile" );
+ public static readonly FloatPropertyName radialFillOffset = FloatPropertyName.Create( "radialFillOffset" );
+ public static readonly BoolPropertyName radialFillRepeat = BoolPropertyName.Create( "radialFillRepeat" );
+ public static readonly Sampler2DPropertyName conicFill = Sampler2DPropertyName.Create( "conicFill" );
+ public static readonly FloatPropertyName conicFillStrength = FloatPropertyName.Create( "conicFillStrength" );
+ public static readonly FloatPropertyName conicFillTile = FloatPropertyName.Create( "conicFillTile" );
+ public static readonly FloatPropertyName conicFillOffset = FloatPropertyName.Create( "conicFillOffset" );
+ public static readonly BoolPropertyName conicFillRepeat = BoolPropertyName.Create( "conicFillRepeat" );
+ public static readonly FloatPropertyName fillMultiply = FloatPropertyName.Create( "fillMultiply" );
+ public static readonly FloatPropertyName fillAdd = FloatPropertyName.Create( "fillAdd" );
+ public static readonly FloatPropertyName shapeColorize = FloatPropertyName.Create( "shapeColorize" );
+ public static readonly Sampler2DPropertyName radialMask = Sampler2DPropertyName.Create( "radialMask" );
+ public static readonly FloatPropertyName radialMaskStrength = FloatPropertyName.Create( "radialMaskStrength" );
+ public static readonly FloatPropertyName radialMaskTile = FloatPropertyName.Create( "radialMaskTile" );
+ public static readonly FloatPropertyName radialMaskOffset = FloatPropertyName.Create( "radialMaskOffset" );
+ public static readonly BoolPropertyName radialMaskRepeat = BoolPropertyName.Create( "radialMaskRepeat" );
+ public static readonly Sampler2DPropertyName conicMask = Sampler2DPropertyName.Create( "conicMask" );
+ public static readonly FloatPropertyName conicMaskStrength = FloatPropertyName.Create( "conicMaskStrength" );
+ public static readonly FloatPropertyName conicMaskTile = FloatPropertyName.Create( "conicMaskTile" );
+ public static readonly FloatPropertyName conicMaskOffset = FloatPropertyName.Create( "conicMaskOffset" );
+ public static readonly BoolPropertyName conicMaskRepeat = BoolPropertyName.Create( "conicMaskRepeat" );
+ public static readonly FloatPropertyName maskMultiply = FloatPropertyName.Create( "maskMultiply" );
+ public static readonly FloatPropertyName maskAdd = FloatPropertyName.Create( "maskAdd" );
+ public static readonly ColorPropertyName color = ColorPropertyName.Create( "color" );
+ public static readonly FloatPropertyName opacity = FloatPropertyName.Create( "opacity" );
+ public static readonly Sampler2DPropertyName opacityCurve = Sampler2DPropertyName.Create( "opacityCurve" );
+ public static readonly FloatPropertyName minHueRandom = FloatPropertyName.Create( "minHueRandom" );
+ public static readonly FloatPropertyName maxHueRandom = FloatPropertyName.Create( "maxHueRandom" );
+ public static readonly FloatPropertyName shapeNoiseAmount = FloatPropertyName.Create( "shapeNoiseAmount" );
+ public static readonly FloatPropertyName shapeNoiseScale = FloatPropertyName.Create( "shapeNoiseScale" );
+ public static readonly FloatPropertyName sizeX = FloatPropertyName.Create( "sizeX" );
+ public static readonly FloatPropertyName sizeY = FloatPropertyName.Create( "sizeY" );
+ public static readonly FloatPropertyName worldSizeScale = FloatPropertyName.Create( "worldSizeScale" );
+ public static readonly FloatPropertyName screenSizeScale = FloatPropertyName.Create( "screenSizeScale" );
+ public static readonly FloatPropertyName worldSizeVsScreenSize = FloatPropertyName.Create( "worldSize_vs_screenSize" );
+ public static readonly FloatPropertyName randomScaleMin = FloatPropertyName.Create( "randomScaleMin" );
+ public static readonly FloatPropertyName randomScaleMax = FloatPropertyName.Create( "randomScaleMax" );
+ public static readonly FloatPropertyName extension = FloatPropertyName.Create( "extension" );
+ public static readonly FloatPropertyName rotation = FloatPropertyName.Create( "rotation" );
+ public static readonly FloatPropertyName rotationOverX = FloatPropertyName.Create( "rotationOverX" );
+ public static readonly FloatPropertyName rotationOverY = FloatPropertyName.Create( "rotationOverY" );
+ public static readonly FloatPropertyName rotationPerLayer = FloatPropertyName.Create( "rotationPerLayer" );
+ public static readonly Vector2PropertyName screenOffset = Vector2PropertyName.Create( "screenOffset" );
+ public static readonly Vector2PropertyName screenOffsetScale = Vector2PropertyName.Create( "screenOffsetScale" );
+ public static readonly Vector2PropertyName screenOffsetLayerSpread = Vector2PropertyName.Create( "screenOffsetLayerSpread" );
+ public static readonly IntPropertyName chromaticAberationMode = IntPropertyName.Create( "chromaticAberationMode" );
+ public static readonly FloatPropertyName chromaticAberationAmount = FloatPropertyName.Create( "chromaticAberationAmount" );
+ public static readonly IntPropertyName chromaticAberationSteps = IntPropertyName.Create( "chromaticAberationSteps" );
+ public static readonly Vector2PropertyName chromaticAberationDirection = Vector2PropertyName.Create( "chromaticAberationDirection" );
+ public static readonly FloatPropertyName chromaticAberationDirectionTowardsCenter = FloatPropertyName.Create( "chromaticAberationDirectionTowardsCenter" );
+ public static readonly FloatPropertyName chromaticAberationCenterScale = FloatPropertyName.Create( "chromaticAberationCenterScale" );
+ public static readonly FloatPropertyName chromaticAberationCenterOffset = FloatPropertyName.Create( "chromaticAberationCenterOffset" );
+ public static readonly Vector3PropertyName chromaticAberationShifts = Vector3PropertyName.Create( "chromaticAberationShifts" );
+ public static readonly FloatPropertyName chromaticAberationSmear = FloatPropertyName.Create( "chromaticAberationSmear" );
+ public static readonly IntPropertyName fadingMode = IntPropertyName.Create( "fadingMode" );
+ public static readonly Sampler2DPropertyName fading = Sampler2DPropertyName.Create( "fading" );
+ public static readonly Sampler2DPropertyName opacityFading = Sampler2DPropertyName.Create( "opacityFading" );
+ public static readonly Sampler2DPropertyName sizeXfading = Sampler2DPropertyName.Create( "sizeXfading" );
+ public static readonly Sampler2DPropertyName sizeYfading = Sampler2DPropertyName.Create( "sizeYfading" );
+ public static readonly FloatPropertyName fadingPower = FloatPropertyName.Create( "fadingPower" );
+ public static readonly FloatPropertyName opacityFadingPower = FloatPropertyName.Create( "opacityFadingPower" );
+ public static readonly FloatPropertyName sizeXfadingPower = FloatPropertyName.Create( "sizeXfadingPower" );
+ public static readonly FloatPropertyName sizeYfadingPower = FloatPropertyName.Create( "sizeYfadingPower" );
+ public static readonly IntPropertyName occlusionMode = IntPropertyName.Create( "occlusionMode" );
+ public static readonly FloatPropertyName occlusionZOffset = FloatPropertyName.Create( "occlusionZOffset" );
+ public static readonly IntPropertyName occlusionTestMaxSteps = IntPropertyName.Create( "occlusionTestMaxSteps" );
+ public static readonly FloatPropertyName occlusionTestStepStride = FloatPropertyName.Create( "occlusionTestStepStride" );
+ public static readonly FloatPropertyName occlusionTestViewDependingScaleAmount = FloatPropertyName.Create( "occlusionTest_ViewDependingScaleAmount" );
+ public static readonly FloatPropertyName occlusionTestViewDependingDistance = FloatPropertyName.Create( "occlusionTest_ViewDependingDistance" );
+ public static readonly FloatPropertyName occlusionToSize = FloatPropertyName.Create( "occlusionToSize" );
+
+ }
+
+ [Tool]
+ public partial class EllipseTypeFlareAddMaterial:BaseFlareMaterial
+ {
+
+
+ public readonly CustomMaterialProperty shapeScale;
+ public readonly CustomMaterialProperty radialFill;
+ public readonly CustomMaterialProperty radialFillStrength;
+ public readonly CustomMaterialProperty radialFillTile;
+ public readonly CustomMaterialProperty radialFillOffset;
+ public readonly CustomMaterialProperty radialFillRepeat;
+ public readonly CustomMaterialProperty conicFill;
+ public readonly CustomMaterialProperty conicFillStrength;
+ public readonly CustomMaterialProperty conicFillTile;
+ public readonly CustomMaterialProperty conicFillOffset;
+ public readonly CustomMaterialProperty conicFillRepeat;
+ public readonly CustomMaterialProperty fillMultiply;
+ public readonly CustomMaterialProperty fillAdd;
+ public readonly CustomMaterialProperty shapeColorize;
+ public readonly CustomMaterialProperty radialMask;
+ public readonly CustomMaterialProperty radialMaskStrength;
+ public readonly CustomMaterialProperty radialMaskTile;
+ public readonly CustomMaterialProperty radialMaskOffset;
+ public readonly CustomMaterialProperty radialMaskRepeat;
+ public readonly CustomMaterialProperty conicMask;
+ public readonly CustomMaterialProperty conicMaskStrength;
+ public readonly CustomMaterialProperty conicMaskTile;
+ public readonly CustomMaterialProperty conicMaskOffset;
+ public readonly CustomMaterialProperty conicMaskRepeat;
+ public readonly CustomMaterialProperty maskMultiply;
+ public readonly CustomMaterialProperty maskAdd;
+
+ public EllipseTypeFlareAddMaterial()
+ {
+ ///*
+ Shader = EllipseTypeFlareAddShader.shader.Get();
+ //*/
+
+ shapeScale = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.shapeScale );
+ radialFill = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.radialFill );
+ radialFillStrength = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.radialFillStrength );
+ radialFillTile = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.radialFillTile );
+ radialFillOffset = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.radialFillOffset );
+ radialFillRepeat = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.radialFillRepeat );
+ conicFill = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.conicFill );
+ conicFillStrength = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.conicFillStrength );
+ conicFillTile = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.conicFillTile );
+ conicFillOffset = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.conicFillOffset );
+ conicFillRepeat = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.conicFillRepeat );
+ fillMultiply = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.fillMultiply );
+ fillAdd = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.fillAdd );
+ shapeColorize = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.shapeColorize );
+ radialMask = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.radialMask );
+ radialMaskStrength = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.radialMaskStrength );
+ radialMaskTile = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.radialMaskTile );
+ radialMaskOffset = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.radialMaskOffset );
+ radialMaskRepeat = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.radialMaskRepeat );
+ conicMask = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.conicMask );
+ conicMaskStrength = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.conicMaskStrength );
+ conicMaskTile = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.conicMaskTile );
+ conicMaskOffset = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.conicMaskOffset );
+ conicMaskRepeat = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.conicMaskRepeat );
+ maskMultiply = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.maskMultiply );
+ maskAdd = new CustomMaterialProperty( this, EllipseTypeFlareAddShader.maskAdd );
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareAddMaterial.cs.uid b/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareAddMaterial.cs.uid
new file mode 100644
index 0000000..4f99361
--- /dev/null
+++ b/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareAddMaterial.cs.uid
@@ -0,0 +1 @@
+uid://cc3jq0uc5ukxw
diff --git a/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareMix.gdshader b/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareMix.gdshader
new file mode 100644
index 0000000..3db78bc
--- /dev/null
+++ b/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareMix.gdshader
@@ -0,0 +1,4 @@
+shader_type spatial;
+render_mode blend_mix, depth_test_disabled, cull_disabled, unshaded, fog_disabled;
+
+#include "res://addons/rokojori_action_library/Runtime/Shading/Shaders/Flares/EllipseType/EllipseTypeFlare.gdshaderinc"
\ No newline at end of file
diff --git a/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareMix.gdshader.uid b/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareMix.gdshader.uid
new file mode 100644
index 0000000..98e4834
--- /dev/null
+++ b/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareMix.gdshader.uid
@@ -0,0 +1 @@
+uid://dhxsdn5ken8ed
diff --git a/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareMixMaterial.cs b/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareMixMaterial.cs
new file mode 100644
index 0000000..cdc7a1f
--- /dev/null
+++ b/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareMixMaterial.cs
@@ -0,0 +1,159 @@
+using Godot;
+
+namespace Rokojori
+{
+ // Generated by ShaderClassGenerator
+
+ public class EllipseTypeFlareMixShader
+ {
+ ///*
+ public static readonly CachedResource shader = new CachedResource(
+ "res://addons/rokojori_action_library/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareMix.gdshader"
+ );
+ //*/
+
+ public static readonly FloatPropertyName shapeScale = FloatPropertyName.Create( "shapeScale" );
+ public static readonly Sampler2DPropertyName radialFill = Sampler2DPropertyName.Create( "radialFill" );
+ public static readonly FloatPropertyName radialFillStrength = FloatPropertyName.Create( "radialFillStrength" );
+ public static readonly FloatPropertyName radialFillTile = FloatPropertyName.Create( "radialFillTile" );
+ public static readonly FloatPropertyName radialFillOffset = FloatPropertyName.Create( "radialFillOffset" );
+ public static readonly BoolPropertyName radialFillRepeat = BoolPropertyName.Create( "radialFillRepeat" );
+ public static readonly Sampler2DPropertyName conicFill = Sampler2DPropertyName.Create( "conicFill" );
+ public static readonly FloatPropertyName conicFillStrength = FloatPropertyName.Create( "conicFillStrength" );
+ public static readonly FloatPropertyName conicFillTile = FloatPropertyName.Create( "conicFillTile" );
+ public static readonly FloatPropertyName conicFillOffset = FloatPropertyName.Create( "conicFillOffset" );
+ public static readonly BoolPropertyName conicFillRepeat = BoolPropertyName.Create( "conicFillRepeat" );
+ public static readonly FloatPropertyName fillMultiply = FloatPropertyName.Create( "fillMultiply" );
+ public static readonly FloatPropertyName fillAdd = FloatPropertyName.Create( "fillAdd" );
+ public static readonly FloatPropertyName shapeColorize = FloatPropertyName.Create( "shapeColorize" );
+ public static readonly Sampler2DPropertyName radialMask = Sampler2DPropertyName.Create( "radialMask" );
+ public static readonly FloatPropertyName radialMaskStrength = FloatPropertyName.Create( "radialMaskStrength" );
+ public static readonly FloatPropertyName radialMaskTile = FloatPropertyName.Create( "radialMaskTile" );
+ public static readonly FloatPropertyName radialMaskOffset = FloatPropertyName.Create( "radialMaskOffset" );
+ public static readonly BoolPropertyName radialMaskRepeat = BoolPropertyName.Create( "radialMaskRepeat" );
+ public static readonly Sampler2DPropertyName conicMask = Sampler2DPropertyName.Create( "conicMask" );
+ public static readonly FloatPropertyName conicMaskStrength = FloatPropertyName.Create( "conicMaskStrength" );
+ public static readonly FloatPropertyName conicMaskTile = FloatPropertyName.Create( "conicMaskTile" );
+ public static readonly FloatPropertyName conicMaskOffset = FloatPropertyName.Create( "conicMaskOffset" );
+ public static readonly BoolPropertyName conicMaskRepeat = BoolPropertyName.Create( "conicMaskRepeat" );
+ public static readonly FloatPropertyName maskMultiply = FloatPropertyName.Create( "maskMultiply" );
+ public static readonly FloatPropertyName maskAdd = FloatPropertyName.Create( "maskAdd" );
+ public static readonly ColorPropertyName color = ColorPropertyName.Create( "color" );
+ public static readonly FloatPropertyName opacity = FloatPropertyName.Create( "opacity" );
+ public static readonly Sampler2DPropertyName opacityCurve = Sampler2DPropertyName.Create( "opacityCurve" );
+ public static readonly FloatPropertyName minHueRandom = FloatPropertyName.Create( "minHueRandom" );
+ public static readonly FloatPropertyName maxHueRandom = FloatPropertyName.Create( "maxHueRandom" );
+ public static readonly FloatPropertyName shapeNoiseAmount = FloatPropertyName.Create( "shapeNoiseAmount" );
+ public static readonly FloatPropertyName shapeNoiseScale = FloatPropertyName.Create( "shapeNoiseScale" );
+ public static readonly FloatPropertyName sizeX = FloatPropertyName.Create( "sizeX" );
+ public static readonly FloatPropertyName sizeY = FloatPropertyName.Create( "sizeY" );
+ public static readonly FloatPropertyName worldSizeScale = FloatPropertyName.Create( "worldSizeScale" );
+ public static readonly FloatPropertyName screenSizeScale = FloatPropertyName.Create( "screenSizeScale" );
+ public static readonly FloatPropertyName worldSizeVsScreenSize = FloatPropertyName.Create( "worldSize_vs_screenSize" );
+ public static readonly FloatPropertyName randomScaleMin = FloatPropertyName.Create( "randomScaleMin" );
+ public static readonly FloatPropertyName randomScaleMax = FloatPropertyName.Create( "randomScaleMax" );
+ public static readonly FloatPropertyName extension = FloatPropertyName.Create( "extension" );
+ public static readonly FloatPropertyName rotation = FloatPropertyName.Create( "rotation" );
+ public static readonly FloatPropertyName rotationOverX = FloatPropertyName.Create( "rotationOverX" );
+ public static readonly FloatPropertyName rotationOverY = FloatPropertyName.Create( "rotationOverY" );
+ public static readonly FloatPropertyName rotationPerLayer = FloatPropertyName.Create( "rotationPerLayer" );
+ public static readonly Vector2PropertyName screenOffset = Vector2PropertyName.Create( "screenOffset" );
+ public static readonly Vector2PropertyName screenOffsetScale = Vector2PropertyName.Create( "screenOffsetScale" );
+ public static readonly Vector2PropertyName screenOffsetLayerSpread = Vector2PropertyName.Create( "screenOffsetLayerSpread" );
+ public static readonly IntPropertyName chromaticAberationMode = IntPropertyName.Create( "chromaticAberationMode" );
+ public static readonly FloatPropertyName chromaticAberationAmount = FloatPropertyName.Create( "chromaticAberationAmount" );
+ public static readonly IntPropertyName chromaticAberationSteps = IntPropertyName.Create( "chromaticAberationSteps" );
+ public static readonly Vector2PropertyName chromaticAberationDirection = Vector2PropertyName.Create( "chromaticAberationDirection" );
+ public static readonly FloatPropertyName chromaticAberationDirectionTowardsCenter = FloatPropertyName.Create( "chromaticAberationDirectionTowardsCenter" );
+ public static readonly FloatPropertyName chromaticAberationCenterScale = FloatPropertyName.Create( "chromaticAberationCenterScale" );
+ public static readonly FloatPropertyName chromaticAberationCenterOffset = FloatPropertyName.Create( "chromaticAberationCenterOffset" );
+ public static readonly Vector3PropertyName chromaticAberationShifts = Vector3PropertyName.Create( "chromaticAberationShifts" );
+ public static readonly FloatPropertyName chromaticAberationSmear = FloatPropertyName.Create( "chromaticAberationSmear" );
+ public static readonly IntPropertyName fadingMode = IntPropertyName.Create( "fadingMode" );
+ public static readonly Sampler2DPropertyName fading = Sampler2DPropertyName.Create( "fading" );
+ public static readonly Sampler2DPropertyName opacityFading = Sampler2DPropertyName.Create( "opacityFading" );
+ public static readonly Sampler2DPropertyName sizeXfading = Sampler2DPropertyName.Create( "sizeXfading" );
+ public static readonly Sampler2DPropertyName sizeYfading = Sampler2DPropertyName.Create( "sizeYfading" );
+ public static readonly FloatPropertyName fadingPower = FloatPropertyName.Create( "fadingPower" );
+ public static readonly FloatPropertyName opacityFadingPower = FloatPropertyName.Create( "opacityFadingPower" );
+ public static readonly FloatPropertyName sizeXfadingPower = FloatPropertyName.Create( "sizeXfadingPower" );
+ public static readonly FloatPropertyName sizeYfadingPower = FloatPropertyName.Create( "sizeYfadingPower" );
+ public static readonly IntPropertyName occlusionMode = IntPropertyName.Create( "occlusionMode" );
+ public static readonly FloatPropertyName occlusionZOffset = FloatPropertyName.Create( "occlusionZOffset" );
+ public static readonly IntPropertyName occlusionTestMaxSteps = IntPropertyName.Create( "occlusionTestMaxSteps" );
+ public static readonly FloatPropertyName occlusionTestStepStride = FloatPropertyName.Create( "occlusionTestStepStride" );
+ public static readonly FloatPropertyName occlusionTestViewDependingScaleAmount = FloatPropertyName.Create( "occlusionTest_ViewDependingScaleAmount" );
+ public static readonly FloatPropertyName occlusionTestViewDependingDistance = FloatPropertyName.Create( "occlusionTest_ViewDependingDistance" );
+ public static readonly FloatPropertyName occlusionToSize = FloatPropertyName.Create( "occlusionToSize" );
+
+ }
+
+ [Tool]
+ public partial class EllipseTypeFlareMixMaterial:BaseFlareMaterial
+ {
+
+
+ public readonly CustomMaterialProperty shapeScale;
+ public readonly CustomMaterialProperty radialFill;
+ public readonly CustomMaterialProperty radialFillStrength;
+ public readonly CustomMaterialProperty radialFillTile;
+ public readonly CustomMaterialProperty radialFillOffset;
+ public readonly CustomMaterialProperty radialFillRepeat;
+ public readonly CustomMaterialProperty conicFill;
+ public readonly CustomMaterialProperty conicFillStrength;
+ public readonly CustomMaterialProperty conicFillTile;
+ public readonly CustomMaterialProperty conicFillOffset;
+ public readonly CustomMaterialProperty conicFillRepeat;
+ public readonly CustomMaterialProperty fillMultiply;
+ public readonly CustomMaterialProperty fillAdd;
+ public readonly CustomMaterialProperty shapeColorize;
+ public readonly CustomMaterialProperty radialMask;
+ public readonly CustomMaterialProperty radialMaskStrength;
+ public readonly CustomMaterialProperty radialMaskTile;
+ public readonly CustomMaterialProperty radialMaskOffset;
+ public readonly CustomMaterialProperty radialMaskRepeat;
+ public readonly CustomMaterialProperty conicMask;
+ public readonly CustomMaterialProperty conicMaskStrength;
+ public readonly CustomMaterialProperty conicMaskTile;
+ public readonly CustomMaterialProperty conicMaskOffset;
+ public readonly CustomMaterialProperty conicMaskRepeat;
+ public readonly CustomMaterialProperty maskMultiply;
+ public readonly CustomMaterialProperty maskAdd;
+
+ public EllipseTypeFlareMixMaterial()
+ {
+ ///*
+ Shader = EllipseTypeFlareMixShader.shader.Get();
+ //*/
+
+ shapeScale = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.shapeScale );
+ radialFill = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.radialFill );
+ radialFillStrength = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.radialFillStrength );
+ radialFillTile = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.radialFillTile );
+ radialFillOffset = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.radialFillOffset );
+ radialFillRepeat = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.radialFillRepeat );
+ conicFill = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.conicFill );
+ conicFillStrength = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.conicFillStrength );
+ conicFillTile = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.conicFillTile );
+ conicFillOffset = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.conicFillOffset );
+ conicFillRepeat = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.conicFillRepeat );
+ fillMultiply = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.fillMultiply );
+ fillAdd = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.fillAdd );
+ shapeColorize = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.shapeColorize );
+ radialMask = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.radialMask );
+ radialMaskStrength = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.radialMaskStrength );
+ radialMaskTile = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.radialMaskTile );
+ radialMaskOffset = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.radialMaskOffset );
+ radialMaskRepeat = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.radialMaskRepeat );
+ conicMask = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.conicMask );
+ conicMaskStrength = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.conicMaskStrength );
+ conicMaskTile = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.conicMaskTile );
+ conicMaskOffset = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.conicMaskOffset );
+ conicMaskRepeat = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.conicMaskRepeat );
+ maskMultiply = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.maskMultiply );
+ maskAdd = new CustomMaterialProperty( this, EllipseTypeFlareMixShader.maskAdd );
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareMixMaterial.cs.uid b/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareMixMaterial.cs.uid
new file mode 100644
index 0000000..e82d42a
--- /dev/null
+++ b/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareMixMaterial.cs.uid
@@ -0,0 +1 @@
+uid://bwvyiolbcntu
diff --git a/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareMultiply.gdshader b/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareMultiply.gdshader
new file mode 100644
index 0000000..ebad498
--- /dev/null
+++ b/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareMultiply.gdshader
@@ -0,0 +1,4 @@
+shader_type spatial;
+render_mode blend_mul, depth_test_disabled, cull_disabled, unshaded, fog_disabled;
+
+#include "res://addons/rokojori_action_library/Runtime/Shading/Shaders/Flares/EllipseType/EllipseTypeFlare.gdshaderinc"
\ No newline at end of file
diff --git a/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareMultiply.gdshader.uid b/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareMultiply.gdshader.uid
new file mode 100644
index 0000000..79bc98f
--- /dev/null
+++ b/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareMultiply.gdshader.uid
@@ -0,0 +1 @@
+uid://cnw5dyqni2cc3
diff --git a/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareMultiplyMaterial.cs b/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareMultiplyMaterial.cs
new file mode 100644
index 0000000..0ed9e9c
--- /dev/null
+++ b/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareMultiplyMaterial.cs
@@ -0,0 +1,159 @@
+using Godot;
+
+namespace Rokojori
+{
+ // Generated by ShaderClassGenerator
+
+ public class EllipseTypeFlareMultiplyShader
+ {
+ ///*
+ public static readonly CachedResource shader = new CachedResource(
+ "res://addons/rokojori_action_library/Runtime/Shading/Shaders/Flares/EllipseType/Variants/EllipseTypeFlareMultiply.gdshader"
+ );
+ //*/
+
+ public static readonly FloatPropertyName shapeScale = FloatPropertyName.Create( "shapeScale" );
+ public static readonly Sampler2DPropertyName radialFill = Sampler2DPropertyName.Create( "radialFill" );
+ public static readonly FloatPropertyName radialFillStrength = FloatPropertyName.Create( "radialFillStrength" );
+ public static readonly FloatPropertyName radialFillTile = FloatPropertyName.Create( "radialFillTile" );
+ public static readonly FloatPropertyName radialFillOffset = FloatPropertyName.Create( "radialFillOffset" );
+ public static readonly BoolPropertyName radialFillRepeat = BoolPropertyName.Create( "radialFillRepeat" );
+ public static readonly Sampler2DPropertyName conicFill = Sampler2DPropertyName.Create( "conicFill" );
+ public static readonly FloatPropertyName conicFillStrength = FloatPropertyName.Create( "conicFillStrength" );
+ public static readonly FloatPropertyName conicFillTile = FloatPropertyName.Create( "conicFillTile" );
+ public static readonly FloatPropertyName conicFillOffset = FloatPropertyName.Create( "conicFillOffset" );
+ public static readonly BoolPropertyName conicFillRepeat = BoolPropertyName.Create( "conicFillRepeat" );
+ public static readonly FloatPropertyName fillMultiply = FloatPropertyName.Create( "fillMultiply" );
+ public static readonly FloatPropertyName fillAdd = FloatPropertyName.Create( "fillAdd" );
+ public static readonly FloatPropertyName shapeColorize = FloatPropertyName.Create( "shapeColorize" );
+ public static readonly Sampler2DPropertyName radialMask = Sampler2DPropertyName.Create( "radialMask" );
+ public static readonly FloatPropertyName radialMaskStrength = FloatPropertyName.Create( "radialMaskStrength" );
+ public static readonly FloatPropertyName radialMaskTile = FloatPropertyName.Create( "radialMaskTile" );
+ public static readonly FloatPropertyName radialMaskOffset = FloatPropertyName.Create( "radialMaskOffset" );
+ public static readonly BoolPropertyName radialMaskRepeat = BoolPropertyName.Create( "radialMaskRepeat" );
+ public static readonly Sampler2DPropertyName conicMask = Sampler2DPropertyName.Create( "conicMask" );
+ public static readonly FloatPropertyName conicMaskStrength = FloatPropertyName.Create( "conicMaskStrength" );
+ public static readonly FloatPropertyName conicMaskTile = FloatPropertyName.Create( "conicMaskTile" );
+ public static readonly FloatPropertyName conicMaskOffset = FloatPropertyName.Create( "conicMaskOffset" );
+ public static readonly BoolPropertyName conicMaskRepeat = BoolPropertyName.Create( "conicMaskRepeat" );
+ public static readonly FloatPropertyName maskMultiply = FloatPropertyName.Create( "maskMultiply" );
+ public static readonly FloatPropertyName maskAdd = FloatPropertyName.Create( "maskAdd" );
+ public static readonly ColorPropertyName color = ColorPropertyName.Create( "color" );
+ public static readonly FloatPropertyName opacity = FloatPropertyName.Create( "opacity" );
+ public static readonly Sampler2DPropertyName opacityCurve = Sampler2DPropertyName.Create( "opacityCurve" );
+ public static readonly FloatPropertyName minHueRandom = FloatPropertyName.Create( "minHueRandom" );
+ public static readonly FloatPropertyName maxHueRandom = FloatPropertyName.Create( "maxHueRandom" );
+ public static readonly FloatPropertyName shapeNoiseAmount = FloatPropertyName.Create( "shapeNoiseAmount" );
+ public static readonly FloatPropertyName shapeNoiseScale = FloatPropertyName.Create( "shapeNoiseScale" );
+ public static readonly FloatPropertyName sizeX = FloatPropertyName.Create( "sizeX" );
+ public static readonly FloatPropertyName sizeY = FloatPropertyName.Create( "sizeY" );
+ public static readonly FloatPropertyName worldSizeScale = FloatPropertyName.Create( "worldSizeScale" );
+ public static readonly FloatPropertyName screenSizeScale = FloatPropertyName.Create( "screenSizeScale" );
+ public static readonly FloatPropertyName worldSizeVsScreenSize = FloatPropertyName.Create( "worldSize_vs_screenSize" );
+ public static readonly FloatPropertyName randomScaleMin = FloatPropertyName.Create( "randomScaleMin" );
+ public static readonly FloatPropertyName randomScaleMax = FloatPropertyName.Create( "randomScaleMax" );
+ public static readonly FloatPropertyName extension = FloatPropertyName.Create( "extension" );
+ public static readonly FloatPropertyName rotation = FloatPropertyName.Create( "rotation" );
+ public static readonly FloatPropertyName rotationOverX = FloatPropertyName.Create( "rotationOverX" );
+ public static readonly FloatPropertyName rotationOverY = FloatPropertyName.Create( "rotationOverY" );
+ public static readonly FloatPropertyName rotationPerLayer = FloatPropertyName.Create( "rotationPerLayer" );
+ public static readonly Vector2PropertyName screenOffset = Vector2PropertyName.Create( "screenOffset" );
+ public static readonly Vector2PropertyName screenOffsetScale = Vector2PropertyName.Create( "screenOffsetScale" );
+ public static readonly Vector2PropertyName screenOffsetLayerSpread = Vector2PropertyName.Create( "screenOffsetLayerSpread" );
+ public static readonly IntPropertyName chromaticAberationMode = IntPropertyName.Create( "chromaticAberationMode" );
+ public static readonly FloatPropertyName chromaticAberationAmount = FloatPropertyName.Create( "chromaticAberationAmount" );
+ public static readonly IntPropertyName chromaticAberationSteps = IntPropertyName.Create( "chromaticAberationSteps" );
+ public static readonly Vector2PropertyName chromaticAberationDirection = Vector2PropertyName.Create( "chromaticAberationDirection" );
+ public static readonly FloatPropertyName chromaticAberationDirectionTowardsCenter = FloatPropertyName.Create( "chromaticAberationDirectionTowardsCenter" );
+ public static readonly FloatPropertyName chromaticAberationCenterScale = FloatPropertyName.Create( "chromaticAberationCenterScale" );
+ public static readonly FloatPropertyName chromaticAberationCenterOffset = FloatPropertyName.Create( "chromaticAberationCenterOffset" );
+ public static readonly Vector3PropertyName chromaticAberationShifts = Vector3PropertyName.Create( "chromaticAberationShifts" );
+ public static readonly FloatPropertyName chromaticAberationSmear = FloatPropertyName.Create( "chromaticAberationSmear" );
+ public static readonly IntPropertyName fadingMode = IntPropertyName.Create( "fadingMode" );
+ public static readonly Sampler2DPropertyName fading = Sampler2DPropertyName.Create( "fading" );
+ public static readonly Sampler2DPropertyName opacityFading = Sampler2DPropertyName.Create( "opacityFading" );
+ public static readonly Sampler2DPropertyName sizeXfading = Sampler2DPropertyName.Create( "sizeXfading" );
+ public static readonly Sampler2DPropertyName sizeYfading = Sampler2DPropertyName.Create( "sizeYfading" );
+ public static readonly FloatPropertyName fadingPower = FloatPropertyName.Create( "fadingPower" );
+ public static readonly FloatPropertyName opacityFadingPower = FloatPropertyName.Create( "opacityFadingPower" );
+ public static readonly FloatPropertyName sizeXfadingPower = FloatPropertyName.Create( "sizeXfadingPower" );
+ public static readonly FloatPropertyName sizeYfadingPower = FloatPropertyName.Create( "sizeYfadingPower" );
+ public static readonly IntPropertyName occlusionMode = IntPropertyName.Create( "occlusionMode" );
+ public static readonly FloatPropertyName occlusionZOffset = FloatPropertyName.Create( "occlusionZOffset" );
+ public static readonly IntPropertyName occlusionTestMaxSteps = IntPropertyName.Create( "occlusionTestMaxSteps" );
+ public static readonly FloatPropertyName occlusionTestStepStride = FloatPropertyName.Create( "occlusionTestStepStride" );
+ public static readonly FloatPropertyName occlusionTestViewDependingScaleAmount = FloatPropertyName.Create( "occlusionTest_ViewDependingScaleAmount" );
+ public static readonly FloatPropertyName occlusionTestViewDependingDistance = FloatPropertyName.Create( "occlusionTest_ViewDependingDistance" );
+ public static readonly FloatPropertyName occlusionToSize = FloatPropertyName.Create( "occlusionToSize" );
+
+ }
+
+ [Tool]
+ public partial class EllipseTypeFlareMultiplyMaterial:BaseFlareMaterial
+ {
+
+
+ public readonly CustomMaterialProperty shapeScale;
+ public readonly CustomMaterialProperty radialFill;
+ public readonly CustomMaterialProperty radialFillStrength;
+ public readonly CustomMaterialProperty radialFillTile;
+ public readonly CustomMaterialProperty radialFillOffset;
+ public readonly CustomMaterialProperty radialFillRepeat;
+ public readonly CustomMaterialProperty conicFill;
+ public readonly CustomMaterialProperty conicFillStrength;
+ public readonly CustomMaterialProperty conicFillTile;
+ public readonly CustomMaterialProperty conicFillOffset;
+ public readonly CustomMaterialProperty conicFillRepeat;
+ public readonly CustomMaterialProperty fillMultiply;
+ public readonly CustomMaterialProperty fillAdd;
+ public readonly CustomMaterialProperty shapeColorize;
+ public readonly CustomMaterialProperty radialMask;
+ public readonly CustomMaterialProperty radialMaskStrength;
+ public readonly CustomMaterialProperty radialMaskTile;
+ public readonly CustomMaterialProperty radialMaskOffset;
+ public readonly CustomMaterialProperty radialMaskRepeat;
+ public readonly CustomMaterialProperty conicMask;
+ public readonly CustomMaterialProperty conicMaskStrength;
+ public readonly CustomMaterialProperty conicMaskTile;
+ public readonly CustomMaterialProperty conicMaskOffset;
+ public readonly CustomMaterialProperty conicMaskRepeat;
+ public readonly CustomMaterialProperty maskMultiply;
+ public readonly CustomMaterialProperty maskAdd;
+
+ public EllipseTypeFlareMultiplyMaterial()
+ {
+ ///*
+ Shader = EllipseTypeFlareMultiplyShader.shader.Get();
+ //*/
+
+ shapeScale = new CustomMaterialProperty( this, EllipseTypeFlareMultiplyShader.shapeScale );
+ radialFill = new CustomMaterialProperty( this, EllipseTypeFlareMultiplyShader.radialFill );
+ radialFillStrength = new CustomMaterialProperty( this, EllipseTypeFlareMultiplyShader.radialFillStrength );
+ radialFillTile = new CustomMaterialProperty( this, EllipseTypeFlareMultiplyShader.radialFillTile );
+ radialFillOffset = new CustomMaterialProperty( this, EllipseTypeFlareMultiplyShader.radialFillOffset );
+ radialFillRepeat = new CustomMaterialProperty( this, EllipseTypeFlareMultiplyShader.radialFillRepeat );
+ conicFill = new CustomMaterialProperty( this, EllipseTypeFlareMultiplyShader.conicFill );
+ conicFillStrength = new CustomMaterialProperty( this, EllipseTypeFlareMultiplyShader.conicFillStrength );
+ conicFillTile = new CustomMaterialProperty( this, EllipseTypeFlareMultiplyShader.conicFillTile );
+ conicFillOffset = new CustomMaterialProperty( this, EllipseTypeFlareMultiplyShader.conicFillOffset );
+ conicFillRepeat = new CustomMaterialProperty( this, EllipseTypeFlareMultiplyShader.conicFillRepeat );
+ fillMultiply = new CustomMaterialProperty( this, EllipseTypeFlareMultiplyShader.fillMultiply );
+ fillAdd = new CustomMaterialProperty( this, EllipseTypeFlareMultiplyShader.fillAdd );
+ shapeColorize = new CustomMaterialProperty( this, EllipseTypeFlareMultiplyShader.shapeColorize );
+ radialMask = new CustomMaterialProperty( this, EllipseTypeFlareMultiplyShader.radialMask );
+ radialMaskStrength = new CustomMaterialProperty( this, EllipseTypeFlareMultiplyShader.radialMaskStrength );
+ radialMaskTile = new CustomMaterialProperty( this, EllipseTypeFlareMultiplyShader.radialMaskTile );
+ radialMaskOffset = new CustomMaterialProperty