├── .import ├── tile_tex.png-ef823001850a2809d2dfccde4dcc00ce.etc2.stex ├── tile_tex.png-ef823001850a2809d2dfccde4dcc00ce.md5 └── tile_tex.png-ef823001850a2809d2dfccde4dcc00ce.s3tc.stex ├── LICENSE ├── README.md ├── SSGI ├── SSGI.gd ├── SSGI.tscn ├── SSGI_shader.shader └── SSGI_shader.tres ├── default_env.tres ├── icon.png ├── main.tscn ├── project.godot └── tile_tex.png /.import/tile_tex.png-ef823001850a2809d2dfccde4dcc00ce.etc2.stex: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/martinsh/godot-SSGI/54bbf3df37f2d7c3f161455d5961ee39b55efa0d/.import/tile_tex.png-ef823001850a2809d2dfccde4dcc00ce.etc2.stex -------------------------------------------------------------------------------- /.import/tile_tex.png-ef823001850a2809d2dfccde4dcc00ce.md5: -------------------------------------------------------------------------------- 1 | source_md5="f146248e1d7cdaab6d86b5d79f70c3d9" 2 | dest_md5="a08760c6f0497bcfc553f069a33089e1" 3 | 4 | -------------------------------------------------------------------------------- /.import/tile_tex.png-ef823001850a2809d2dfccde4dcc00ce.s3tc.stex: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/martinsh/godot-SSGI/54bbf3df37f2d7c3f161455d5961ee39b55efa0d/.import/tile_tex.png-ef823001850a2809d2dfccde4dcc00ce.s3tc.stex -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 martinsh 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Godot SSGI 2 | 3 | ... 4 | 5 | It looks like this: 6 | 7 | # How to use it 8 | It's really easy to use in your project! Simply: 9 | 10 | 1. Download the repository as zip and extract it. 11 | 2. Copy the `SSGI` folder into the root folder of your project. 12 | 3. In the scene of your game, select your camera node, and then click the chain icon above the scene tree to instance a scene, then select the `SSGI.tscn` scene file. 13 | 4. That's all! 14 | 15 | # Limitations/Known Issues 16 | 17 | ... 18 | 19 | # License 20 | MIT 21 | -------------------------------------------------------------------------------- /SSGI/SSGI.gd: -------------------------------------------------------------------------------- 1 | tool 2 | extends MeshInstance 3 | 4 | var cam_pos_prev = Vector3() 5 | var cam_rot_prev = Quat() 6 | 7 | var hidden = false 8 | var time = 0.0 9 | 10 | func _hide_plane(): 11 | self.hide() 12 | 13 | func _show_plane(): 14 | self.show() 15 | 16 | func _process(delta): 17 | 18 | var mat = get_surface_material(0) 19 | var cam = get_parent() 20 | assert cam is Camera 21 | 22 | # Linear velocity is just difference in positions between two frames. 23 | var velocity = cam.global_transform.origin - cam_pos_prev 24 | 25 | # Angular velocity is a little more complicated, as you can see. 26 | # See https://math.stackexchange.com/questions/160908/how-to-get-angular-velocity-from-difference-orientation-quaternion-and-time 27 | var cam_rot = Quat(cam.global_transform.basis) 28 | var cam_rot_diff = cam_rot - cam_rot_prev 29 | var cam_rot_conj = conjugate(cam_rot) 30 | var ang_vel = (cam_rot_diff * 2.0) * cam_rot_conj; 31 | ang_vel = Vector3(ang_vel.x, ang_vel.y, ang_vel.z) # Convert Quat to Vector3 32 | 33 | mat.set_shader_param("linear_velocity", velocity) 34 | mat.set_shader_param("angular_velocity", ang_vel) 35 | 36 | cam_pos_prev = cam.global_transform.origin 37 | cam_rot_prev = Quat(cam.global_transform.basis) 38 | 39 | if(Input.is_key_pressed(KEY_UP)) and time > 0.5: 40 | if hidden == false: 41 | _hide_plane() 42 | hidden = true 43 | time = 0 44 | else: 45 | _show_plane() 46 | hidden = false 47 | time = 0 48 | 49 | time += delta 50 | # Calculate the conjugate of a quaternion. 51 | func conjugate(quat): 52 | return Quat(-quat.x, -quat.y, -quat.z, quat.w) 53 | -------------------------------------------------------------------------------- /SSGI/SSGI.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=4 format=2] 2 | 3 | [ext_resource path="res://SSGI/SSGI_shader.tres" type="Material" id=1] 4 | [ext_resource path="res://SSGI/SSGI.gd" type="Script" id=2] 5 | 6 | [sub_resource type="QuadMesh" id=1] 7 | 8 | size = Vector2( 40, 20 ) 9 | 10 | [node name="SSGI" type="MeshInstance" index="0"] 11 | 12 | transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -2 ) 13 | layers = 1 14 | material_override = null 15 | cast_shadow = 0 16 | extra_cull_margin = 0.0 17 | use_in_baked_light = false 18 | lod_min_distance = 0.0 19 | lod_min_hysteresis = 0.0 20 | lod_max_distance = 0.0 21 | lod_max_hysteresis = 0.0 22 | mesh = SubResource( 1 ) 23 | skeleton = NodePath("..") 24 | material/0 = ExtResource( 1 ) 25 | script = ExtResource( 2 ) 26 | _sections_unfolded = [ "Geometry", "LOD", "Transform", "Visibility", "material" ] 27 | 28 | 29 | -------------------------------------------------------------------------------- /SSGI/SSGI_shader.shader: -------------------------------------------------------------------------------- 1 | shader_type spatial; 2 | render_mode depth_test_disable, depth_draw_never, unshaded, cull_disabled; 3 | 4 | 5 | uniform int SAMPLES : hint_range(8, 128); 6 | 7 | //tweak these to your liking 8 | uniform float indirectamount : hint_range(0.0, 512.0); 9 | uniform float noiseamount : hint_range(0.0, 5.0); 10 | 11 | uniform bool noise = true; 12 | 13 | vec2 mod_dither3(vec2 u) { 14 | float noiseX = mod(u.x + u.y + mod(208. + u.x * 3.58, 13. + mod(u.y * 22.9, 9.)),7.) * .143; 15 | float noiseY = mod(u.y + u.x + mod(203. + u.y * 3.18, 12. + mod(u.x * 27.4, 8.)),6.) * .139; 16 | return vec2(noiseX, noiseY)*2.0-1.0; 17 | } 18 | 19 | vec2 dither(vec2 coord, float seed, vec2 size) { 20 | float noiseX = ((fract(1.0-(coord.x+seed*1.0)*(size.x/2.0))*0.25)+(fract((coord.y+seed*2.0)*(size.y/2.0))*0.75))*2.0-1.0; 21 | float noiseY = ((fract(1.0-(coord.x+seed*3.0)*(size.x/2.0))*0.75)+(fract((coord.y+seed*4.0)*(size.y/2.0))*0.25))*2.0-1.0; 22 | return vec2(noiseX, noiseY); 23 | } 24 | 25 | 26 | vec3 getViewPos(sampler2D tex, vec2 coord, mat4 ipm){ 27 | float depth = texture(tex, coord).r; 28 | 29 | //Turn the current pixel from ndc to world coordinates 30 | vec3 pixel_pos_ndc = vec3(coord*2.0-1.0, depth*2.0-1.0); 31 | vec4 pixel_pos_clip = ipm * vec4(pixel_pos_ndc,1.0); 32 | vec3 pixel_pos_cam = pixel_pos_clip.xyz / pixel_pos_clip.w; 33 | return pixel_pos_cam; 34 | } 35 | 36 | 37 | vec3 getViewNormal(sampler2D tex, vec2 coord, mat4 ipm) 38 | { 39 | ivec2 texSize = textureSize(tex, 0); 40 | 41 | float pW = 1.0/float(texSize.x); 42 | float pH = 1.0/float(texSize.y); 43 | 44 | vec3 p1 = getViewPos(tex, coord+vec2(pW,0.0), ipm).xyz; 45 | vec3 p2 = getViewPos(tex, coord+vec2(0.0,pH), ipm).xyz; 46 | vec3 p3 = getViewPos(tex, coord+vec2(-pW,0.0), ipm).xyz; 47 | vec3 p4 = getViewPos(tex, coord+vec2(0.0,-pH), ipm).xyz; 48 | 49 | vec3 vP = getViewPos(tex, coord, ipm); 50 | 51 | vec3 dx = vP-p1; 52 | vec3 dy = p2-vP; 53 | vec3 dx2 = p3-vP; 54 | vec3 dy2 = vP-p4; 55 | 56 | if(length(dx2)=0.0||coord.x+pW>1.0) { 57 | dx = dx2; 58 | } 59 | if(length(dy2)=0.0||coord.y+pH>1.0) { 60 | dy = dy2; 61 | } 62 | 63 | return normalize(-cross( dx , dy ).xyz); 64 | } 65 | 66 | float lenSq(vec3 vector){ 67 | return pow(vector.x, 2.0) + pow(vector.y, 2.0) + pow(vector.z, 2.0); 68 | } 69 | 70 | vec3 lightSample(sampler2D color_tex, sampler2D depth_tex, vec2 coord, mat4 ipm, vec2 lightcoord, vec3 normal, vec3 position, float n, vec2 texsize){ 71 | 72 | vec2 random = vec2(1.0); 73 | if (noise){ 74 | random = (mod_dither3((coord*texsize)+vec2(n*82.294,n*127.721)))*0.01*noiseamount; 75 | }else{ 76 | random = dither(coord, 1.0, texsize)*0.1*noiseamount; 77 | } 78 | lightcoord *= vec2(0.7); 79 | 80 | //light absolute data 81 | vec3 lightcolor = textureLod(color_tex, ((lightcoord)+random),4.0).rgb; 82 | vec3 lightnormal = getViewNormal(depth_tex, fract(lightcoord)+random, ipm).rgb; 83 | vec3 lightposition = getViewPos(depth_tex, fract(lightcoord)+random, ipm).xyz; 84 | 85 | 86 | //light variable data 87 | vec3 lightpath = lightposition - position; 88 | vec3 lightdir = normalize(lightpath); 89 | 90 | //falloff calculations 91 | float cosemit = clamp(dot(lightdir, -lightnormal), 0.0, 1.0); //emit only in one direction 92 | float coscatch = clamp(dot(lightdir, normal)*0.5+0.5, 0.0, 1.0); //recieve light from one direction 93 | float distfall = pow(lenSq(lightpath), 0.1) + 1.0; //fall off with distance 94 | 95 | return (lightcolor * cosemit * coscatch / distfall)*(length(lightposition)/20.0); 96 | } 97 | 98 | void fragment() 99 | { 100 | /* 101 | float depth = texture(DEPTH_TEXTURE, SCREEN_UV).r; 102 | 103 | //Turn the current pixel from ndc to world coordinates 104 | vec3 pixel_pos_ndc = vec3(SCREEN_UV*2.0-1.0, depth*2.0-1.0); 105 | vec4 pixel_pos_clip = INV_PROJECTION_MATRIX * vec4(pixel_pos_ndc,1.0); 106 | vec3 pixel_pos_cam = pixel_pos_clip.xyz / pixel_pos_clip.w; 107 | vec3 pixel_pos_world = (inverse(INV_CAMERA_MATRIX) * vec4(pixel_pos_cam, 1.0)).xyz; 108 | 109 | //Calculate total velocity which combines linear velocity and angular velocity 110 | vec3 cam_pos = inverse(INV_CAMERA_MATRIX)[3].xyz; //Correct 111 | vec3 r = pixel_pos_world - cam_pos; 112 | vec3 total_velocity = linear_velocity + cross(angular_velocity, r); 113 | 114 | //Offset the world pos by the total velocity, then project back to ndc coordinates 115 | vec3 pixel_prevpos_world = pixel_pos_world - total_velocity; 116 | vec3 pixel_prevpos_cam = ((INV_CAMERA_MATRIX) * vec4(pixel_prevpos_world, 1.0)).xyz; 117 | vec4 pixel_prevpos_clip = PROJECTION_MATRIX * vec4(pixel_prevpos_cam, 1.0); 118 | vec3 pixel_prevpos_ndc = pixel_prevpos_clip.xyz / pixel_prevpos_clip.w; 119 | 120 | //Calculate how much the pixel moved in ndc space 121 | vec2 pixel_diff_ndc = pixel_prevpos_ndc.xy - pixel_pos_ndc.xy; 122 | 123 | vec3 col = vec3(0.0); 124 | float counter = 0.0; 125 | for (int i = 0; i < iteration_count; i++) 126 | { 127 | vec2 offset = pixel_diff_ndc * (float(i) / float(iteration_count) - 0.5) * intensity; 128 | col += textureLod(SCREEN_TEXTURE, SCREEN_UV + offset,0.0).rgb; 129 | counter++; 130 | } 131 | */ 132 | //ALBEDO = col / counter; 133 | 134 | //fragment color data 135 | vec3 direct = textureLod(SCREEN_TEXTURE,SCREEN_UV,0.0).rgb; 136 | vec3 color = normalize(direct).rgb; 137 | vec3 indirect = vec3(0.0,0.0,0.0); 138 | float PI = 3.14159; 139 | ivec2 iTexSize = textureSize(SCREEN_TEXTURE, 0); 140 | vec2 texSize = vec2(float(iTexSize.x),float(iTexSize.y)); 141 | //fragment geometry data 142 | vec3 position = getViewPos(DEPTH_TEXTURE, SCREEN_UV, INV_PROJECTION_MATRIX); 143 | vec3 normal = getViewNormal(DEPTH_TEXTURE, SCREEN_UV, INV_PROJECTION_MATRIX); 144 | 145 | //sampling in spiral 146 | 147 | float dlong = PI*(3.0-sqrt(5.0)); 148 | float dz = 1.0/float(SAMPLES); 149 | float long = 0.0; 150 | float z = 1.0 - dz/2.0; 151 | 152 | 153 | for(int i = 0; i < SAMPLES; i++){ 154 | 155 | float r = sqrt(1.0-z); 156 | 157 | float xpoint = (cos(long)*r)*0.5+0.5; 158 | float ypoint = (sin(long)*r)*0.5+0.5; 159 | 160 | z = z - dz; 161 | long = long + dlong; 162 | 163 | indirect += lightSample(SCREEN_TEXTURE, DEPTH_TEXTURE, SCREEN_UV, INV_PROJECTION_MATRIX, vec2(xpoint, ypoint), normal, position, float(i), texSize); 164 | 165 | } 166 | 167 | 168 | ALBEDO = direct+(indirect/float(SAMPLES) * indirectamount); 169 | } -------------------------------------------------------------------------------- /SSGI/SSGI_shader.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="ShaderMaterial" load_steps=2 format=2] 2 | 3 | [ext_resource path="res://SSGI/SSGI_shader.shader" type="Shader" id=1] 4 | 5 | [resource] 6 | 7 | render_priority = -1 8 | shader = ExtResource( 1 ) 9 | shader_param/SAMPLES = 16 10 | shader_param/indirectamount = 0.7 11 | shader_param/noiseamount = 1.0 12 | shader_param/noise = true 13 | _sections_unfolded = [ "shader_param" ] 14 | 15 | -------------------------------------------------------------------------------- /default_env.tres: -------------------------------------------------------------------------------- 1 | [gd_resource type="Environment" load_steps=2 format=2] 2 | 3 | [sub_resource type="ProceduralSky" id=1] 4 | 5 | radiance_size = 4 6 | sky_top_color = Color( 0.0470588, 0.454902, 0.976471, 1 ) 7 | sky_horizon_color = Color( 0.556863, 0.823529, 0.909804, 1 ) 8 | sky_curve = 0.25 9 | sky_energy = 1.0 10 | ground_bottom_color = Color( 0.101961, 0.145098, 0.188235, 1 ) 11 | ground_horizon_color = Color( 0.482353, 0.788235, 0.952941, 1 ) 12 | ground_curve = 0.01 13 | ground_energy = 1.0 14 | sun_color = Color( 1, 1, 1, 1 ) 15 | sun_latitude = 35.0 16 | sun_longitude = 0.0 17 | sun_angle_min = 1.0 18 | sun_angle_max = 100.0 19 | sun_curve = 0.05 20 | sun_energy = 16.0 21 | texture_size = 2 22 | 23 | [resource] 24 | 25 | background_mode = 2 26 | background_sky = SubResource( 1 ) 27 | background_sky_custom_fov = 0.0 28 | background_color = Color( 0, 0, 0, 1 ) 29 | background_energy = 1.0 30 | background_canvas_max_layer = 0 31 | ambient_light_color = Color( 0, 0, 0, 1 ) 32 | ambient_light_energy = 1.0 33 | ambient_light_sky_contribution = 1.0 34 | fog_enabled = false 35 | fog_color = Color( 0.5, 0.6, 0.7, 1 ) 36 | fog_sun_color = Color( 1, 0.9, 0.7, 1 ) 37 | fog_sun_amount = 0.0 38 | fog_depth_enabled = true 39 | fog_depth_begin = 10.0 40 | fog_depth_curve = 1.0 41 | fog_transmit_enabled = false 42 | fog_transmit_curve = 1.0 43 | fog_height_enabled = false 44 | fog_height_min = 0.0 45 | fog_height_max = 100.0 46 | fog_height_curve = 1.0 47 | tonemap_mode = 0 48 | tonemap_exposure = 1.0 49 | tonemap_white = 1.0 50 | auto_exposure_enabled = false 51 | auto_exposure_scale = 0.4 52 | auto_exposure_min_luma = 0.05 53 | auto_exposure_max_luma = 8.0 54 | auto_exposure_speed = 0.5 55 | ss_reflections_enabled = false 56 | ss_reflections_max_steps = 64 57 | ss_reflections_fade_in = 0.15 58 | ss_reflections_fade_out = 2.0 59 | ss_reflections_depth_tolerance = 0.2 60 | ss_reflections_roughness = true 61 | ssao_enabled = false 62 | ssao_radius = 1.0 63 | ssao_intensity = 1.0 64 | ssao_radius2 = 0.0 65 | ssao_intensity2 = 1.0 66 | ssao_bias = 0.01 67 | ssao_light_affect = 0.0 68 | ssao_ao_channel_affect = 0.0 69 | ssao_color = Color( 0, 0, 0, 1 ) 70 | ssao_quality = 0 71 | ssao_blur = 3 72 | ssao_edge_sharpness = 4.0 73 | dof_blur_far_enabled = false 74 | dof_blur_far_distance = 10.0 75 | dof_blur_far_transition = 5.0 76 | dof_blur_far_amount = 0.1 77 | dof_blur_far_quality = 1 78 | dof_blur_near_enabled = false 79 | dof_blur_near_distance = 2.0 80 | dof_blur_near_transition = 1.0 81 | dof_blur_near_amount = 0.1 82 | dof_blur_near_quality = 1 83 | glow_enabled = false 84 | glow_levels/1 = false 85 | glow_levels/2 = false 86 | glow_levels/3 = true 87 | glow_levels/4 = false 88 | glow_levels/5 = true 89 | glow_levels/6 = false 90 | glow_levels/7 = false 91 | glow_intensity = 0.8 92 | glow_strength = 1.0 93 | glow_bloom = 0.0 94 | glow_blend_mode = 2 95 | glow_hdr_threshold = 1.0 96 | glow_hdr_scale = 2.0 97 | glow_bicubic_upscale = false 98 | adjustment_enabled = false 99 | adjustment_brightness = 1.0 100 | adjustment_contrast = 1.0 101 | adjustment_saturation = 1.0 102 | 103 | -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/martinsh/godot-SSGI/54bbf3df37f2d7c3f161455d5961ee39b55efa0d/icon.png -------------------------------------------------------------------------------- /main.tscn: -------------------------------------------------------------------------------- 1 | [gd_scene load_steps=15 format=2] 2 | 3 | [ext_resource path="res://tile_tex.png" type="Texture" id=1] 4 | [ext_resource path="res://SSGI/SSGI.tscn" type="PackedScene" id=2] 5 | 6 | [sub_resource type="Environment" id=1] 7 | 8 | background_mode = 0 9 | background_sky_custom_fov = 0.0 10 | background_color = Color( 0, 0, 0, 1 ) 11 | background_energy = 0.0 12 | background_canvas_max_layer = 0 13 | ambient_light_color = Color( 0.800781, 0.800781, 0.800781, 1 ) 14 | ambient_light_energy = 0.01 15 | ambient_light_sky_contribution = 1.0 16 | fog_enabled = false 17 | fog_color = Color( 0.626361, 0.729196, 0.832031, 1 ) 18 | fog_sun_color = Color( 1, 0.9, 0.7, 1 ) 19 | fog_sun_amount = 0.0 20 | fog_depth_enabled = true 21 | fog_depth_begin = 54.1 22 | fog_depth_curve = 0.000166753 23 | fog_transmit_enabled = false 24 | fog_transmit_curve = 1.0 25 | fog_height_enabled = false 26 | fog_height_min = 0.0 27 | fog_height_max = 100.0 28 | fog_height_curve = 1.0 29 | tonemap_mode = 0 30 | tonemap_exposure = 0.35 31 | tonemap_white = 1.0 32 | auto_exposure_enabled = false 33 | auto_exposure_scale = 0.4 34 | auto_exposure_min_luma = 0.05 35 | auto_exposure_max_luma = 8.0 36 | auto_exposure_speed = 0.5 37 | ss_reflections_enabled = false 38 | ss_reflections_max_steps = 64 39 | ss_reflections_fade_in = 0.15 40 | ss_reflections_fade_out = 2.0 41 | ss_reflections_depth_tolerance = 0.2 42 | ss_reflections_roughness = true 43 | ssao_enabled = false 44 | ssao_radius = 4.1 45 | ssao_intensity = 67.5 46 | ssao_radius2 = 0.0 47 | ssao_intensity2 = 1.0 48 | ssao_bias = 0.01 49 | ssao_light_affect = 0.0 50 | ssao_ao_channel_affect = 0.0 51 | ssao_color = Color( 0, 0, 0, 1 ) 52 | ssao_quality = 0 53 | ssao_blur = 3 54 | ssao_edge_sharpness = 4.0 55 | dof_blur_far_enabled = false 56 | dof_blur_far_distance = 10.0 57 | dof_blur_far_transition = 5.0 58 | dof_blur_far_amount = 0.1 59 | dof_blur_far_quality = 1 60 | dof_blur_near_enabled = false 61 | dof_blur_near_distance = 2.0 62 | dof_blur_near_transition = 1.0 63 | dof_blur_near_amount = 0.1 64 | dof_blur_near_quality = 1 65 | glow_enabled = false 66 | glow_levels/1 = false 67 | glow_levels/2 = false 68 | glow_levels/3 = true 69 | glow_levels/4 = false 70 | glow_levels/5 = true 71 | glow_levels/6 = false 72 | glow_levels/7 = false 73 | glow_intensity = 0.8 74 | glow_strength = 1.0 75 | glow_bloom = 0.0 76 | glow_blend_mode = 1 77 | glow_hdr_threshold = 1.0 78 | glow_hdr_scale = 2.0 79 | glow_bicubic_upscale = false 80 | adjustment_enabled = false 81 | adjustment_brightness = 1.0 82 | adjustment_contrast = 1.0 83 | adjustment_saturation = 1.0 84 | _sections_unfolded = [ "Ambient Light", "Auto Exposure", "Background", "Fog", "Glow", "SS Reflections", "SSAO", "Tonemap" ] 85 | 86 | [sub_resource type="CubeMesh" id=2] 87 | 88 | custom_aabb = AABB( 0, 0, 0, 0, 0, 0 ) 89 | flip_faces = false 90 | size = Vector3( 2, 2, 2 ) 91 | subdivide_width = 0 92 | subdivide_height = 0 93 | subdivide_depth = 0 94 | 95 | [sub_resource type="SpatialMaterial" id=3] 96 | 97 | render_priority = 0 98 | flags_transparent = false 99 | flags_unshaded = false 100 | flags_vertex_lighting = false 101 | flags_no_depth_test = false 102 | flags_use_point_size = false 103 | flags_world_triplanar = false 104 | flags_fixed_size = false 105 | flags_albedo_tex_force_srgb = false 106 | flags_do_not_receive_shadows = false 107 | flags_disable_ambient_light = false 108 | flags_ensure_correct_normals = false 109 | vertex_color_use_as_albedo = false 110 | vertex_color_is_srgb = false 111 | params_diffuse_mode = 0 112 | params_specular_mode = 0 113 | params_blend_mode = 0 114 | params_cull_mode = 0 115 | params_depth_draw_mode = 0 116 | params_line_width = 1.0 117 | params_point_size = 1.0 118 | params_billboard_mode = 0 119 | params_billboard_keep_scale = false 120 | params_grow = false 121 | params_use_alpha_scissor = false 122 | albedo_color = Color( 1, 0, 0, 1 ) 123 | metallic = 0.0 124 | metallic_specular = 0.5 125 | metallic_texture_channel = 0 126 | roughness = 1.0 127 | roughness_texture_channel = 0 128 | emission_enabled = false 129 | normal_enabled = false 130 | rim_enabled = false 131 | clearcoat_enabled = false 132 | anisotropy_enabled = false 133 | ao_enabled = false 134 | depth_enabled = false 135 | subsurf_scatter_enabled = false 136 | transmission_enabled = false 137 | refraction_enabled = false 138 | detail_enabled = false 139 | uv1_scale = Vector3( 1, 1, 1 ) 140 | uv1_offset = Vector3( 0, 0, 0 ) 141 | uv1_triplanar = false 142 | uv1_triplanar_sharpness = 1.0 143 | uv2_scale = Vector3( 1, 1, 1 ) 144 | uv2_offset = Vector3( 0, 0, 0 ) 145 | uv2_triplanar = false 146 | uv2_triplanar_sharpness = 1.0 147 | proximity_fade_enable = false 148 | distance_fade_mode = 0 149 | _sections_unfolded = [ "Albedo", "Parameters" ] 150 | 151 | [sub_resource type="SpatialMaterial" id=4] 152 | 153 | render_priority = 0 154 | flags_transparent = false 155 | flags_unshaded = false 156 | flags_vertex_lighting = false 157 | flags_no_depth_test = false 158 | flags_use_point_size = false 159 | flags_world_triplanar = false 160 | flags_fixed_size = false 161 | flags_albedo_tex_force_srgb = false 162 | flags_do_not_receive_shadows = false 163 | flags_disable_ambient_light = false 164 | flags_ensure_correct_normals = false 165 | vertex_color_use_as_albedo = false 166 | vertex_color_is_srgb = false 167 | params_diffuse_mode = 0 168 | params_specular_mode = 0 169 | params_blend_mode = 0 170 | params_cull_mode = 0 171 | params_depth_draw_mode = 0 172 | params_line_width = 1.0 173 | params_point_size = 1.0 174 | params_billboard_mode = 0 175 | params_billboard_keep_scale = false 176 | params_grow = false 177 | params_use_alpha_scissor = false 178 | albedo_color = Color( 1, 1, 1, 1 ) 179 | metallic = 0.0 180 | metallic_specular = 0.5 181 | metallic_texture_channel = 0 182 | roughness = 1.0 183 | roughness_texture_channel = 0 184 | emission_enabled = false 185 | normal_enabled = false 186 | rim_enabled = false 187 | clearcoat_enabled = false 188 | anisotropy_enabled = false 189 | ao_enabled = false 190 | depth_enabled = false 191 | subsurf_scatter_enabled = false 192 | transmission_enabled = false 193 | refraction_enabled = false 194 | detail_enabled = false 195 | uv1_scale = Vector3( 1, 1, 1 ) 196 | uv1_offset = Vector3( 0, 0, 0 ) 197 | uv1_triplanar = false 198 | uv1_triplanar_sharpness = 1.0 199 | uv2_scale = Vector3( 1, 1, 1 ) 200 | uv2_offset = Vector3( 0, 0, 0 ) 201 | uv2_triplanar = false 202 | uv2_triplanar_sharpness = 1.0 203 | proximity_fade_enable = false 204 | distance_fade_mode = 0 205 | 206 | [sub_resource type="SpatialMaterial" id=5] 207 | 208 | render_priority = 0 209 | flags_transparent = false 210 | flags_unshaded = false 211 | flags_vertex_lighting = false 212 | flags_no_depth_test = false 213 | flags_use_point_size = false 214 | flags_world_triplanar = false 215 | flags_fixed_size = false 216 | flags_albedo_tex_force_srgb = false 217 | flags_do_not_receive_shadows = false 218 | flags_disable_ambient_light = false 219 | flags_ensure_correct_normals = false 220 | vertex_color_use_as_albedo = false 221 | vertex_color_is_srgb = false 222 | params_diffuse_mode = 0 223 | params_specular_mode = 0 224 | params_blend_mode = 0 225 | params_cull_mode = 0 226 | params_depth_draw_mode = 0 227 | params_line_width = 1.0 228 | params_point_size = 1.0 229 | params_billboard_mode = 0 230 | params_billboard_keep_scale = false 231 | params_grow = false 232 | params_use_alpha_scissor = false 233 | albedo_color = Color( 0, 0.462745, 1, 1 ) 234 | metallic = 0.0 235 | metallic_specular = 0.5 236 | metallic_texture_channel = 0 237 | roughness = 1.0 238 | roughness_texture_channel = 0 239 | emission_enabled = false 240 | normal_enabled = false 241 | rim_enabled = false 242 | clearcoat_enabled = false 243 | anisotropy_enabled = false 244 | ao_enabled = false 245 | depth_enabled = false 246 | subsurf_scatter_enabled = false 247 | transmission_enabled = false 248 | refraction_enabled = false 249 | detail_enabled = false 250 | uv1_scale = Vector3( 1, 1, 1 ) 251 | uv1_offset = Vector3( 0, 0, 0 ) 252 | uv1_triplanar = false 253 | uv1_triplanar_sharpness = 1.0 254 | uv2_scale = Vector3( 1, 1, 1 ) 255 | uv2_offset = Vector3( 0, 0, 0 ) 256 | uv2_triplanar = false 257 | uv2_triplanar_sharpness = 1.0 258 | proximity_fade_enable = false 259 | distance_fade_mode = 0 260 | _sections_unfolded = [ "Albedo" ] 261 | 262 | [sub_resource type="SpatialMaterial" id=6] 263 | 264 | render_priority = 0 265 | flags_transparent = false 266 | flags_unshaded = false 267 | flags_vertex_lighting = false 268 | flags_no_depth_test = false 269 | flags_use_point_size = false 270 | flags_world_triplanar = false 271 | flags_fixed_size = false 272 | flags_albedo_tex_force_srgb = false 273 | flags_do_not_receive_shadows = false 274 | flags_disable_ambient_light = false 275 | flags_ensure_correct_normals = false 276 | vertex_color_use_as_albedo = false 277 | vertex_color_is_srgb = false 278 | params_diffuse_mode = 0 279 | params_specular_mode = 0 280 | params_blend_mode = 0 281 | params_cull_mode = 0 282 | params_depth_draw_mode = 0 283 | params_line_width = 1.0 284 | params_point_size = 1.0 285 | params_billboard_mode = 0 286 | params_billboard_keep_scale = false 287 | params_grow = false 288 | params_use_alpha_scissor = false 289 | albedo_color = Color( 0.054902, 0.721569, 0, 1 ) 290 | metallic = 0.0 291 | metallic_specular = 0.5 292 | metallic_texture_channel = 0 293 | roughness = 1.0 294 | roughness_texture_channel = 0 295 | emission_enabled = false 296 | normal_enabled = false 297 | rim_enabled = false 298 | clearcoat_enabled = false 299 | anisotropy_enabled = false 300 | ao_enabled = false 301 | depth_enabled = false 302 | subsurf_scatter_enabled = false 303 | transmission_enabled = false 304 | refraction_enabled = false 305 | detail_enabled = false 306 | uv1_scale = Vector3( 1, 1, 1 ) 307 | uv1_offset = Vector3( 0, 0, 0 ) 308 | uv1_triplanar = false 309 | uv1_triplanar_sharpness = 1.0 310 | uv2_scale = Vector3( 1, 1, 1 ) 311 | uv2_offset = Vector3( 0, 0, 0 ) 312 | uv2_triplanar = false 313 | uv2_triplanar_sharpness = 1.0 314 | proximity_fade_enable = false 315 | distance_fade_mode = 0 316 | _sections_unfolded = [ "Albedo", "Metallic" ] 317 | 318 | [sub_resource type="CubeMesh" id=7] 319 | 320 | custom_aabb = AABB( 0, 0, 0, 0, 0, 0 ) 321 | flip_faces = false 322 | size = Vector3( 100, 100, 100 ) 323 | subdivide_width = 0 324 | subdivide_height = 0 325 | subdivide_depth = 0 326 | 327 | [sub_resource type="SpatialMaterial" id=8] 328 | 329 | render_priority = 0 330 | flags_transparent = false 331 | flags_unshaded = false 332 | flags_vertex_lighting = false 333 | flags_no_depth_test = false 334 | flags_use_point_size = false 335 | flags_world_triplanar = false 336 | flags_fixed_size = false 337 | flags_albedo_tex_force_srgb = false 338 | flags_do_not_receive_shadows = false 339 | flags_disable_ambient_light = false 340 | flags_ensure_correct_normals = false 341 | vertex_color_use_as_albedo = false 342 | vertex_color_is_srgb = false 343 | params_diffuse_mode = 0 344 | params_specular_mode = 0 345 | params_blend_mode = 0 346 | params_cull_mode = 1 347 | params_depth_draw_mode = 0 348 | params_line_width = 1.0 349 | params_point_size = 1.0 350 | params_billboard_mode = 0 351 | params_billboard_keep_scale = false 352 | params_grow = false 353 | params_use_alpha_scissor = false 354 | albedo_color = Color( 1, 1, 1, 1 ) 355 | albedo_texture = ExtResource( 1 ) 356 | metallic = 0.0 357 | metallic_specular = 0.5 358 | metallic_texture_channel = 0 359 | roughness = 0.0 360 | roughness_texture_channel = 0 361 | emission_enabled = false 362 | normal_enabled = false 363 | rim_enabled = false 364 | clearcoat_enabled = false 365 | anisotropy_enabled = false 366 | ao_enabled = false 367 | depth_enabled = false 368 | subsurf_scatter_enabled = false 369 | transmission_enabled = false 370 | refraction_enabled = false 371 | detail_enabled = false 372 | uv1_scale = Vector3( 0.1, 0.1, 0.1 ) 373 | uv1_offset = Vector3( 0, 0, 0 ) 374 | uv1_triplanar = true 375 | uv1_triplanar_sharpness = 1.0 376 | uv2_scale = Vector3( 1, 1, 1 ) 377 | uv2_offset = Vector3( 0, 0, 0 ) 378 | uv2_triplanar = false 379 | uv2_triplanar_sharpness = 1.0 380 | proximity_fade_enable = false 381 | distance_fade_mode = 0 382 | _sections_unfolded = [ "Albedo", "Flags", "Parameters", "UV1", "Vertex Color" ] 383 | 384 | [sub_resource type="Animation" id=9] 385 | 386 | length = 58.0 387 | loop = true 388 | step = 0.1 389 | tracks/0/type = "value" 390 | tracks/0/path = NodePath("cam:translation") 391 | tracks/0/interp = 2 392 | tracks/0/loop_wrap = true 393 | tracks/0/imported = false 394 | tracks/0/enabled = true 395 | tracks/0/keys = { 396 | "times": PoolRealArray( 0, 5, 10, 15, 20, 25, 29.2512 ), 397 | "transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1 ), 398 | "update": 0, 399 | "values": [ Vector3( 0, 0, 0 ), Vector3( 5, 0, 0 ), Vector3( 5, 0, 5 ), Vector3( 5, 40, 5 ), Vector3( 5, -15, 5 ), Vector3( 0, -50, 5 ), Vector3( -0.237464, -48.0414, 4.65558 ) ] 400 | } 401 | tracks/1/type = "value" 402 | tracks/1/path = NodePath("cam:rotation_degrees") 403 | tracks/1/interp = 2 404 | tracks/1/loop_wrap = true 405 | tracks/1/imported = false 406 | tracks/1/enabled = true 407 | tracks/1/keys = { 408 | "times": PoolRealArray( 0, 5, 10, 15, 20, 25, 30, 35, 40, 48.5, 57 ), 409 | "transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), 410 | "update": 0, 411 | "values": [ Vector3( 1.9e-005, 0, 90 ), Vector3( 0, 0, 0 ), Vector3( 90, 0, 0 ), Vector3( 90, 0, 0 ), Vector3( 90, 0, 0 ), Vector3( 90, 180, 0 ), Vector3( 90, 180, 0 ), Vector3( 1.9e-005, 0, 90 ), Vector3( 0, 0, 90 ), Vector3( 360, 0, 90 ), Vector3( 0, 0, 90 ) ] 412 | } 413 | 414 | [sub_resource type="ParticlesMaterial" id=10] 415 | 416 | render_priority = 0 417 | trail_divisor = 1 418 | emission_shape = 2 419 | emission_box_extents = Vector3( 50.04, 50.0603, 50.02 ) 420 | flag_align_y = false 421 | flag_rotate_y = false 422 | flag_disable_z = false 423 | spread = 180.0 424 | flatness = 0.0 425 | gravity = Vector3( 0, 0, 0 ) 426 | initial_velocity = 0.0 427 | initial_velocity_random = 0.0 428 | angular_velocity = 0.0 429 | angular_velocity_random = 0.0 430 | linear_accel = 0.0 431 | linear_accel_random = 0.0 432 | radial_accel = 0.0 433 | radial_accel_random = 0.0 434 | tangential_accel = 0.0 435 | tangential_accel_random = 0.0 436 | damping = 0.0 437 | damping_random = 0.0 438 | angle = 0.0 439 | angle_random = 0.0 440 | scale = 1.0 441 | scale_random = 0.0 442 | color = Color( 1, 1, 1, 1 ) 443 | hue_variation = 0.0 444 | hue_variation_random = 0.0 445 | anim_speed = 0.0 446 | anim_speed_random = 0.0 447 | anim_offset = 0.0 448 | anim_offset_random = 0.0 449 | anim_loop = false 450 | _sections_unfolded = [ "Emission Shape", "Gravity", "Initial Velocity", "Linear Accel", "Spread", "Trail" ] 451 | 452 | [sub_resource type="SpatialMaterial" id=11] 453 | 454 | render_priority = 0 455 | flags_transparent = false 456 | flags_unshaded = false 457 | flags_vertex_lighting = false 458 | flags_no_depth_test = false 459 | flags_use_point_size = false 460 | flags_world_triplanar = false 461 | flags_fixed_size = false 462 | flags_albedo_tex_force_srgb = false 463 | flags_do_not_receive_shadows = false 464 | flags_disable_ambient_light = false 465 | flags_ensure_correct_normals = false 466 | vertex_color_use_as_albedo = false 467 | vertex_color_is_srgb = false 468 | params_diffuse_mode = 0 469 | params_specular_mode = 0 470 | params_blend_mode = 0 471 | params_cull_mode = 0 472 | params_depth_draw_mode = 0 473 | params_line_width = 1.0 474 | params_point_size = 1.0 475 | params_billboard_mode = 0 476 | params_billboard_keep_scale = false 477 | params_grow = false 478 | params_use_alpha_scissor = false 479 | albedo_color = Color( 1, 1, 1, 1 ) 480 | albedo_texture = ExtResource( 1 ) 481 | metallic = 0.0 482 | metallic_specular = 0.5 483 | metallic_texture_channel = 0 484 | roughness = 0.0 485 | roughness_texture_channel = 0 486 | emission_enabled = false 487 | normal_enabled = false 488 | rim_enabled = false 489 | clearcoat_enabled = false 490 | anisotropy_enabled = false 491 | ao_enabled = false 492 | depth_enabled = false 493 | subsurf_scatter_enabled = false 494 | transmission_enabled = false 495 | refraction_enabled = false 496 | detail_enabled = false 497 | uv1_scale = Vector3( 1, 1, 1 ) 498 | uv1_offset = Vector3( 0, 0, 0 ) 499 | uv1_triplanar = true 500 | uv1_triplanar_sharpness = 1.0 501 | uv2_scale = Vector3( 1, 1, 1 ) 502 | uv2_offset = Vector3( 0, 0, 0 ) 503 | uv2_triplanar = false 504 | uv2_triplanar_sharpness = 1.0 505 | proximity_fade_enable = false 506 | distance_fade_mode = 0 507 | _sections_unfolded = [ "Albedo", "Emission", "UV1" ] 508 | 509 | [sub_resource type="SphereMesh" id=12] 510 | 511 | material = SubResource( 11 ) 512 | custom_aabb = AABB( 0, 0, 0, 0, 0, 0 ) 513 | flip_faces = false 514 | radius = 1.0 515 | height = 2.0 516 | radial_segments = 32 517 | rings = 16 518 | is_hemisphere = false 519 | 520 | [node name="main" type="WorldEnvironment"] 521 | environment = SubResource( 1 ) 522 | _sections_unfolded = [ "environment", "material" ] 523 | 524 | [node name="MeshInstance" type="MeshInstance" parent="."] 525 | transform = Transform( 21.4455, 0, 0, 0, 41.7, 0, 0, 0, 1, 11.888, -5.92067, 46.4377 ) 526 | layers = 1 527 | material_override = null 528 | cast_shadow = 1 529 | extra_cull_margin = 0.0 530 | use_in_baked_light = false 531 | lod_min_distance = 0.0 532 | lod_min_hysteresis = 0.0 533 | lod_max_distance = 0.0 534 | lod_max_hysteresis = 0.0 535 | mesh = SubResource( 2 ) 536 | skeleton = NodePath("..") 537 | material/0 = SubResource( 3 ) 538 | _sections_unfolded = [ "material" ] 539 | 540 | [node name="MeshInstance4" type="MeshInstance" parent="."] 541 | transform = Transform( 4, 0, 0, 0, 4, 0, 0, 0, 4, -5.67538, -5.92067, 42.7838 ) 542 | layers = 1 543 | material_override = null 544 | cast_shadow = 1 545 | extra_cull_margin = 0.0 546 | use_in_baked_light = false 547 | lod_min_distance = 0.0 548 | lod_min_hysteresis = 0.0 549 | lod_max_distance = 0.0 550 | lod_max_hysteresis = 0.0 551 | mesh = SubResource( 2 ) 552 | skeleton = NodePath("..") 553 | material/0 = SubResource( 4 ) 554 | _sections_unfolded = [ "Matrix", "Transform", "material" ] 555 | 556 | [node name="MeshInstance5" type="MeshInstance" parent="."] 557 | transform = Transform( 4, 0, 0, 0, 4, 0, 0, 0, 4, 32.6164, 18.2852, 42.7838 ) 558 | layers = 1 559 | material_override = null 560 | cast_shadow = 1 561 | extra_cull_margin = 0.0 562 | use_in_baked_light = false 563 | lod_min_distance = 0.0 564 | lod_min_hysteresis = 0.0 565 | lod_max_distance = 0.0 566 | lod_max_hysteresis = 0.0 567 | mesh = SubResource( 2 ) 568 | skeleton = NodePath("..") 569 | material/0 = SubResource( 4 ) 570 | _sections_unfolded = [ "Matrix", "Transform", "material" ] 571 | 572 | [node name="MeshInstance6" type="MeshInstance" parent="."] 573 | transform = Transform( 4, 0, 0, 0, 4, 0, 0, 0, 4, -32.5229, -45.1786, -27.6973 ) 574 | layers = 1 575 | material_override = null 576 | cast_shadow = 1 577 | extra_cull_margin = 0.0 578 | use_in_baked_light = false 579 | lod_min_distance = 0.0 580 | lod_min_hysteresis = 0.0 581 | lod_max_distance = 0.0 582 | lod_max_hysteresis = 0.0 583 | mesh = SubResource( 2 ) 584 | skeleton = NodePath("..") 585 | material/0 = SubResource( 4 ) 586 | _sections_unfolded = [ "Matrix", "Transform", "material" ] 587 | 588 | [node name="MeshInstance7" type="MeshInstance" parent="."] 589 | transform = Transform( 4, 0, 0, 0, 4, 0, 0, 0, 4, -1.63818, 45.372, -4.36645 ) 590 | layers = 1 591 | material_override = null 592 | cast_shadow = 1 593 | extra_cull_margin = 0.0 594 | use_in_baked_light = false 595 | lod_min_distance = 0.0 596 | lod_min_hysteresis = 0.0 597 | lod_max_distance = 0.0 598 | lod_max_hysteresis = 0.0 599 | mesh = SubResource( 2 ) 600 | skeleton = NodePath("..") 601 | material/0 = SubResource( 4 ) 602 | _sections_unfolded = [ "Matrix", "Transform", "material" ] 603 | 604 | [node name="MeshInstance8" type="MeshInstance" parent="."] 605 | transform = Transform( 4, 0, 0, 0, 4, 0, 0, 0, 4, -1.63818, 22.9629, -48.6952 ) 606 | layers = 1 607 | material_override = null 608 | cast_shadow = 1 609 | extra_cull_margin = 0.0 610 | use_in_baked_light = false 611 | lod_min_distance = 0.0 612 | lod_min_hysteresis = 0.0 613 | lod_max_distance = 0.0 614 | lod_max_hysteresis = 0.0 615 | mesh = SubResource( 2 ) 616 | skeleton = NodePath("..") 617 | material/0 = SubResource( 4 ) 618 | _sections_unfolded = [ "Matrix", "Transform", "material" ] 619 | 620 | [node name="MeshInstance9" type="MeshInstance" parent="."] 621 | transform = Transform( 4, 0, 0, 0, 4, 0, 0, 0, 4, -48.0861, 16.0027, -11.2592 ) 622 | layers = 1 623 | material_override = null 624 | cast_shadow = 1 625 | extra_cull_margin = 0.0 626 | use_in_baked_light = false 627 | lod_min_distance = 0.0 628 | lod_min_hysteresis = 0.0 629 | lod_max_distance = 0.0 630 | lod_max_hysteresis = 0.0 631 | mesh = SubResource( 2 ) 632 | skeleton = NodePath("..") 633 | material/0 = SubResource( 4 ) 634 | _sections_unfolded = [ "Matrix", "Transform", "material" ] 635 | 636 | [node name="MeshInstance10" type="MeshInstance" parent="."] 637 | transform = Transform( 4, 0, 0, 0, 4, 0, 0, 0, 4, -48.0861, -12.1311, 22.3497 ) 638 | layers = 1 639 | material_override = null 640 | cast_shadow = 1 641 | extra_cull_margin = 0.0 642 | use_in_baked_light = false 643 | lod_min_distance = 0.0 644 | lod_min_hysteresis = 0.0 645 | lod_max_distance = 0.0 646 | lod_max_hysteresis = 0.0 647 | mesh = SubResource( 2 ) 648 | skeleton = NodePath("..") 649 | material/0 = SubResource( 4 ) 650 | _sections_unfolded = [ "Matrix", "Transform", "material" ] 651 | 652 | [node name="MeshInstance2" type="MeshInstance" parent="."] 653 | transform = Transform( 21.4455, 0, 0, 0, -1.82277e-006, -1, 0, 41.7, -4.37114e-008, -11.3381, -50.7989, -10.2173 ) 654 | layers = 1 655 | material_override = null 656 | cast_shadow = 1 657 | extra_cull_margin = 0.0 658 | use_in_baked_light = false 659 | lod_min_distance = 0.0 660 | lod_min_hysteresis = 0.0 661 | lod_max_distance = 0.0 662 | lod_max_hysteresis = 0.0 663 | mesh = SubResource( 2 ) 664 | skeleton = NodePath("..") 665 | material/0 = SubResource( 5 ) 666 | _sections_unfolded = [ "material" ] 667 | 668 | [node name="MeshInstance3" type="MeshInstance" parent="."] 669 | transform = Transform( 21.4455, 0, 0, 0, -1.82277e-006, -1, 0, 41.7, -4.37114e-008, 10.4291, 49.8114, -10.2173 ) 670 | layers = 1 671 | material_override = null 672 | cast_shadow = 1 673 | extra_cull_margin = 0.0 674 | use_in_baked_light = false 675 | lod_min_distance = 0.0 676 | lod_min_hysteresis = 0.0 677 | lod_max_distance = 0.0 678 | lod_max_hysteresis = 0.0 679 | mesh = SubResource( 2 ) 680 | skeleton = NodePath("..") 681 | material/0 = SubResource( 6 ) 682 | _sections_unfolded = [ "material" ] 683 | 684 | [node name="floor" type="MeshInstance" parent="."] 685 | layers = 1 686 | material_override = null 687 | cast_shadow = 1 688 | extra_cull_margin = 0.0 689 | use_in_baked_light = false 690 | lod_min_distance = 0.0 691 | lod_min_hysteresis = 0.0 692 | lod_max_distance = 0.0 693 | lod_max_hysteresis = 0.0 694 | mesh = SubResource( 7 ) 695 | skeleton = NodePath("..") 696 | material/0 = SubResource( 8 ) 697 | _sections_unfolded = [ "material" ] 698 | 699 | [node name="anim" type="AnimationPlayer" parent="."] 700 | root_node = NodePath("..") 701 | autoplay = "cam_move" 702 | playback_process_mode = 1 703 | playback_default_blend_time = 0.0 704 | playback_speed = 1.0 705 | anims/cam_move = SubResource( 9 ) 706 | blend_times = [ ] 707 | _sections_unfolded = [ "Playback Options" ] 708 | 709 | [node name="cam" type="Camera" parent="."] 710 | transform = Transform( -4.37114e-008, -1, 0, 1, -4.37114e-008, 0, 0, 0, 1, 0, 0, 0 ) 711 | keep_aspect = 1 712 | cull_mask = 1048575 713 | environment = null 714 | h_offset = 0.0 715 | v_offset = 0.0 716 | doppler_tracking = 0 717 | projection = 0 718 | current = false 719 | fov = 62.3 720 | size = 19.79 721 | near = 1.0 722 | far = 200.0 723 | _sections_unfolded = [ "Transform" ] 724 | 725 | [node name="SSGI" parent="cam" instance=ExtResource( 2 )] 726 | transform = Transform( 1, -5.82077e-010, 0, -3.49246e-010, 1, -5.82077e-011, -2.27374e-013, 5.82077e-011, 1, 0.196377, 0.353607, -2.0002 ) 727 | 728 | [node name="SpotLight" type="SpotLight" parent="cam"] 729 | transform = Transform( 1, 0, -1.13687e-013, -2.32831e-010, 1, -5.82077e-011, 1.13687e-013, 1.16415e-010, 1, 1.19209e-007, -0.000141323, -0.238377 ) 730 | layers = 1 731 | light_color = Color( 1, 1, 1, 1 ) 732 | light_energy = 3.0 733 | light_indirect_energy = 1.0 734 | light_negative = false 735 | light_specular = 0.5 736 | light_bake_mode = 1 737 | light_cull_mask = -1 738 | shadow_enabled = false 739 | shadow_color = Color( 0, 0, 0, 1 ) 740 | shadow_bias = 0.15 741 | shadow_contact = 0.0 742 | shadow_reverse_cull_face = false 743 | editor_only = false 744 | spot_range = 102.668 745 | spot_attenuation = 1.68179 746 | spot_angle = 27.2 747 | spot_angle_attenuation = 0.420448 748 | _sections_unfolded = [ "Light", "Spot" ] 749 | 750 | [node name="particles" type="Particles" parent="."] 751 | transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -1.10788, 1.41057, -3.10205 ) 752 | layers = 1 753 | material_override = null 754 | cast_shadow = 1 755 | extra_cull_margin = 0.0 756 | use_in_baked_light = false 757 | lod_min_distance = 0.0 758 | lod_min_hysteresis = 0.0 759 | lod_max_distance = 0.0 760 | lod_max_hysteresis = 0.0 761 | emitting = true 762 | amount = 4000 763 | lifetime = 15.0 764 | one_shot = false 765 | preprocess = 100.0 766 | speed_scale = 0.1 767 | explosiveness = 0.0 768 | randomness = 0.0 769 | fixed_fps = 0 770 | fract_delta = true 771 | visibility_aabb = AABB( -400, -400, -400, 800, 800, 800 ) 772 | local_coords = true 773 | draw_order = 0 774 | process_material = SubResource( 10 ) 775 | draw_passes = 1 776 | draw_pass_1 = SubResource( 12 ) 777 | _sections_unfolded = [ "Draw Passes", "Drawing", "Process Material", "Time", "draw_pass_1", "process_material" ] 778 | 779 | -------------------------------------------------------------------------------- /project.godot: -------------------------------------------------------------------------------- 1 | ; Engine configuration file. 2 | ; It's best edited using the editor UI and not directly, 3 | ; since the parameters that go here are not all obvious. 4 | ; 5 | ; Format: 6 | ; [section] ; section goes between [] 7 | ; param=value ; assign values to parameters 8 | 9 | config_version=4 10 | 11 | _global_script_classes=[ ] 12 | _global_script_class_icons={ 13 | 14 | } 15 | 16 | [application] 17 | 18 | config/name="SSGI" 19 | run/main_scene="res://main.tscn" 20 | config/icon="res://icon.png" 21 | 22 | [display] 23 | 24 | window/size/fullscreen=true 25 | window/vsync/use_vsync=false 26 | 27 | [rendering] 28 | 29 | quality/filters/msaa=2 30 | environment/default_environment="res://default_env.tres" 31 | -------------------------------------------------------------------------------- /tile_tex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/martinsh/godot-SSGI/54bbf3df37f2d7c3f161455d5961ee39b55efa0d/tile_tex.png --------------------------------------------------------------------------------