Compositor VFX Update
This commit is contained in:
parent
478aeece65
commit
f210eb1cd4
|
|
@ -22,7 +22,7 @@ rings = 2
|
|||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_6mbug"]
|
||||
shading_mode = 0
|
||||
albedo_color = Color(1.6287986, 1.3438833, 0.4077328, 1)
|
||||
albedo_color = Color(2.454227, 2.0297987, 0.6342527, 1)
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_g5ygy"]
|
||||
radius = 0.334
|
||||
|
|
|
|||
1027
Main/Main.tscn
1027
Main/Main.tscn
File diff suppressed because it is too large
Load Diff
|
|
@ -9,6 +9,9 @@ public partial class PostProcessingHack : Action
|
|||
[Export]
|
||||
public WorldEnvironment environment;
|
||||
|
||||
[Export]
|
||||
public CompositorEffectOwner owner;
|
||||
|
||||
protected override void _OnTrigger()
|
||||
{
|
||||
ApplyHack();
|
||||
|
|
@ -25,8 +28,32 @@ public partial class PostProcessingHack : Action
|
|||
{
|
||||
godotArray.Add( null );
|
||||
continue;
|
||||
}
|
||||
|
||||
var effect = compositorEffects[ i ];
|
||||
|
||||
if ( effect.Enabled && effect is RokojoriCompositorEffect re )
|
||||
{
|
||||
if ( re.compositorEffectID == null )
|
||||
{
|
||||
godotArray.Add( (CompositorEffect) effect.Duplicate() );
|
||||
}
|
||||
else if ( re.compositorEffectID.owner == owner )
|
||||
{
|
||||
godotArray.Add( (CompositorEffect) effect.Duplicate() );
|
||||
}
|
||||
else
|
||||
{
|
||||
godotArray.Add( compositorEffects[ i ] );
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
godotArray.Add( (CompositorEffect) compositorEffects[ i ].Duplicate() );
|
||||
else
|
||||
{
|
||||
godotArray.Add( compositorEffects[ i ] );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
environment.Compositor.CompositorEffects = godotArray;
|
||||
|
|
@ -36,6 +63,7 @@ public partial class PostProcessingHack : Action
|
|||
int retriggerFramesCount = 60 * 5;
|
||||
int framesCounter = 0;
|
||||
|
||||
|
||||
public override void _Process( double delta )
|
||||
{
|
||||
if ( ! Engine.IsEditorHint() )
|
||||
|
|
|
|||
|
|
@ -0,0 +1,8 @@
|
|||
[gd_resource type="Resource" script_class="CompositorEffectLayer" load_steps=2 format=3 uid="uid://bwhnq7w0tpgv"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://b2ik21q1iwjvo" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/CompositorEffectLayer.cs" id="1_mgeu5"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_mgeu5")
|
||||
layerName = "Action FX"
|
||||
metadata/_custom_type_script = "uid://b2ik21q1iwjvo"
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
[gd_resource type="Resource" script_class="RokojoriCompositorEffectID" load_steps=2 format=3 uid="uid://f7pv1uxpj076"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://comuvej4dr22k" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/RokojoriCompositorEffectID.cs" id="1_ohnjb"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_ohnjb")
|
||||
metadata/_custom_type_script = "uid://comuvej4dr22k"
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
[gd_resource type="Resource" script_class="RokojoriCompositorEffectID" load_steps=2 format=3 uid="uid://teubhk5euwtd"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://comuvej4dr22k" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/RokojoriCompositorEffectID.cs" id="1_b4wvu"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_b4wvu")
|
||||
metadata/_custom_type_script = "uid://comuvej4dr22k"
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
[gd_resource type="Resource" script_class="RokojoriCompositorEffectID" load_steps=2 format=3 uid="uid://c13whvtucws14"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://comuvej4dr22k" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/RokojoriCompositorEffectID.cs" id="1_203gg"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_203gg")
|
||||
metadata/_custom_type_script = "uid://comuvej4dr22k"
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
[gd_resource type="Resource" script_class="RokojoriCompositorEffectID" load_steps=2 format=3 uid="uid://b5bj0v0c15tbf"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://comuvej4dr22k" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/RokojoriCompositorEffectID.cs" id="1_ghli6"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_ghli6")
|
||||
metadata/_custom_type_script = "uid://comuvej4dr22k"
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 81 KiB |
|
|
@ -0,0 +1,41 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://v7vleatgy0k2"
|
||||
path.s3tc="res://.godot/imported/good-graphics.png-212b2dc3fb2081f0e302a7c441a1e47f.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://VFX/Compositor Effects/Star Glow/good-graphics.png"
|
||||
dest_files=["res://.godot/imported/good-graphics.png-212b2dc3fb2081f0e302a7c441a1e47f.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
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=true
|
||||
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=0
|
||||
|
|
@ -0,0 +1,356 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="1920"
|
||||
height="1080"
|
||||
viewBox="0 0 1920 1080"
|
||||
version="1.1"
|
||||
id="svg5"
|
||||
inkscape:version="1.4.3 (0d15f75, 2025-12-25)"
|
||||
sodipodi:docname="good-graphics.svg"
|
||||
xml:space="preserve"
|
||||
inkscape:export-filename="good-graphics.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview7"
|
||||
pagecolor="#333333"
|
||||
bordercolor="#404040"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#333333"
|
||||
inkscape:document-units="px"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.20890503"
|
||||
inkscape:cx="481.07986"
|
||||
inkscape:cy="859.24214"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1017"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer3" /><defs
|
||||
id="defs2"><linearGradient
|
||||
id="linearGradient2"
|
||||
inkscape:collect="never"><stop
|
||||
style="stop-color:#ff0a0a;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2" /><stop
|
||||
style="stop-color:#ffd721;stop-opacity:1;"
|
||||
offset="0.1468254"
|
||||
id="stop7" /><stop
|
||||
style="stop-color:#18ff07;stop-opacity:1;"
|
||||
offset="0.31349206"
|
||||
id="stop4" /><stop
|
||||
style="stop-color:#13e9ff;stop-opacity:1;"
|
||||
offset="0.5"
|
||||
id="stop6" /><stop
|
||||
style="stop-color:#0c03ff;stop-opacity:1;"
|
||||
offset="0.65277779"
|
||||
id="stop5" /><stop
|
||||
style="stop-color:#fb02f5;stop-opacity:1;"
|
||||
offset="0.85515875"
|
||||
id="stop8" /><stop
|
||||
style="stop-color:#ff0101;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3" /></linearGradient><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath7940"><rect
|
||||
style="fill:#333333;fill-opacity:1;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="rect7942"
|
||||
width="1440"
|
||||
height="810"
|
||||
x="0"
|
||||
y="0" /></clipPath><linearGradient
|
||||
inkscape:collect="never"
|
||||
xlink:href="#linearGradient2"
|
||||
id="linearGradient3"
|
||||
x1="461.80253"
|
||||
y1="906.27096"
|
||||
x2="1443.617"
|
||||
y2="906.27096"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(148.93226,279.248)" /></defs><g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer3"
|
||||
inkscape:label="Export"
|
||||
style="display:inline"><rect
|
||||
style="fill:#000000;fill-opacity:1;stroke-width:41.4771;stroke-linecap:round;stroke-dashoffset:3.6;paint-order:stroke fill markers"
|
||||
id="rect8"
|
||||
width="2048"
|
||||
height="2048"
|
||||
x="0"
|
||||
y="-81.235779"
|
||||
inkscape:export-filename="good-graphics.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96" /><rect
|
||||
style="opacity:0;fill:#ffffff;fill-opacity:0;stroke:none;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="rect10123"
|
||||
width="3840"
|
||||
height="2160"
|
||||
x="0"
|
||||
y="0"
|
||||
inkscape:label="default" /><g
|
||||
id="g24"
|
||||
transform="matrix(1.0002016,0,0,0.96483586,92.232538,70.212106)"><text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:113.282px;line-height:1;font-family:Arial;-inkscape-font-specification:'Arial Bold';writing-mode:lr-tb;direction:ltr;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:30;stroke-linecap:round;stroke-dasharray:none;stroke-dashoffset:3.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
x="457.83768"
|
||||
y="947.16577"
|
||||
id="text9"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan9"
|
||||
x="457.83768"
|
||||
y="947.16577"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Jost;-inkscape-font-specification:'Jost Bold';fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:30;stroke-dasharray:none;stroke-opacity:1">GOOD GRAPHICS</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:113.282px;line-height:1;font-family:Arial;-inkscape-font-specification:'Arial Bold';writing-mode:lr-tb;direction:ltr;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:20;stroke-linecap:round;stroke-dasharray:none;stroke-dashoffset:3.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
x="457.83768"
|
||||
y="947.16577"
|
||||
id="text8"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan8"
|
||||
x="457.83768"
|
||||
y="947.16577"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Jost;-inkscape-font-specification:'Jost Bold';fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:20;stroke-dasharray:none;stroke-opacity:1">GOOD GRAPHICS</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-weight:bold;font-size:113.282px;line-height:1;font-family:Arial;-inkscape-font-specification:'Arial Bold';writing-mode:lr-tb;direction:ltr;fill:#ffffff;fill-opacity:1;stroke-width:302.085;stroke-linecap:round;stroke-dasharray:none;stroke-dashoffset:3.6;paint-order:stroke fill markers"
|
||||
x="457.83768"
|
||||
y="947.16577"
|
||||
id="text1"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1"
|
||||
x="457.83768"
|
||||
y="947.16577"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Jost;-inkscape-font-specification:'Jost Bold';fill:#ffffff;fill-opacity:1;stroke-width:302.085;stroke-dasharray:none">GOOD GRAPHICS</tspan></text><path
|
||||
sodipodi:type="star"
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:40;stroke-linecap:round;stroke-dasharray:none;stroke-dashoffset:3.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path9"
|
||||
inkscape:flatsided="false"
|
||||
sodipodi:sides="4"
|
||||
sodipodi:cx="421.9949"
|
||||
sodipodi:cy="823.61176"
|
||||
sodipodi:r1="34.343334"
|
||||
sodipodi:r2="9.3554373"
|
||||
sodipodi:arg1="0.26179939"
|
||||
sodipodi:arg2="1.0471976"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 455.16802,832.50046 -28.4954,-0.78666 -13.56643,25.07107 0.78667,-28.4954 -25.07107,-13.56642 28.4954,0.78666 13.56642,-25.07107 -0.78666,28.4954 z" /><path
|
||||
sodipodi:type="star"
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:40;stroke-linecap:round;stroke-dasharray:none;stroke-dashoffset:3.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path10"
|
||||
inkscape:flatsided="false"
|
||||
sodipodi:sides="4"
|
||||
sodipodi:cx="420.29672"
|
||||
sodipodi:cy="969.6543"
|
||||
sodipodi:r1="20.448658"
|
||||
sodipodi:r2="5.5704012"
|
||||
sodipodi:arg1="0.083141232"
|
||||
sodipodi:arg2="0.8685394"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 440.67475,971.35247 -16.77987,2.55419 -5.29633,16.12566 -2.5542,-16.77987 -16.12565,-5.29632 16.77987,-2.5542 5.29632,-16.12566 2.5542,16.77987 z" /><path
|
||||
sodipodi:type="star"
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:10;stroke-linecap:round;stroke-dasharray:none;stroke-dashoffset:3.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path11"
|
||||
inkscape:flatsided="false"
|
||||
sodipodi:sides="4"
|
||||
sodipodi:cx="1464.6704"
|
||||
sodipodi:cy="854.17877"
|
||||
sodipodi:r1="19.362101"
|
||||
sodipodi:r2="5.2744131"
|
||||
sodipodi:arg1="0.66104317"
|
||||
sodipodi:arg2="1.4464413"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 1479.9539,866.06595 -14.6293,-6.65349 -12.5414,10.04983 6.6535,-14.62931 -10.0498,-12.54139 14.6293,6.6535 12.5414,-10.04984 -6.6535,14.62931 z" /><path
|
||||
sodipodi:type="star"
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:10;stroke-linecap:round;stroke-dasharray:none;stroke-dashoffset:3.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path12"
|
||||
inkscape:flatsided="false"
|
||||
sodipodi:sides="4"
|
||||
sodipodi:cx="1303.3444"
|
||||
sodipodi:cy="1008.7121"
|
||||
sodipodi:r1="17.317989"
|
||||
sodipodi:r2="4.7175784"
|
||||
sodipodi:arg1="0.19739556"
|
||||
sodipodi:arg2="0.98279372"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 1320.326,1012.1084 -14.3648,0.529 -6.0132,13.0564 -0.5289,-14.3649 -13.0564,-6.0131 14.3648,-0.529 6.0132,-13.05639 0.5289,14.36489 z" /><path
|
||||
sodipodi:type="star"
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:10;stroke-linecap:round;stroke-dasharray:none;stroke-dashoffset:3.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path13"
|
||||
inkscape:flatsided="false"
|
||||
sodipodi:sides="4"
|
||||
sodipodi:cx="913.61469"
|
||||
sodipodi:cy="982.3905"
|
||||
sodipodi:r1="18.32921"
|
||||
sodipodi:r2="4.9930444"
|
||||
sodipodi:arg1="0.23374318"
|
||||
sodipodi:arg2="1.0191413"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 931.44545,986.63592 -15.21392,0.007 -6.86227,13.57843 -0.007,-15.21396 -13.5784,-6.86226 15.21392,-0.007 6.86227,-13.57841 0.007,15.21393 z" /><path
|
||||
sodipodi:type="star"
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:10;stroke-linecap:round;stroke-dasharray:none;stroke-dashoffset:3.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path14"
|
||||
inkscape:flatsided="false"
|
||||
sodipodi:sides="4"
|
||||
sodipodi:cx="840.59344"
|
||||
sodipodi:cy="820.21545"
|
||||
sodipodi:r1="17.483715"
|
||||
sodipodi:r2="4.7627234"
|
||||
sodipodi:arg1="0.5070985"
|
||||
sodipodi:arg2="1.2924967"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 855.87696,828.7063 -13.97509,-3.91137 -9.79927,10.70404 3.91137,-13.9751 -10.70404,-9.79926 13.97509,3.91137 9.79927,-10.70404 -3.91137,13.97509 z" /><path
|
||||
sodipodi:type="star"
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:10;stroke-linecap:round;stroke-dasharray:none;stroke-dashoffset:3.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path15"
|
||||
inkscape:flatsided="false"
|
||||
sodipodi:sides="4"
|
||||
sodipodi:cx="1455.3304"
|
||||
sodipodi:cy="894.08575"
|
||||
sodipodi:r1="16.68186"
|
||||
sodipodi:r2="4.5442905"
|
||||
sodipodi:arg1="0.25732371"
|
||||
sodipodi:arg2="1.0427219"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 1471.463,898.33118 -13.8428,-0.32016 -6.5352,12.20734 0.3202,-13.84287 -12.2074,-6.53516 13.8429,0.32016 6.5352,-12.20734 -0.3202,13.84287 z" /><path
|
||||
sodipodi:type="star"
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:10;stroke-linecap:round;stroke-dasharray:none;stroke-dashoffset:3.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path16"
|
||||
inkscape:flatsided="false"
|
||||
sodipodi:sides="4"
|
||||
sodipodi:cx="1083.007"
|
||||
sodipodi:cy="845.26343"
|
||||
sodipodi:r1="13.112787"
|
||||
sodipodi:r2="3.5720427"
|
||||
sodipodi:arg1="0.5070985"
|
||||
sodipodi:arg2="1.2924967"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 1094.4696,851.63156 -10.4813,-2.93353 -7.3495,8.02804 2.9336,-10.48133 -8.0281,-7.34944 10.4813,2.93352 7.3495,-8.02803 -2.9335,10.48132 z" /><path
|
||||
sodipodi:type="star"
|
||||
style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:10;stroke-linecap:round;stroke-dasharray:none;stroke-dashoffset:3.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path17"
|
||||
inkscape:flatsided="false"
|
||||
sodipodi:sides="4"
|
||||
sodipodi:cx="1009.5612"
|
||||
sodipodi:cy="968.38062"
|
||||
sodipodi:r1="18.800076"
|
||||
sodipodi:r2="5.1213121"
|
||||
sodipodi:arg1="0.44344834"
|
||||
sodipodi:arg2="1.2288465"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 1026.5429,976.44692 -15.2644,-3.2415 -9.7836,12.15688 3.2415,-15.26438 -12.15687,-9.78361 15.26437,3.2415 9.7836,-12.15688 -3.2415,15.26438 z" /><path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:10;stroke-linecap:round;stroke-dasharray:none;stroke-dashoffset:3.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path18"
|
||||
inkscape:flatsided="false"
|
||||
sodipodi:sides="4"
|
||||
sodipodi:cx="803.32617"
|
||||
sodipodi:cy="966.03278"
|
||||
sodipodi:r1="14.16979"
|
||||
sodipodi:r2="3.8599799"
|
||||
sodipodi:arg1="0.63502674"
|
||||
sodipodi:arg2="1.4204249"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 814.73364,974.43828 -10.82922,-4.58908 -8.98375,7.59105 4.58908,-10.82923 -7.59105,-8.98375 10.82923,4.58908 8.98375,-7.59105 -4.58909,10.82923 z" /><path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:10;stroke-linecap:round;stroke-dasharray:none;stroke-dashoffset:3.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path19"
|
||||
inkscape:flatsided="false"
|
||||
sodipodi:sides="4"
|
||||
sodipodi:cx="608.79877"
|
||||
sodipodi:cy="822.53876"
|
||||
sodipodi:r1="15.057786"
|
||||
sodipodi:r2="4.1018782"
|
||||
sodipodi:arg1="0.41012734"
|
||||
sodipodi:arg2="1.1955255"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 622.60781,828.54269 -12.3056,-2.18751 -7.50738,9.99262 2.18752,-12.3056 -9.99263,-7.50738 12.30561,2.18752 7.50737,-9.99263 -2.18751,12.30561 z" /><path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:10;stroke-linecap:round;stroke-dasharray:none;stroke-dashoffset:3.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path20"
|
||||
inkscape:flatsided="false"
|
||||
sodipodi:sides="4"
|
||||
sodipodi:cx="423.87766"
|
||||
sodipodi:cy="907.79462"
|
||||
sodipodi:r1="14.131579"
|
||||
sodipodi:r2="3.849571"
|
||||
sodipodi:arg1="0.21406068"
|
||||
sodipodi:arg2="0.99945885"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 437.6867,910.79658 -11.72736,0.23621 -5.08365,10.57087 -0.23621,-11.72736 -10.57087,-5.08365 11.72736,-0.23621 5.08365,-10.57087 0.23621,11.72736 z" /><path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:10;stroke-linecap:round;stroke-dasharray:none;stroke-dashoffset:3.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path21"
|
||||
inkscape:flatsided="false"
|
||||
sodipodi:sides="4"
|
||||
sodipodi:cx="715.66876"
|
||||
sodipodi:cy="967.23352"
|
||||
sodipodi:r1="15.896255"
|
||||
sodipodi:r2="4.3302846"
|
||||
sodipodi:arg1="-0.18998829"
|
||||
sodipodi:arg2="0.59540988"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 731.27899,964.23155 -12.0251,5.4306 -0.58316,13.18159 -5.4306,-12.0251 -13.18159,-0.58315 12.0251,-5.4306 0.58316,-13.18159 5.43059,12.0251 z" /><path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:10;stroke-linecap:round;stroke-dasharray:none;stroke-dashoffset:3.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path22"
|
||||
inkscape:flatsided="false"
|
||||
sodipodi:sides="4"
|
||||
sodipodi:cx="910.79657"
|
||||
sodipodi:cy="840.5506"
|
||||
sodipodi:r1="19.894682"
|
||||
sodipodi:r2="5.4194927"
|
||||
sodipodi:arg1="0.090659887"
|
||||
sodipodi:arg2="0.87605805"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 930.60955,842.35178 -16.34351,2.36219 -5.27065,15.64961 -2.36219,-16.34351 -15.64961,-5.27065 16.34351,-2.36219 5.27065,-15.64961 2.36219,16.3435 z" /><path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:10;stroke-linecap:round;stroke-dasharray:none;stroke-dashoffset:3.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path23"
|
||||
inkscape:flatsided="false"
|
||||
sodipodi:sides="4"
|
||||
sodipodi:cx="1375.501"
|
||||
sodipodi:cy="838.14899"
|
||||
sodipodi:r1="18.171198"
|
||||
sodipodi:r2="4.9499998"
|
||||
sodipodi:arg1="0.13255153"
|
||||
sodipodi:arg2="0.9179497"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 1393.5128,840.55056 -15.0049,1.5305 -5.4085,14.07973 -1.5305,-15.00493 -14.0797,-5.40845 15.0049,-1.53049 5.4084,-14.07973 1.5305,15.00492 z" /><path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:10;stroke-linecap:round;stroke-dasharray:none;stroke-dashoffset:3.6;stroke-opacity:1;paint-order:stroke fill markers"
|
||||
id="path24"
|
||||
inkscape:flatsided="false"
|
||||
sodipodi:sides="4"
|
||||
sodipodi:cx="1463.7588"
|
||||
sodipodi:cy="938.41467"
|
||||
sodipodi:r1="10.638996"
|
||||
sodipodi:r2="2.8981595"
|
||||
sodipodi:arg1="0.28605144"
|
||||
sodipodi:arg2="1.0714496"
|
||||
inkscape:rounded="0"
|
||||
inkscape:randomized="0"
|
||||
d="m 1473.9655,941.41664 -8.8189,-0.45769 -4.3898,7.66241 0.4577,-8.8189 -7.6624,-4.38975 8.8189,0.45768 4.3898,-7.6624 -0.4577,8.81889 z" /></g></g></svg>
|
||||
|
After Width: | Height: | Size: 18 KiB |
|
|
@ -0,0 +1,43 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c3f5lu0mtsuyi"
|
||||
path="res://.godot/imported/good-graphics.svg-1661aa170016732c7e98aee6aa90bbe2.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://VFX/Compositor Effects/Star Glow/good-graphics.svg"
|
||||
dest_files=["res://.godot/imported/good-graphics.svg-1661aa170016732c7e98aee6aa90bbe2.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
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 888 KiB |
|
|
@ -0,0 +1,40 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cqaqvhmyuo56d"
|
||||
path="res://.godot/imported/star-glow-blur.png-15ff384d308fdce5022977501d7756dc.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://VFX/Compositor Effects/Star Glow/star-glow-blur.png"
|
||||
dest_files=["res://.godot/imported/star-glow-blur.png-15ff384d308fdce5022977501d7756dc.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
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 299 KiB |
|
|
@ -0,0 +1,40 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://fjpvfd54a04g"
|
||||
path="res://.godot/imported/star-glow.png-61f0458024aeba1668f3516b3db84782.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://VFX/Compositor Effects/Star Glow/star-glow.png"
|
||||
dest_files=["res://.godot/imported/star-glow.png-61f0458024aeba1668f3516b3db84782.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
|
||||
File diff suppressed because it is too large
Load Diff
|
After Width: | Height: | Size: 327 KiB |
|
|
@ -0,0 +1,43 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://du2h6vmq7085e"
|
||||
path="res://.godot/imported/star-glow.svg-fbf75c73d9067d86a237136327eba029.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://VFX/Compositor Effects/Star Glow/star-glow.svg"
|
||||
dest_files=["res://.godot/imported/star-glow.svg-fbf75c73d9067d86a237136327eba029.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
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
[gd_resource type="Resource" script_class="RokojoriCompositorEffectID" load_steps=2 format=3 uid="uid://cgdjoy7ae4trj"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://comuvej4dr22k" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/RokojoriCompositorEffectID.cs" id="1_3bivo"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_3bivo")
|
||||
metadata/_custom_type_script = "uid://comuvej4dr22k"
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
[gd_resource type="Resource" script_class="RokojoriCompositorEffectID" load_steps=2 format=3 uid="uid://behopr24y6b2t"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://comuvej4dr22k" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/RokojoriCompositorEffectID.cs" id="1_b8agv"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_b8agv")
|
||||
metadata/_custom_type_script = "uid://comuvej4dr22k"
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
[gd_resource type="Resource" script_class="RokojoriCompositorEffectID" load_steps=2 format=3 uid="uid://f7bmetg7tfqu"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://comuvej4dr22k" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/RokojoriCompositorEffectID.cs" id="1_vm63j"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_vm63j")
|
||||
metadata/_custom_type_script = "uid://comuvej4dr22k"
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
[gd_resource type="Resource" script_class="RokojoriCompositorEffectID" load_steps=2 format=3 uid="uid://d1c5ly8nkefkh"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://comuvej4dr22k" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/RokojoriCompositorEffectID.cs" id="1_lcyg7"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_lcyg7")
|
||||
metadata/_custom_type_script = "uid://comuvej4dr22k"
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
[gd_resource type="Resource" script_class="RokojoriCompositorEffectID" load_steps=2 format=3 uid="uid://cisg3vmtgp8ve"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://comuvej4dr22k" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/RokojoriCompositorEffectID.cs" id="1_q6s35"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_q6s35")
|
||||
metadata/_custom_type_script = "uid://comuvej4dr22k"
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
[gd_resource type="Resource" script_class="RokojoriCompositorEffectID" load_steps=2 format=3 uid="uid://o8lj2vksrgo4"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://comuvej4dr22k" path="res://addons/rokojori_action_library/Runtime/Rendering/Compositor/CompositorEffectReferences/RokojoriCompositorEffectID.cs" id="1_m6mna"]
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_m6mna")
|
||||
metadata/_custom_type_script = "uid://comuvej4dr22k"
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
#[compute]
|
||||
#version 450
|
||||
|
||||
// Adapted from https://john-chapman-graphics.blogspot.com/2013/02/pseudo-lens-flare.html
|
||||
|
||||
// Invocations in the (x, y, z) dimension
|
||||
layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
|
||||
|
||||
layout(rgba16f, set = 0, binding = 0) uniform image2D color_image;
|
||||
layout(rgba16f, set = 1, binding = 0) uniform image2D output_image;
|
||||
|
||||
// Our push constant
|
||||
layout(push_constant, std430) uniform Params {
|
||||
vec2 raster_size;
|
||||
float scale;
|
||||
float bias;
|
||||
float desaturation;
|
||||
} params;
|
||||
|
||||
// The code we want to execute in each invocation
|
||||
void main() {
|
||||
ivec2 uv = ivec2(gl_GlobalInvocationID.xy);
|
||||
ivec2 size = ivec2(params.raster_size);
|
||||
|
||||
if (uv.x >= size.x || uv.y >= size.y) {
|
||||
return;
|
||||
}
|
||||
|
||||
vec4 color = imageLoad(color_image, uv);
|
||||
|
||||
vec3 scale = vec3(1.0) * params.scale;
|
||||
vec3 bias = vec3(-1.0) * params.bias;
|
||||
|
||||
color.rgb = max(vec3(0.0, 0.0, 0.0), color.rgb + bias) * scale;
|
||||
|
||||
// Move each channel a bit towards the highest channel to desaturate while keeping darks
|
||||
float highest_color = max(color.r, max(color.g, color.b));
|
||||
color.rgb = mix(color.rgb, vec3(highest_color), vec3(params.desaturation));
|
||||
|
||||
imageStore(output_image, uv, color);
|
||||
}
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
[remap]
|
||||
|
||||
importer="glsl"
|
||||
type="RDShaderFile"
|
||||
uid="uid://dl8tsatdw7ylg"
|
||||
path="res://.godot/imported/downsample.glsl-440ef8d666bfe0ff38a98dba9c03351a.res"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/compositor-lens-flare/downsample.glsl"
|
||||
dest_files=["res://.godot/imported/downsample.glsl-440ef8d666bfe0ff38a98dba9c03351a.res"]
|
||||
|
||||
[params]
|
||||
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
#[compute]
|
||||
#version 450
|
||||
|
||||
// From https://github.com/BastiaanOlij/RERadialSunRays
|
||||
|
||||
// Invocations in the (x, y, z) dimension
|
||||
layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
|
||||
|
||||
layout(rgba16f, set = 0, binding = 0) uniform restrict readonly image2D input_image;
|
||||
layout(rgba16f, set = 1, binding = 0) uniform restrict writeonly image2D output_image;
|
||||
|
||||
// Our push PushConstant
|
||||
layout(push_constant, std430) uniform Params {
|
||||
vec2 image_size;
|
||||
vec2 blur_size;
|
||||
} params;
|
||||
|
||||
// Gaussian coefficients
|
||||
const int M = 16;
|
||||
const int N = 2 * M + 1;
|
||||
|
||||
// sigma = 10
|
||||
const float coeffs[N] = float[N](
|
||||
0.012318109844189502,
|
||||
0.014381474814203989,
|
||||
0.016623532195728208,
|
||||
0.019024086115486723,
|
||||
0.02155484948872149,
|
||||
0.02417948052890078,
|
||||
0.02685404941667096,
|
||||
0.0295279624870386,
|
||||
0.03214534135442581,
|
||||
0.03464682117793548,
|
||||
0.0369716985390341,
|
||||
0.039060328279673276,
|
||||
0.040856643282313365,
|
||||
0.04231065439216247,
|
||||
0.043380781642569775,
|
||||
0.044035873841196206,
|
||||
0.04425662519949865,
|
||||
0.044035873841196206,
|
||||
0.043380781642569775,
|
||||
0.04231065439216247,
|
||||
0.040856643282313365,
|
||||
0.039060328279673276,
|
||||
0.0369716985390341,
|
||||
0.03464682117793548,
|
||||
0.03214534135442581,
|
||||
0.0295279624870386,
|
||||
0.02685404941667096,
|
||||
0.02417948052890078,
|
||||
0.02155484948872149,
|
||||
0.019024086115486723,
|
||||
0.016623532195728208,
|
||||
0.014381474814203989,
|
||||
0.012318109844189502
|
||||
);
|
||||
|
||||
// The code we want to execute in each invocation
|
||||
void main() {
|
||||
vec2 uv = vec2(gl_GlobalInvocationID.xy);
|
||||
|
||||
// Just in case the effect_size size is not divisable by 8
|
||||
if ((uv.x >= params.image_size.x) || (uv.y >= params.image_size.y)) {
|
||||
return;
|
||||
}
|
||||
|
||||
vec4 blurred = vec4(0.0);
|
||||
float half_size = float(M);
|
||||
|
||||
for (int i = 0; i < N; i ++) {
|
||||
ivec2 uv_adj = ivec2(uv + (params.blur_size * (float(i) - half_size) / half_size));
|
||||
blurred += coeffs[i] * imageLoad(input_image, uv_adj).rgba;
|
||||
}
|
||||
|
||||
imageStore(output_image, ivec2(gl_GlobalInvocationID.xy), blurred);
|
||||
}
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
[remap]
|
||||
|
||||
importer="glsl"
|
||||
type="RDShaderFile"
|
||||
uid="uid://u7ma88av4j7d"
|
||||
path="res://.godot/imported/gaussian_blur.glsl-ae231c750f05d9216af6ba321c536d92.res"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/compositor-lens-flare/gaussian_blur.glsl"
|
||||
dest_files=["res://.godot/imported/gaussian_blur.glsl-ae231c750f05d9216af6ba321c536d92.res"]
|
||||
|
||||
[params]
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 448 KiB |
|
|
@ -0,0 +1,41 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://detsilp12nioo"
|
||||
path.s3tc="res://.godot/imported/lens-dirt.png-58b4cc5b654fba956851bc4f0ff8b21a.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/compositor-lens-flare/lens-dirt.png"
|
||||
dest_files=["res://.godot/imported/lens-dirt.png-58b4cc5b654fba956851bc4f0ff8b21a.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
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=true
|
||||
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=0
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
#[compute]
|
||||
#version 450
|
||||
|
||||
// Adapted from https://john-chapman-graphics.blogspot.com/2013/02/pseudo-lens-flare.html
|
||||
|
||||
// Invocations in the (x, y, z) dimension
|
||||
layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
|
||||
|
||||
layout(rgba16f, set = 0, binding = 0) uniform image2D downsampled_image;
|
||||
layout(rgba16f, set = 1, binding = 0) uniform image2D color_image;
|
||||
layout(set = 2, binding = 0) uniform sampler2D lens_color_ramp;
|
||||
|
||||
// Our push constant
|
||||
layout(push_constant, std430) uniform Params {
|
||||
vec2 raster_size;
|
||||
int ghost_count;
|
||||
float ghost_dispersal;
|
||||
float ca_scale;
|
||||
float halo_width;
|
||||
float halo_weight_power;
|
||||
} params;
|
||||
|
||||
vec3 imageDistorted(
|
||||
in ivec2 texcoord,
|
||||
in vec2 direction, // direction of distortion
|
||||
in vec3 distortion // per-channel distortion factor
|
||||
) {
|
||||
return vec3(
|
||||
imageLoad(downsampled_image, texcoord + ivec2(direction * distortion.r)).r,
|
||||
imageLoad(downsampled_image, texcoord + ivec2(direction * distortion.g)).g,
|
||||
imageLoad(downsampled_image, texcoord + ivec2(direction * distortion.b)).b
|
||||
);
|
||||
}
|
||||
|
||||
// The code we want to execute in each invocation
|
||||
void main() {
|
||||
ivec2 uv = ivec2(gl_GlobalInvocationID.xy);
|
||||
ivec2 size = ivec2(params.raster_size);
|
||||
|
||||
if (uv.x >= size.x || uv.y >= size.y) {
|
||||
return;
|
||||
}
|
||||
|
||||
vec4 color = vec4(0.0, 0.0, 0.0, 1.0);
|
||||
|
||||
vec2 resolution = params.raster_size;
|
||||
|
||||
vec2 texelSize = 1.0 / vec2(resolution);
|
||||
|
||||
vec2 uv_norm = uv / resolution;
|
||||
vec2 texcoord = vec2(1.0) - uv_norm;
|
||||
|
||||
vec2 ghost_vec = (vec2(0.5) - texcoord) * params.ghost_dispersal;
|
||||
|
||||
vec3 distortion = vec3(-1.0, 0.0, 1.0) * params.ca_scale;
|
||||
vec2 direction = normalize(ghost_vec);
|
||||
|
||||
vec3 result = vec3(0.0);
|
||||
for (int i = 0; i < params.ghost_count; ++i) {
|
||||
vec2 offset = fract(texcoord + ghost_vec * float(i));
|
||||
|
||||
float weight = length(vec2(0.5) - offset) / length(vec2(0.5));
|
||||
weight = pow(1.0 - weight, 2.0);
|
||||
|
||||
result += imageDistorted(ivec2(offset * resolution), direction, distortion).rgb * (1.0 / weight);
|
||||
}
|
||||
|
||||
// sample halo:
|
||||
vec2 haloVec = normalize(ghost_vec) * params.halo_width;
|
||||
float weight = length(vec2(0.5) - fract(texcoord + haloVec)) / length(vec2(0.5));
|
||||
weight = pow(1.0 - weight, params.halo_weight_power);
|
||||
result += imageDistorted(ivec2((texcoord + haloVec) * resolution), direction, distortion).rgb * weight;
|
||||
|
||||
result *= texture(lens_color_ramp, vec2((length(vec2(0.5) - texcoord) / length(vec2(0.5))), 0.0)).rgb;
|
||||
|
||||
color.rgb = result.rgb;
|
||||
|
||||
imageStore(color_image, uv, color);
|
||||
}
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
[remap]
|
||||
|
||||
importer="glsl"
|
||||
type="RDShaderFile"
|
||||
uid="uid://bsxtc5veahkcx"
|
||||
path="res://.godot/imported/lens.glsl-a4f9cddc8c0de1b4404d44442bcc4fdd.res"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/compositor-lens-flare/lens.glsl"
|
||||
dest_files=["res://.godot/imported/lens.glsl-a4f9cddc8c0de1b4404d44442bcc4fdd.res"]
|
||||
|
||||
[params]
|
||||
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
[gd_resource type="GradientTexture1D" load_steps=2 format=3 uid="uid://dawnxeg62rkll"]
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_d7nfd"]
|
||||
offsets = PackedFloat32Array(0, 0.08665106, 0.14051522, 0.20608899, 0.28103045, 0.33021078, 0.60421544, 0.6557377, 0.6955503, 0.86885244, 0.9086651, 0.9437939)
|
||||
colors = PackedColorArray(1, 1, 1, 1, 0.98866665, 0.83, 1, 1, 0.8, 1, 0.9833333, 1, 1, 1, 1, 1, 0.8208334, 0.57, 1, 1, 0.8833334, 0.72, 1, 1, 0.7958334, 0.51, 1, 1, 1, 0.35000002, 0.6641668, 1, 1, 0.7725, 0.35000002, 1, 1, 0.94, 0.55, 1, 1, 0.39999998, 0.8800001, 1, 1, 0.984, 0.52, 1)
|
||||
|
||||
[resource]
|
||||
gradient = SubResource("Gradient_d7nfd")
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
[gd_resource type="CompositorEffect" script_class="PostProcessShader" load_steps=6 format=3 uid="uid://cpnwkm1swg8u0"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://dawnxeg62rkll" path="res://addons/compositor-lens-flare/lens_color_ramp.tres" id="1_1jo43"]
|
||||
[ext_resource type="Texture2D" uid="uid://detsilp12nioo" path="res://addons/compositor-lens-flare/lens-dirt.png" id="1_v4on2"]
|
||||
[ext_resource type="Script" uid="uid://0dlqdm6ci0xm" path="res://addons/compositor-lens-flare/post_process_shader.gd" id="2_v4on2"]
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_v4on2"]
|
||||
offsets = PackedFloat32Array(0)
|
||||
colors = PackedColorArray(1, 1, 1, 1)
|
||||
|
||||
[sub_resource type="GradientTexture1D" id="GradientTexture1D_wwdrl"]
|
||||
gradient = SubResource("Gradient_v4on2")
|
||||
width = 1
|
||||
|
||||
[resource]
|
||||
resource_local_to_scene = false
|
||||
resource_name = ""
|
||||
enabled = true
|
||||
effect_callback_type = 4
|
||||
needs_motion_vectors = false
|
||||
needs_normal_roughness = false
|
||||
script = ExtResource("2_v4on2")
|
||||
glare_streak_count = 4
|
||||
glare_attenuation = 0.9839
|
||||
glare_samples = 2
|
||||
flare_color_ramp = ExtResource("1_1jo43")
|
||||
overlay_dirt_texture = ExtResource("1_v4on2")
|
||||
overlay_white_texture = SubResource("GradientTexture1D_wwdrl")
|
||||
metadata/_custom_type_script = "uid://0dlqdm6ci0xm"
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
#[compute]
|
||||
#version 450
|
||||
|
||||
// Invocations in the (x, y, z) dimension
|
||||
layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
|
||||
|
||||
layout(rgba16f, set = 0, binding = 0) uniform image2D overlay_image;
|
||||
layout(rgba16f, set = 1, binding = 0) uniform image2D color_image;
|
||||
layout(set = 2, binding = 0) uniform sampler2D dirt_texture;
|
||||
|
||||
// Our push PushConstant
|
||||
layout(push_constant, std430) uniform Params {
|
||||
vec2 render_size;
|
||||
float res;
|
||||
float dirt_power;
|
||||
} params;
|
||||
|
||||
// The code we want to execute in each invocation
|
||||
void main() {
|
||||
ivec2 render_size = ivec2(params.render_size.xy);
|
||||
|
||||
ivec2 uv = ivec2(gl_GlobalInvocationID.xy);
|
||||
|
||||
// Just in case the render_size size is not divisable by 8
|
||||
if ((uv.x >= render_size.x) || (uv.y >= render_size.y)) {
|
||||
return;
|
||||
}
|
||||
|
||||
float dirt = texture(dirt_texture, vec2(uv) / vec2(render_size)).r;
|
||||
|
||||
vec4 color = imageLoad(color_image, uv);
|
||||
vec4 overlay = imageLoad(overlay_image, uv) * mix(1.0, dirt, params.dirt_power);
|
||||
|
||||
color += overlay;
|
||||
|
||||
imageStore(color_image, uv, color);
|
||||
}
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
[remap]
|
||||
|
||||
importer="glsl"
|
||||
type="RDShaderFile"
|
||||
uid="uid://c1rq8g3b4ci41"
|
||||
path="res://.godot/imported/overlay.glsl-39d5630b163e8c81fa676fad2b9ace7e.res"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/compositor-lens-flare/overlay.glsl"
|
||||
dest_files=["res://.godot/imported/overlay.glsl-39d5630b163e8c81fa676fad2b9ace7e.res"]
|
||||
|
||||
[params]
|
||||
|
||||
|
|
@ -0,0 +1,543 @@
|
|||
@tool
|
||||
extends CompositorEffect
|
||||
class_name PostProcessShader
|
||||
|
||||
# Lens flare effect based on https://john-chapman-graphics.blogspot.com/2013/02/pseudo-lens-flare.html
|
||||
# References used for CompositorEffect structure:
|
||||
# - https://github.com/pink-arcana/godot-distance-field-outlines
|
||||
# - https://github.com/BastiaanOlij/RERadialSunRays
|
||||
|
||||
var context := "LENS_FLARE"
|
||||
|
||||
var downsample_shader_file = load("res://addons/compositor-lens-flare/downsample.glsl")
|
||||
var lens_shader_file = load("res://addons/compositor-lens-flare/lens.glsl")
|
||||
var blur_shader_file = load("res://addons/compositor-lens-flare/gaussian_blur.glsl")
|
||||
var overlay_shader_file = load("res://addons/compositor-lens-flare/overlay.glsl")
|
||||
var streak_shader_file = load("res://addons/compositor-lens-flare/streak.glsl")
|
||||
|
||||
@export_tool_button("Reload", "Callable") var reload_action = reload
|
||||
|
||||
@export_group("Downsample", "downsample_")
|
||||
@export_range(0.0, 5.0) var downsample_scale := 0.2
|
||||
@export_range(0.0, 5.0) var downsample_bias := 0.6
|
||||
@export_range(0.0, 1.0) var downsample_desaturation := 0.5
|
||||
|
||||
@export_group("Glare", "glare_")
|
||||
@export_range(0, 12) var glare_streak_count := 6
|
||||
@export_range(0.8, 1.0) var glare_attenuation: float = 0.975
|
||||
@export_range(1, 12) var glare_samples: int = 4
|
||||
|
||||
@export_group("Lens Flare", "flare_")
|
||||
@export var flare_color_ramp: Texture2D
|
||||
@export_range(1, 16) var flare_ghost_count := 8
|
||||
@export_range(0.0, 2.0) var flare_ghost_dispersal := 0.25
|
||||
@export_range(0.0, 10.0) var flare_chromatic_abberation_scale := 7.0
|
||||
@export_range(0.0, 1.0) var flare_halo_width := 0.4
|
||||
@export_range(1.0, 10.0) var flare_halo_weight_power := 5.0
|
||||
|
||||
@export_group("Guassian Blur", "gaussian_blur_")
|
||||
@export_range(5.0, 50.0) var gaussian_blur_size: float = 16.0
|
||||
|
||||
@export_group("Overlay", "overlay_")
|
||||
@export var overlay_dirt_texture: Texture2D
|
||||
@export var overlay_white_texture: Texture2D
|
||||
@export_range(0.0, 1.0) var overlay_dirt_texture_power := 0.6
|
||||
|
||||
var downsample_shader: RID
|
||||
var downsample_pipeline: RID
|
||||
|
||||
var lens_shader: RID
|
||||
var lens_pipeline: RID
|
||||
|
||||
var blur_shader: RID
|
||||
var blur_pipeline: RID
|
||||
|
||||
var overlay_shader: RID
|
||||
var overlay_pipeline: RID
|
||||
|
||||
var streak_shader: RID
|
||||
var streak_pipeline: RID
|
||||
|
||||
var rd: RenderingDevice
|
||||
|
||||
var mutex: Mutex = Mutex.new()
|
||||
var shader_is_dirty: bool = true
|
||||
|
||||
var clamp_linear_texture_sampler: RID
|
||||
|
||||
# Called when this resource is constructed.
|
||||
func _init():
|
||||
effect_callback_type = EFFECT_CALLBACK_TYPE_POST_TRANSPARENT
|
||||
RenderingServer.call_on_render_thread(_initialize_compute)
|
||||
|
||||
|
||||
# System notifications, we want to react on the notification that
|
||||
# alerts us we are about to be destroyed.
|
||||
func _notification(what):
|
||||
if what == NOTIFICATION_PREDELETE:
|
||||
cleanup()
|
||||
|
||||
|
||||
func cleanup():
|
||||
if lens_shader.is_valid():
|
||||
rd.free_rid(lens_shader)
|
||||
if downsample_shader.is_valid():
|
||||
rd.free_rid(downsample_shader)
|
||||
if blur_shader.is_valid():
|
||||
rd.free_rid(blur_shader)
|
||||
if overlay_shader.is_valid():
|
||||
rd.free_rid(overlay_shader)
|
||||
if streak_shader.is_valid():
|
||||
rd.free_rid(streak_shader)
|
||||
|
||||
|
||||
func reload():
|
||||
cleanup()
|
||||
|
||||
RenderingServer.call_on_render_thread(_initialize_compute)
|
||||
|
||||
|
||||
func _initialize_compute():
|
||||
rd = RenderingServer.get_rendering_device()
|
||||
|
||||
# Create samplers
|
||||
clamp_linear_texture_sampler = create_texture_sampler()
|
||||
|
||||
# Compile all shaders and create pipelines
|
||||
|
||||
var lens_shader_spirv: RDShaderSPIRV = lens_shader_file.get_spirv()
|
||||
|
||||
if lens_shader_spirv.compile_error_compute != "":
|
||||
push_error(lens_shader_spirv.compile_error_compute)
|
||||
return false
|
||||
|
||||
lens_shader = rd.shader_create_from_spirv(lens_shader_spirv)
|
||||
if not lens_shader.is_valid():
|
||||
return false
|
||||
|
||||
lens_pipeline = rd.compute_pipeline_create(lens_shader)
|
||||
|
||||
var downsample_shader_spirv: RDShaderSPIRV = downsample_shader_file.get_spirv()
|
||||
|
||||
if downsample_shader_spirv.compile_error_compute != "":
|
||||
push_error(downsample_shader_spirv.compile_error_compute)
|
||||
return false
|
||||
|
||||
downsample_shader = rd.shader_create_from_spirv(downsample_shader_spirv)
|
||||
if not downsample_shader.is_valid():
|
||||
return false
|
||||
|
||||
downsample_pipeline = rd.compute_pipeline_create(downsample_shader)
|
||||
|
||||
var blur_shader_spirv: RDShaderSPIRV = blur_shader_file.get_spirv()
|
||||
|
||||
if blur_shader_spirv.compile_error_compute != "":
|
||||
push_error(blur_shader_spirv.compile_error_compute)
|
||||
return false
|
||||
|
||||
blur_shader = rd.shader_create_from_spirv(blur_shader_spirv)
|
||||
if not blur_shader.is_valid():
|
||||
return false
|
||||
|
||||
blur_pipeline = rd.compute_pipeline_create(blur_shader)
|
||||
|
||||
var overlay_shader_spirv: RDShaderSPIRV = overlay_shader_file.get_spirv()
|
||||
|
||||
if overlay_shader_spirv.compile_error_compute != "":
|
||||
push_error(overlay_shader_spirv.compile_error_compute)
|
||||
return false
|
||||
|
||||
overlay_shader = rd.shader_create_from_spirv(overlay_shader_spirv)
|
||||
if not overlay_shader.is_valid():
|
||||
return false
|
||||
|
||||
overlay_pipeline = rd.compute_pipeline_create(overlay_shader)
|
||||
|
||||
var streak_shader_spirv: RDShaderSPIRV = streak_shader_file.get_spirv()
|
||||
|
||||
if streak_shader_spirv.compile_error_compute != "":
|
||||
push_error(streak_shader_spirv.compile_error_compute)
|
||||
return false
|
||||
|
||||
streak_shader = rd.shader_create_from_spirv(streak_shader_spirv)
|
||||
if not streak_shader.is_valid():
|
||||
return false
|
||||
|
||||
streak_pipeline = rd.compute_pipeline_create(streak_shader)
|
||||
|
||||
|
||||
func compile_shader(shader_file, shader, pipeline):
|
||||
var shader_spirv: RDShaderSPIRV = shader_file.get_spirv()
|
||||
|
||||
if shader_spirv.compile_error_compute != "":
|
||||
push_error(shader_spirv.compile_error_compute)
|
||||
return false
|
||||
|
||||
shader = rd.shader_create_from_spirv(shader_spirv)
|
||||
if not shader.is_valid():
|
||||
return false
|
||||
|
||||
pipeline = rd.compute_pipeline_create(shader)
|
||||
return pipeline.is_valid()
|
||||
|
||||
|
||||
func validate_pipelines():
|
||||
return lens_pipeline.is_valid() and downsample_pipeline.is_valid() \
|
||||
and blur_pipeline.is_valid() and streak_pipeline.is_valid() \
|
||||
and overlay_pipeline.is_valid()
|
||||
|
||||
|
||||
func get_image_uniform(image : RID, binding : int = 0) -> RDUniform:
|
||||
var uniform : RDUniform = RDUniform.new()
|
||||
uniform.uniform_type = RenderingDevice.UNIFORM_TYPE_IMAGE
|
||||
uniform.binding = binding
|
||||
uniform.add_id(image)
|
||||
|
||||
return uniform
|
||||
|
||||
|
||||
func create_texture_sampler():
|
||||
var sampler_state = RDSamplerState.new()
|
||||
sampler_state.repeat_u = RenderingDevice.SAMPLER_REPEAT_MODE_CLAMP_TO_EDGE
|
||||
sampler_state.repeat_v = RenderingDevice.SAMPLER_REPEAT_MODE_CLAMP_TO_EDGE
|
||||
sampler_state.repeat_w = RenderingDevice.SAMPLER_REPEAT_MODE_CLAMP_TO_EDGE
|
||||
sampler_state.mag_filter = RenderingDevice.SAMPLER_FILTER_LINEAR
|
||||
sampler_state.min_filter = RenderingDevice.SAMPLER_FILTER_LINEAR
|
||||
sampler_state.mip_filter = RenderingDevice.SAMPLER_FILTER_LINEAR
|
||||
|
||||
return rd.sampler_create(sampler_state)
|
||||
|
||||
|
||||
func get_texture_uniform(texture: Texture, binding : int = 0) -> RDUniform:
|
||||
var uniform : RDUniform = RDUniform.new()
|
||||
uniform.uniform_type = RenderingDevice.UNIFORM_TYPE_SAMPLER_WITH_TEXTURE
|
||||
uniform.binding = binding
|
||||
uniform.add_id(clamp_linear_texture_sampler)
|
||||
uniform.add_id(RenderingServer.texture_get_rd_texture(texture.get_rid(), true))
|
||||
|
||||
return uniform
|
||||
|
||||
|
||||
# Called by the rendering thread every frame.
|
||||
func _render_callback(p_effect_callback_type, p_render_data):
|
||||
if rd and p_effect_callback_type == EFFECT_CALLBACK_TYPE_POST_TRANSPARENT \
|
||||
and validate_pipelines():
|
||||
# Get our render scene buffers object, this gives us access to our render buffers.
|
||||
# Note that implementation differs per renderer hence the need for the cast.
|
||||
var render_scene_buffers: RenderSceneBuffersRD = p_render_data.get_render_scene_buffers()
|
||||
if render_scene_buffers:
|
||||
# Get our render size, this is the 3D render resolution!
|
||||
var size = render_scene_buffers.get_internal_size()
|
||||
if size.x == 0 and size.y == 0:
|
||||
return
|
||||
|
||||
# Compute shader groups
|
||||
var x_groups = (size.x - 1) / 8 + 1
|
||||
var y_groups = (size.y - 1) / 8 + 1
|
||||
var z_groups = 1
|
||||
|
||||
# Loop through views just in case we're doing stereo rendering.
|
||||
# No extra cost if this is mono.
|
||||
var view_count = render_scene_buffers.get_view_count()
|
||||
for view in range(view_count):
|
||||
# Get the RID for our color image, we will be reading from and writing to it.
|
||||
var input_image = render_scene_buffers.get_color_layer(view)
|
||||
|
||||
var usage_bits := RenderingDevice.TEXTURE_USAGE_SAMPLING_BIT \
|
||||
| RenderingDevice.TEXTURE_USAGE_STORAGE_BIT
|
||||
|
||||
# Create textures (or get from cache if already created)
|
||||
render_scene_buffers.create_texture(
|
||||
context,
|
||||
"Downsampled",
|
||||
RenderingDevice.DATA_FORMAT_R16G16B16A16_SFLOAT,
|
||||
usage_bits,
|
||||
RenderingDevice.TEXTURE_SAMPLES_1,
|
||||
size, 1, 1, true, false)
|
||||
render_scene_buffers.create_texture(
|
||||
context,
|
||||
"BlurLeft",
|
||||
RenderingDevice.DATA_FORMAT_R16G16B16A16_SFLOAT,
|
||||
usage_bits,
|
||||
RenderingDevice.TEXTURE_SAMPLES_1,
|
||||
size, 1, 1, true, false)
|
||||
render_scene_buffers.create_texture(
|
||||
context,
|
||||
"BlurRight",
|
||||
RenderingDevice.DATA_FORMAT_R16G16B16A16_SFLOAT,
|
||||
usage_bits,
|
||||
RenderingDevice.TEXTURE_SAMPLES_1,
|
||||
size, 1, 1, true, false)
|
||||
render_scene_buffers.create_texture(
|
||||
context,
|
||||
"Ping",
|
||||
RenderingDevice.DATA_FORMAT_R16G16B16A16_SFLOAT,
|
||||
usage_bits,
|
||||
RenderingDevice.TEXTURE_SAMPLES_1,
|
||||
size, 1, 1, true, false)
|
||||
render_scene_buffers.create_texture(
|
||||
context,
|
||||
"Pong",
|
||||
RenderingDevice.DATA_FORMAT_R16G16B16A16_SFLOAT,
|
||||
usage_bits,
|
||||
RenderingDevice.TEXTURE_SAMPLES_1,
|
||||
size, 1, 1, true, false)
|
||||
|
||||
var color_uniform: RDUniform = RDUniform.new()
|
||||
color_uniform.uniform_type = RenderingDevice.UNIFORM_TYPE_IMAGE
|
||||
color_uniform.binding = 0
|
||||
color_uniform.add_id(input_image)
|
||||
|
||||
var downsampled_uniform = get_image_uniform(render_scene_buffers.get_texture(context, "Downsampled"))
|
||||
var ping_uniform = get_image_uniform(render_scene_buffers.get_texture(context, "Ping"))
|
||||
var pong_uniform = get_image_uniform(render_scene_buffers.get_texture(context, "Pong"))
|
||||
var blur_left_uniform = get_image_uniform(render_scene_buffers.get_texture(context, "BlurLeft"))
|
||||
var blur_right_uniform = get_image_uniform(render_scene_buffers.get_texture(context, "BlurRight"))
|
||||
|
||||
# Setup done
|
||||
|
||||
# Step 1: Downsample
|
||||
# Extracts only bright bits from texture, making the rest black
|
||||
|
||||
var downsample_uniform_set_1 := UniformSetCacheRD.get_cache(lens_shader, 0, [ color_uniform ])
|
||||
var downsample_uniform_set_2 := UniformSetCacheRD.get_cache(lens_shader, 1, [ downsampled_uniform ])
|
||||
|
||||
var downsample_push_constant := PackedByteArray()
|
||||
downsample_push_constant.resize(32)
|
||||
downsample_push_constant.encode_float(0, size.x)
|
||||
downsample_push_constant.encode_float(4, size.y)
|
||||
downsample_push_constant.encode_float(8, downsample_scale)
|
||||
downsample_push_constant.encode_float(12, downsample_bias)
|
||||
downsample_push_constant.encode_float(16, downsample_desaturation)
|
||||
|
||||
var compute_list := rd.compute_list_begin()
|
||||
rd.compute_list_bind_compute_pipeline(compute_list, downsample_pipeline)
|
||||
rd.compute_list_bind_uniform_set(compute_list, downsample_uniform_set_1, 0)
|
||||
rd.compute_list_bind_uniform_set(compute_list, downsample_uniform_set_2, 1)
|
||||
rd.compute_list_set_push_constant(compute_list, downsample_push_constant, downsample_push_constant.size())
|
||||
rd.compute_list_dispatch(compute_list, x_groups, y_groups, z_groups)
|
||||
rd.compute_list_end()
|
||||
|
||||
# Step 2: Light streak
|
||||
# Blurs the texture into any number of directions and overlays the result onto the
|
||||
# color buffer
|
||||
|
||||
for angle_i in range(glare_streak_count): # hexagonal streaks
|
||||
var angle_here = ((PI * 2.0) / glare_streak_count) * angle_i
|
||||
var direction = Vector2(1.0, 0.0).rotated(angle_here)
|
||||
|
||||
# We have a lot of code duplication here instead of looping because we need to
|
||||
# ping-pong the "from" and "to" textures:
|
||||
# downsampled -> ping -> pong -> ping -> pong -> color
|
||||
# TODO: could probably be cleaned up with a lambda
|
||||
|
||||
var streak_uniform_set
|
||||
var streak_uniform_set2
|
||||
|
||||
# Iteration 1
|
||||
var streak_push_constant: PackedByteArray = PackedByteArray()
|
||||
streak_push_constant.resize(32)
|
||||
streak_push_constant.encode_float(0, size.x)
|
||||
streak_push_constant.encode_float(4, size.y)
|
||||
streak_push_constant.encode_float(8, direction.x * 1.0) # Direction
|
||||
streak_push_constant.encode_float(12, direction.y * 1.0)
|
||||
streak_push_constant.encode_s32(16, glare_samples) # Samples
|
||||
streak_push_constant.encode_float(20, glare_attenuation) # Attenuation
|
||||
streak_push_constant.encode_s32(24, 0) # Iteration
|
||||
|
||||
streak_uniform_set = UniformSetCacheRD.get_cache(streak_shader, 0, [downsampled_uniform])
|
||||
streak_uniform_set2 = UniformSetCacheRD.get_cache(streak_shader, 1, [ping_uniform])
|
||||
|
||||
compute_list = rd.compute_list_begin()
|
||||
rd.compute_list_bind_compute_pipeline(compute_list, streak_pipeline)
|
||||
rd.compute_list_bind_uniform_set(compute_list, streak_uniform_set, 0)
|
||||
rd.compute_list_bind_uniform_set(compute_list, streak_uniform_set2, 1)
|
||||
rd.compute_list_set_push_constant(compute_list, streak_push_constant, streak_push_constant.size())
|
||||
rd.compute_list_dispatch(compute_list, x_groups, y_groups, z_groups)
|
||||
rd.compute_list_end()
|
||||
|
||||
# Iteration 2
|
||||
streak_push_constant = PackedByteArray()
|
||||
streak_push_constant.resize(32)
|
||||
streak_push_constant.encode_float(0, size.x)
|
||||
streak_push_constant.encode_float(4, size.y)
|
||||
streak_push_constant.encode_float(8, direction.x * 1.0) # Direction
|
||||
streak_push_constant.encode_float(12, direction.y * 1.0)
|
||||
streak_push_constant.encode_s32(16, glare_samples) # Samples
|
||||
streak_push_constant.encode_float(20, glare_attenuation) # Attenuation
|
||||
streak_push_constant.encode_s32(24, 1) # Iteration
|
||||
|
||||
streak_uniform_set = UniformSetCacheRD.get_cache(streak_shader, 0, [ping_uniform])
|
||||
streak_uniform_set2 = UniformSetCacheRD.get_cache(streak_shader, 1, [pong_uniform])
|
||||
|
||||
compute_list = rd.compute_list_begin()
|
||||
rd.compute_list_bind_compute_pipeline(compute_list, streak_pipeline)
|
||||
rd.compute_list_bind_uniform_set(compute_list, streak_uniform_set, 0)
|
||||
rd.compute_list_bind_uniform_set(compute_list, streak_uniform_set2, 1)
|
||||
rd.compute_list_set_push_constant(compute_list, streak_push_constant, streak_push_constant.size())
|
||||
rd.compute_list_dispatch(compute_list, x_groups, y_groups, z_groups)
|
||||
rd.compute_list_end()
|
||||
|
||||
# Iteration 3
|
||||
streak_push_constant = PackedByteArray()
|
||||
streak_push_constant.resize(32)
|
||||
streak_push_constant.encode_float(0, size.x)
|
||||
streak_push_constant.encode_float(4, size.y)
|
||||
streak_push_constant.encode_float(8, direction.x * 1.0) # Direction
|
||||
streak_push_constant.encode_float(12, direction.y * 1.0)
|
||||
streak_push_constant.encode_s32(16, glare_samples) # Samples
|
||||
streak_push_constant.encode_float(20, glare_attenuation) # Attenuation
|
||||
streak_push_constant.encode_s32(24, 2) # Iteration
|
||||
|
||||
streak_uniform_set = UniformSetCacheRD.get_cache(streak_shader, 0, [pong_uniform])
|
||||
streak_uniform_set2 = UniformSetCacheRD.get_cache(streak_shader, 1, [ping_uniform])
|
||||
|
||||
compute_list = rd.compute_list_begin()
|
||||
rd.compute_list_bind_compute_pipeline(compute_list, streak_pipeline)
|
||||
rd.compute_list_bind_uniform_set(compute_list, streak_uniform_set, 0)
|
||||
rd.compute_list_bind_uniform_set(compute_list, streak_uniform_set2, 1)
|
||||
rd.compute_list_set_push_constant(compute_list, streak_push_constant, streak_push_constant.size())
|
||||
rd.compute_list_dispatch(compute_list, x_groups, y_groups, z_groups)
|
||||
rd.compute_list_end()
|
||||
|
||||
# Iteration 4
|
||||
streak_push_constant = PackedByteArray()
|
||||
streak_push_constant.resize(32)
|
||||
streak_push_constant.encode_float(0, size.x)
|
||||
streak_push_constant.encode_float(4, size.y)
|
||||
streak_push_constant.encode_float(8, direction.x * 1.0) # Direction
|
||||
streak_push_constant.encode_float(12, direction.y * 1.0)
|
||||
streak_push_constant.encode_s32(16, glare_samples) # Samples
|
||||
streak_push_constant.encode_float(20, glare_attenuation) # Attenuation
|
||||
streak_push_constant.encode_s32(24, 3) # Iteration
|
||||
|
||||
streak_uniform_set = UniformSetCacheRD.get_cache(streak_shader, 0, [ping_uniform])
|
||||
streak_uniform_set2 = UniformSetCacheRD.get_cache(streak_shader, 1, [pong_uniform])
|
||||
|
||||
compute_list = rd.compute_list_begin()
|
||||
rd.compute_list_bind_compute_pipeline(compute_list, streak_pipeline)
|
||||
rd.compute_list_bind_uniform_set(compute_list, streak_uniform_set, 0)
|
||||
rd.compute_list_bind_uniform_set(compute_list, streak_uniform_set2, 1)
|
||||
rd.compute_list_set_push_constant(compute_list, streak_push_constant, streak_push_constant.size())
|
||||
rd.compute_list_dispatch(compute_list, x_groups, y_groups, z_groups)
|
||||
rd.compute_list_end()
|
||||
|
||||
# Blur onto color
|
||||
var overlay_uniform = get_texture_uniform(overlay_white_texture)
|
||||
|
||||
var overlay_uniform_set_1 = UniformSetCacheRD.get_cache(overlay_shader, 0, [ pong_uniform ])
|
||||
var overlay_uniform_set_2 = UniformSetCacheRD.get_cache(overlay_shader, 1, [ color_uniform ])
|
||||
var overlay_uniform_set_3 = UniformSetCacheRD.get_cache(overlay_shader, 2, [ overlay_uniform ])
|
||||
|
||||
var overlay_push_constant: PackedFloat32Array = PackedFloat32Array()
|
||||
overlay_push_constant.push_back(size.x)
|
||||
overlay_push_constant.push_back(size.y)
|
||||
overlay_push_constant.push_back(0.0) # Padding
|
||||
overlay_push_constant.push_back(0.0)
|
||||
|
||||
compute_list = rd.compute_list_begin()
|
||||
rd.compute_list_bind_compute_pipeline(compute_list, overlay_pipeline)
|
||||
rd.compute_list_bind_uniform_set(compute_list, overlay_uniform_set_1, 0)
|
||||
rd.compute_list_bind_uniform_set(compute_list, overlay_uniform_set_2, 1)
|
||||
rd.compute_list_bind_uniform_set(compute_list, overlay_uniform_set_3, 2)
|
||||
rd.compute_list_set_push_constant(compute_list, overlay_push_constant.to_byte_array(), overlay_push_constant.size() * 4)
|
||||
rd.compute_list_dispatch(compute_list, x_groups, y_groups, 1)
|
||||
rd.compute_list_end()
|
||||
|
||||
# Step 3: Lens Flare
|
||||
# Create ghosts and halos from the downsampled image
|
||||
# (Note: the light streak result is not used in the lens flare processing)
|
||||
|
||||
var color_ramp_uniform = get_texture_uniform(flare_color_ramp)
|
||||
|
||||
var lens_flare_uniform_set_1 = UniformSetCacheRD.get_cache(lens_shader, 0, [ downsampled_uniform ])
|
||||
var lens_flare_uniform_set_2 = UniformSetCacheRD.get_cache(lens_shader, 1, [pong_uniform])
|
||||
var lens_flare_uniform_set_3 = UniformSetCacheRD.get_cache(lens_shader, 2, [color_ramp_uniform])
|
||||
|
||||
var lens_flare_push_constant := PackedByteArray()
|
||||
lens_flare_push_constant.resize(32)
|
||||
lens_flare_push_constant.encode_float(0, size.x)
|
||||
lens_flare_push_constant.encode_float(4, size.y)
|
||||
lens_flare_push_constant.encode_s32(8, flare_ghost_count)
|
||||
lens_flare_push_constant.encode_float(12, flare_ghost_dispersal)
|
||||
lens_flare_push_constant.encode_float(16, flare_chromatic_abberation_scale)
|
||||
lens_flare_push_constant.encode_float(20, flare_halo_width)
|
||||
lens_flare_push_constant.encode_float(24, flare_halo_weight_power)
|
||||
|
||||
# Run lens flare
|
||||
compute_list = rd.compute_list_begin()
|
||||
rd.compute_list_bind_compute_pipeline(compute_list, lens_pipeline)
|
||||
rd.compute_list_bind_uniform_set(compute_list, lens_flare_uniform_set_1, 0)
|
||||
rd.compute_list_bind_uniform_set(compute_list, lens_flare_uniform_set_2, 1)
|
||||
rd.compute_list_bind_uniform_set(compute_list, lens_flare_uniform_set_3, 2)
|
||||
rd.compute_list_set_push_constant(compute_list, lens_flare_push_constant, lens_flare_push_constant.size())
|
||||
rd.compute_list_dispatch(compute_list, x_groups, y_groups, z_groups)
|
||||
rd.compute_list_end()
|
||||
|
||||
# Step 4: Blur
|
||||
# Horizontal, then vertical blur of the lens flare result to make the ghosts less
|
||||
# sharp
|
||||
|
||||
# Horizontal pass
|
||||
var blur_push_constant: PackedFloat32Array = PackedFloat32Array()
|
||||
blur_push_constant.push_back(size.x)
|
||||
blur_push_constant.push_back(size.y)
|
||||
blur_push_constant.push_back(gaussian_blur_size)
|
||||
blur_push_constant.push_back(0.0)
|
||||
|
||||
var blur_color_uniform_set = UniformSetCacheRD.get_cache(blur_shader, 0, [ pong_uniform ])
|
||||
var blur_texture_uniform_set = UniformSetCacheRD.get_cache(blur_shader, 1, [ ping_uniform ])
|
||||
|
||||
compute_list = rd.compute_list_begin()
|
||||
rd.compute_list_bind_compute_pipeline(compute_list, blur_pipeline)
|
||||
rd.compute_list_bind_uniform_set(compute_list, blur_color_uniform_set, 0)
|
||||
rd.compute_list_bind_uniform_set(compute_list, blur_texture_uniform_set, 1)
|
||||
rd.compute_list_set_push_constant(compute_list, blur_push_constant.to_byte_array(), blur_push_constant.size() * 4)
|
||||
rd.compute_list_dispatch(compute_list, x_groups, y_groups, 1)
|
||||
rd.compute_list_end()
|
||||
|
||||
rd.draw_command_end_label()
|
||||
|
||||
# Vertical pass (using the horizontal result)
|
||||
blur_push_constant = PackedFloat32Array()
|
||||
blur_push_constant.push_back(size.x)
|
||||
blur_push_constant.push_back(size.y)
|
||||
blur_push_constant.push_back(0.0)
|
||||
blur_push_constant.push_back(gaussian_blur_size)
|
||||
|
||||
blur_color_uniform_set = UniformSetCacheRD.get_cache(blur_shader, 0, [ ping_uniform ])
|
||||
blur_texture_uniform_set = UniformSetCacheRD.get_cache(blur_shader, 1, [ pong_uniform ])
|
||||
|
||||
compute_list = rd.compute_list_begin()
|
||||
rd.compute_list_bind_compute_pipeline(compute_list, blur_pipeline)
|
||||
rd.compute_list_bind_uniform_set(compute_list, blur_color_uniform_set, 0)
|
||||
rd.compute_list_bind_uniform_set(compute_list, blur_texture_uniform_set, 1)
|
||||
rd.compute_list_set_push_constant(compute_list, blur_push_constant.to_byte_array(), blur_push_constant.size() * 4)
|
||||
rd.compute_list_dispatch(compute_list, x_groups, y_groups, 1)
|
||||
rd.compute_list_end()
|
||||
|
||||
# Step 5: Overlay
|
||||
# Blend the blurred lens flares onto the color buffer (which already includes the
|
||||
# light streaks created in step 2)
|
||||
|
||||
var overlay_uniform_set_1 = UniformSetCacheRD.get_cache(overlay_shader, 0, [ pong_uniform ])
|
||||
var overlay_uniform_set_2 = UniformSetCacheRD.get_cache(overlay_shader, 1, [ color_uniform ])
|
||||
|
||||
var dirt_uniform = get_texture_uniform(overlay_dirt_texture)
|
||||
var overlay_uniform_set_3 = UniformSetCacheRD.get_cache(overlay_shader, 2, [ dirt_uniform ])
|
||||
|
||||
var overlay_push_constant = PackedByteArray()
|
||||
overlay_push_constant.resize(16)
|
||||
overlay_push_constant.encode_float(0, size.x)
|
||||
overlay_push_constant.encode_float(4, size.y)
|
||||
overlay_push_constant.encode_float(8, 0.0) # Padding
|
||||
overlay_push_constant.encode_float(12, overlay_dirt_texture_power)
|
||||
|
||||
compute_list = rd.compute_list_begin()
|
||||
rd.compute_list_bind_compute_pipeline(compute_list, overlay_pipeline)
|
||||
rd.compute_list_bind_uniform_set(compute_list, overlay_uniform_set_1, 0)
|
||||
rd.compute_list_bind_uniform_set(compute_list, overlay_uniform_set_2, 1)
|
||||
rd.compute_list_bind_uniform_set(compute_list, overlay_uniform_set_3, 2)
|
||||
rd.compute_list_set_push_constant(compute_list, overlay_push_constant, overlay_push_constant.size())
|
||||
rd.compute_list_dispatch(compute_list, x_groups, y_groups, 1)
|
||||
rd.compute_list_end()
|
||||
|
|
@ -0,0 +1 @@
|
|||
uid://0dlqdm6ci0xm
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
#[compute]
|
||||
#version 450
|
||||
|
||||
// Adapted from https://chrisoat.com/papers/Oat-ScenePostprocessing.pdf
|
||||
|
||||
// Invocations in the (x, y, z) dimension
|
||||
layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
|
||||
|
||||
layout(rgba16f, set = 0, binding = 0) uniform image2D light_image;
|
||||
layout(rgba16f, set = 1, binding = 0) uniform image2D out_image;
|
||||
|
||||
// Our push constant
|
||||
layout(push_constant, std430) uniform Params {
|
||||
vec2 raster_size;
|
||||
vec2 streak_direction;
|
||||
int streak_samples;
|
||||
float attenuation;
|
||||
int iteration;
|
||||
} params;
|
||||
|
||||
// The code we want to execute in each invocation
|
||||
void main() {
|
||||
ivec2 uv = ivec2(gl_GlobalInvocationID.xy);
|
||||
ivec2 size = ivec2(params.raster_size);
|
||||
|
||||
if (uv.x >= size.x || uv.y >= size.y) {
|
||||
return;
|
||||
}
|
||||
|
||||
vec4 new_color = vec4(0.0, 0.0, 0.0, 1.0); //imageLoad(light_image, uv);
|
||||
|
||||
float b = pow(params.streak_samples, params.iteration);
|
||||
|
||||
for (int sample_num = 0; sample_num < params.streak_samples; sample_num++) {
|
||||
float weight = pow(params.attenuation, b * sample_num);
|
||||
|
||||
ivec2 texture_coordinates_here = uv + ivec2(params.streak_direction * b * sample_num);
|
||||
|
||||
new_color.rgb += clamp(weight, 0.0, 1.0) * imageLoad(light_image, texture_coordinates_here).rgb;
|
||||
}
|
||||
|
||||
imageStore(out_image, uv, new_color);
|
||||
}
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
[remap]
|
||||
|
||||
importer="glsl"
|
||||
type="RDShaderFile"
|
||||
uid="uid://c3wo2okvinjbs"
|
||||
path="res://.godot/imported/streak.glsl-e84466ab4d8ec552c71d8362b0bf731b.res"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://addons/compositor-lens-flare/streak.glsl"
|
||||
dest_files=["res://.godot/imported/streak.glsl-e84466ab4d8ec552c71d8362b0bf731b.res"]
|
||||
|
||||
[params]
|
||||
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit fad61c7e9b38e69e0b27457ccb6dd5c8fd242b47
|
||||
Subproject commit eff4b5e146ebc6aceb90004a52cffd3121167661
|
||||
Binary file not shown.
|
|
@ -0,0 +1,36 @@
|
|||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://b6ntdryo31qk6"
|
||||
path="res://.godot/imported/Jost-Black.ttf-85d061fda6325d4206a92df6d9c9cc4b.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/Fonts/Jost-Black.ttf"
|
||||
dest_files=["res://.godot/imported/Jost-Black.ttf-85d061fda6325d4206a92df6d9c9cc4b.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
modulate_color_glyphs=false
|
||||
hinting=1
|
||||
subpixel_positioning=4
|
||||
keep_rounding_remainders=true
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
||||
Binary file not shown.
|
|
@ -0,0 +1,36 @@
|
|||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://dlntbctqln32q"
|
||||
path="res://.godot/imported/Jost-BlackItalic.ttf-7ec340e4b2db11d19c5641feefb4c30e.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/Fonts/Jost-BlackItalic.ttf"
|
||||
dest_files=["res://.godot/imported/Jost-BlackItalic.ttf-7ec340e4b2db11d19c5641feefb4c30e.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
modulate_color_glyphs=false
|
||||
hinting=1
|
||||
subpixel_positioning=4
|
||||
keep_rounding_remainders=true
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
||||
Binary file not shown.
|
|
@ -0,0 +1,36 @@
|
|||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://co0dn0sxf3uw1"
|
||||
path="res://.godot/imported/Jost-Bold.ttf-2e448402e1def28385efdbad4776272d.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/Fonts/Jost-Bold.ttf"
|
||||
dest_files=["res://.godot/imported/Jost-Bold.ttf-2e448402e1def28385efdbad4776272d.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
modulate_color_glyphs=false
|
||||
hinting=1
|
||||
subpixel_positioning=4
|
||||
keep_rounding_remainders=true
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
||||
Binary file not shown.
|
|
@ -0,0 +1,36 @@
|
|||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://cpbmrrpkm0s26"
|
||||
path="res://.godot/imported/Jost-BoldItalic.ttf-6ebf904ee28b921dce9ebc2c7a106412.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/Fonts/Jost-BoldItalic.ttf"
|
||||
dest_files=["res://.godot/imported/Jost-BoldItalic.ttf-6ebf904ee28b921dce9ebc2c7a106412.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
modulate_color_glyphs=false
|
||||
hinting=1
|
||||
subpixel_positioning=4
|
||||
keep_rounding_remainders=true
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
||||
Binary file not shown.
|
|
@ -0,0 +1,36 @@
|
|||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://v48xitewij5b"
|
||||
path="res://.godot/imported/Jost-ExtraBold.ttf-f4cf7083119f2789880e6b362048e7b5.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/Fonts/Jost-ExtraBold.ttf"
|
||||
dest_files=["res://.godot/imported/Jost-ExtraBold.ttf-f4cf7083119f2789880e6b362048e7b5.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
modulate_color_glyphs=false
|
||||
hinting=1
|
||||
subpixel_positioning=4
|
||||
keep_rounding_remainders=true
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
||||
Binary file not shown.
|
|
@ -0,0 +1,36 @@
|
|||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://bf8vamruspl5e"
|
||||
path="res://.godot/imported/Jost-ExtraBoldItalic.ttf-8e6c26069b0af25383b312a68b662909.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/Fonts/Jost-ExtraBoldItalic.ttf"
|
||||
dest_files=["res://.godot/imported/Jost-ExtraBoldItalic.ttf-8e6c26069b0af25383b312a68b662909.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
modulate_color_glyphs=false
|
||||
hinting=1
|
||||
subpixel_positioning=4
|
||||
keep_rounding_remainders=true
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
||||
Binary file not shown.
|
|
@ -0,0 +1,36 @@
|
|||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://c03s2vo18r30l"
|
||||
path="res://.godot/imported/Jost-ExtraLight.ttf-399ca308c2872b00339a7fe1a97eec70.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/Fonts/Jost-ExtraLight.ttf"
|
||||
dest_files=["res://.godot/imported/Jost-ExtraLight.ttf-399ca308c2872b00339a7fe1a97eec70.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
modulate_color_glyphs=false
|
||||
hinting=1
|
||||
subpixel_positioning=4
|
||||
keep_rounding_remainders=true
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
||||
Binary file not shown.
|
|
@ -0,0 +1,36 @@
|
|||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://3xcegb7jxi4g"
|
||||
path="res://.godot/imported/Jost-ExtraLightItalic.ttf-b0d20f2fbe849d13296d10a1d12bf086.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/Fonts/Jost-ExtraLightItalic.ttf"
|
||||
dest_files=["res://.godot/imported/Jost-ExtraLightItalic.ttf-b0d20f2fbe849d13296d10a1d12bf086.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
modulate_color_glyphs=false
|
||||
hinting=1
|
||||
subpixel_positioning=4
|
||||
keep_rounding_remainders=true
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
||||
Binary file not shown.
|
|
@ -0,0 +1,36 @@
|
|||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://fceaei4nqm6m"
|
||||
path="res://.godot/imported/Jost-Italic.ttf-1832299fcb5f0091b0d9f2b48296d48c.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/Fonts/Jost-Italic.ttf"
|
||||
dest_files=["res://.godot/imported/Jost-Italic.ttf-1832299fcb5f0091b0d9f2b48296d48c.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
modulate_color_glyphs=false
|
||||
hinting=1
|
||||
subpixel_positioning=4
|
||||
keep_rounding_remainders=true
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
||||
Binary file not shown.
|
|
@ -0,0 +1,36 @@
|
|||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://d25mwxvy1ff1c"
|
||||
path="res://.godot/imported/Jost-Light.ttf-b309835fca0848d3bb23101df414ec2b.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/Fonts/Jost-Light.ttf"
|
||||
dest_files=["res://.godot/imported/Jost-Light.ttf-b309835fca0848d3bb23101df414ec2b.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
modulate_color_glyphs=false
|
||||
hinting=1
|
||||
subpixel_positioning=4
|
||||
keep_rounding_remainders=true
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
||||
Binary file not shown.
|
|
@ -0,0 +1,36 @@
|
|||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://77lgh7dokcf4"
|
||||
path="res://.godot/imported/Jost-LightItalic.ttf-79ba290e0e86c578341ef0a19b1bc3a4.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/Fonts/Jost-LightItalic.ttf"
|
||||
dest_files=["res://.godot/imported/Jost-LightItalic.ttf-79ba290e0e86c578341ef0a19b1bc3a4.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
modulate_color_glyphs=false
|
||||
hinting=1
|
||||
subpixel_positioning=4
|
||||
keep_rounding_remainders=true
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
||||
Binary file not shown.
|
|
@ -0,0 +1,36 @@
|
|||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://cbn0kkecpldco"
|
||||
path="res://.godot/imported/Jost-Medium.ttf-a6bc156d3c3fbd39c51e447a4969ea30.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/Fonts/Jost-Medium.ttf"
|
||||
dest_files=["res://.godot/imported/Jost-Medium.ttf-a6bc156d3c3fbd39c51e447a4969ea30.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
modulate_color_glyphs=false
|
||||
hinting=1
|
||||
subpixel_positioning=4
|
||||
keep_rounding_remainders=true
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
||||
Binary file not shown.
|
|
@ -0,0 +1,36 @@
|
|||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://cvmav67frhacb"
|
||||
path="res://.godot/imported/Jost-MediumItalic.ttf-69f7674f9cb6914f07d34bb9d02862b1.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/Fonts/Jost-MediumItalic.ttf"
|
||||
dest_files=["res://.godot/imported/Jost-MediumItalic.ttf-69f7674f9cb6914f07d34bb9d02862b1.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
modulate_color_glyphs=false
|
||||
hinting=1
|
||||
subpixel_positioning=4
|
||||
keep_rounding_remainders=true
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
||||
Binary file not shown.
|
|
@ -0,0 +1,36 @@
|
|||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://0e4pwnojjcry"
|
||||
path="res://.godot/imported/Jost-Regular.ttf-1ba1e8355be7e7075598b0d59ff64b79.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/Fonts/Jost-Regular.ttf"
|
||||
dest_files=["res://.godot/imported/Jost-Regular.ttf-1ba1e8355be7e7075598b0d59ff64b79.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
modulate_color_glyphs=false
|
||||
hinting=1
|
||||
subpixel_positioning=4
|
||||
keep_rounding_remainders=true
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
||||
Binary file not shown.
|
|
@ -0,0 +1,36 @@
|
|||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://bjyawglkdumep"
|
||||
path="res://.godot/imported/Jost-SemiBold.ttf-d5ceb9d6040d44169d788b6db772873b.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/Fonts/Jost-SemiBold.ttf"
|
||||
dest_files=["res://.godot/imported/Jost-SemiBold.ttf-d5ceb9d6040d44169d788b6db772873b.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
modulate_color_glyphs=false
|
||||
hinting=1
|
||||
subpixel_positioning=4
|
||||
keep_rounding_remainders=true
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
||||
Binary file not shown.
|
|
@ -0,0 +1,36 @@
|
|||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://c6qdoaa86ss2l"
|
||||
path="res://.godot/imported/Jost-SemiBoldItalic.ttf-f740d8a66375a9fe4ef0fa8e60a32622.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/Fonts/Jost-SemiBoldItalic.ttf"
|
||||
dest_files=["res://.godot/imported/Jost-SemiBoldItalic.ttf-f740d8a66375a9fe4ef0fa8e60a32622.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
modulate_color_glyphs=false
|
||||
hinting=1
|
||||
subpixel_positioning=4
|
||||
keep_rounding_remainders=true
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
||||
Binary file not shown.
|
|
@ -0,0 +1,36 @@
|
|||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://cyux1ymh474dd"
|
||||
path="res://.godot/imported/Jost-Thin.ttf-1609f22ce95e7054ed65fa5eccfa96ca.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/Fonts/Jost-Thin.ttf"
|
||||
dest_files=["res://.godot/imported/Jost-Thin.ttf-1609f22ce95e7054ed65fa5eccfa96ca.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
modulate_color_glyphs=false
|
||||
hinting=1
|
||||
subpixel_positioning=4
|
||||
keep_rounding_remainders=true
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
||||
Binary file not shown.
|
|
@ -0,0 +1,36 @@
|
|||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://cqq00pr53i2at"
|
||||
path="res://.godot/imported/Jost-ThinItalic.ttf-b0e7d6efe12ec4f6370bdc406dc171b8.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/Fonts/Jost-ThinItalic.ttf"
|
||||
dest_files=["res://.godot/imported/Jost-ThinItalic.ttf-b0e7d6efe12ec4f6370bdc406dc171b8.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
modulate_color_glyphs=false
|
||||
hinting=1
|
||||
subpixel_positioning=4
|
||||
keep_rounding_remainders=true
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
||||
|
|
@ -57,7 +57,6 @@ textures/decals/filter=5
|
|||
textures/light_projectors/filter=5
|
||||
environment/subsurface_scattering/subsurface_scattering_quality=3
|
||||
environment/subsurface_scattering/subsurface_scattering_scale=0.02
|
||||
anti_aliasing/quality/use_debanding=true
|
||||
|
||||
[shader_globals]
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue