Lighting.tscn 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. [gd_scene load_steps=11 format=4 uid="uid://dhxp5shmhixr3"]
  2. [ext_resource type="Script" path="res://sources/effects/Lighting.gd" id="1_75w83"]
  3. [sub_resource type="Shader" id="Shader_ypmb7"]
  4. resource_local_to_scene = true
  5. code = "shader_type canvas_item;
  6. render_mode unshaded;
  7. uniform mat4 global_transform;
  8. uniform int n_lights = 0;
  9. uniform vec4 dark_color : source_color = vec4(0.1, 0.08, 0.15, 1.0);
  10. uniform vec4 default_light_color : source_color;
  11. uniform float light_level : hint_range(0.0, 1.0) = 0.0;
  12. uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_linear_mipmap;
  13. varying vec2 world_position;
  14. #define MAX_LIGHTS 64
  15. uniform vec4 light_data[MAX_LIGHTS];
  16. uniform vec4 color_data[MAX_LIGHTS];
  17. void vertex()
  18. {
  19. world_position = (global_transform * vec4(VERTEX, 0.0, 1.0)).xy;
  20. }
  21. void fragment()
  22. {
  23. vec2 frag_position = floor(world_position);
  24. float m_value = 1.0; // 1.0 == dark, 0.0 == light
  25. vec4 light_color = default_light_color;
  26. for (int i = 0; i < n_lights; ++i)
  27. {
  28. vec4 light_instance = light_data[i];
  29. vec2 normalized_position = light_instance.xy - frag_position;
  30. normalized_position.y *= 1.3;
  31. float squared_dist = dot(normalized_position, normalized_position);
  32. float squared_radius = light_instance.w * light_instance.w;
  33. if (squared_dist < squared_radius)
  34. {
  35. float dist = squared_dist / squared_radius;
  36. float value = dist < light_instance.z ? 0.0 : 1.0/light_instance.z*(dist-light_instance.z);
  37. if (value < m_value)
  38. {
  39. vec4 new_color = color_data[i];
  40. light_color.rgb = mix(light_color.rgb, new_color.rgb, m_value);
  41. light_color.a = max(light_color.r, new_color.r);
  42. }
  43. m_value *= value;
  44. if (m_value <= 0.0)
  45. break;
  46. }
  47. }
  48. light_color.rgb = mix(light_color.rgb, dark_color.rgb, max(-0.2, (m_value - 0.5) / 0.5));
  49. vec4 ambient_color = mix(light_color, dark_color, m_value);
  50. ambient_color.a *= 1.0 - light_level;
  51. vec4 screen_color = texture(SCREEN_TEXTURE, SCREEN_UV);
  52. COLOR = screen_color * ambient_color;
  53. }
  54. "
  55. [sub_resource type="ShaderMaterial" id="ShaderMaterial_os3j6"]
  56. resource_local_to_scene = true
  57. shader = SubResource("Shader_ypmb7")
  58. shader_parameter/global_transform = null
  59. shader_parameter/n_lights = 0
  60. shader_parameter/dark_color = Color(0.1, 0.08, 0.15, 1)
  61. shader_parameter/default_light_color = Color(1, 0.878431, 0.741176, 1)
  62. shader_parameter/light_level = 0.5
  63. shader_parameter/light_data = PackedVector4Array()
  64. shader_parameter/color_data = PackedVector4Array()
  65. [sub_resource type="ShaderMaterial" id="ShaderMaterial_w6cvu"]
  66. resource_local_to_scene = true
  67. shader = SubResource("Shader_ypmb7")
  68. shader_parameter/global_transform = null
  69. shader_parameter/n_lights = 0
  70. shader_parameter/dark_color = Color(0.1, 0.08, 0.15, 1)
  71. shader_parameter/default_light_color = Color(1, 0.878431, 0.741176, 1)
  72. shader_parameter/light_level = 0.5
  73. shader_parameter/light_data = PackedVector4Array()
  74. shader_parameter/color_data = PackedVector4Array()
  75. [sub_resource type="ShaderMaterial" id="ShaderMaterial_r5sve"]
  76. resource_local_to_scene = true
  77. shader = SubResource("Shader_ypmb7")
  78. shader_parameter/global_transform = null
  79. shader_parameter/n_lights = 0
  80. shader_parameter/dark_color = Color(0.1, 0.08, 0.15, 1)
  81. shader_parameter/default_light_color = Color(1, 0.878431, 0.741176, 1)
  82. shader_parameter/light_level = 0.5
  83. shader_parameter/light_data = PackedVector4Array()
  84. shader_parameter/color_data = PackedVector4Array()
  85. [sub_resource type="ShaderMaterial" id="ShaderMaterial_2ll4b"]
  86. resource_local_to_scene = true
  87. shader = SubResource("Shader_ypmb7")
  88. shader_parameter/global_transform = null
  89. shader_parameter/n_lights = 0
  90. shader_parameter/dark_color = Color(0.1, 0.08, 0.15, 1)
  91. shader_parameter/default_light_color = Color(1, 0.878431, 0.741176, 1)
  92. shader_parameter/light_level = 0.5
  93. shader_parameter/light_data = PackedVector4Array()
  94. shader_parameter/color_data = PackedVector4Array()
  95. [sub_resource type="ShaderMaterial" id="ShaderMaterial_30lle"]
  96. resource_local_to_scene = true
  97. shader = SubResource("Shader_ypmb7")
  98. shader_parameter/global_transform = null
  99. shader_parameter/n_lights = 0
  100. shader_parameter/dark_color = Color(0.1, 0.08, 0.15, 1)
  101. shader_parameter/default_light_color = Color(1, 0.878431, 0.741176, 1)
  102. shader_parameter/light_level = 0.5
  103. shader_parameter/light_data = PackedVector4Array()
  104. shader_parameter/color_data = PackedVector4Array()
  105. [sub_resource type="ShaderMaterial" id="ShaderMaterial_68mh6"]
  106. resource_local_to_scene = true
  107. shader = SubResource("Shader_ypmb7")
  108. shader_parameter/global_transform = null
  109. shader_parameter/n_lights = 0
  110. shader_parameter/dark_color = Color(0.1, 0.08, 0.15, 1)
  111. shader_parameter/default_light_color = Color(1, 0.878431, 0.741176, 1)
  112. shader_parameter/light_level = 0.5
  113. shader_parameter/light_data = PackedVector4Array()
  114. shader_parameter/color_data = PackedVector4Array()
  115. [sub_resource type="ShaderMaterial" id="ShaderMaterial_ighdq"]
  116. resource_local_to_scene = true
  117. shader = SubResource("Shader_ypmb7")
  118. shader_parameter/global_transform = null
  119. shader_parameter/n_lights = 0
  120. shader_parameter/dark_color = Color(0.1, 0.08, 0.15, 1)
  121. shader_parameter/default_light_color = Color(1, 0.878431, 0.741176, 1)
  122. shader_parameter/light_level = 0.5
  123. shader_parameter/light_data = PackedVector4Array()
  124. shader_parameter/color_data = PackedVector4Array()
  125. [sub_resource type="ShaderMaterial" id="ShaderMaterial_ebkb4"]
  126. resource_local_to_scene = true
  127. shader = SubResource("Shader_ypmb7")
  128. shader_parameter/global_transform = null
  129. shader_parameter/n_lights = 0
  130. shader_parameter/dark_color = Color(0.1, 0.08, 0.15, 1)
  131. shader_parameter/default_light_color = Color(1, 0.878431, 0.741176, 1)
  132. shader_parameter/light_level = 0.5
  133. shader_parameter/light_data = PackedVector4Array()
  134. shader_parameter/color_data = PackedVector4Array()
  135. [node name="LightingLayer" type="CanvasLayer"]
  136. script = ExtResource("1_75w83")
  137. [node name="GridContainer" type="VBoxContainer" parent="."]
  138. anchors_preset = 15
  139. anchor_right = 1.0
  140. anchor_bottom = 1.0
  141. grow_horizontal = 2
  142. grow_vertical = 2
  143. theme_override_constants/separation = 0
  144. [node name="HBoxContainer" type="HBoxContainer" parent="GridContainer"]
  145. layout_mode = 2
  146. size_flags_vertical = 3
  147. theme_override_constants/separation = 0
  148. [node name="ColorRect" type="ColorRect" parent="GridContainer/HBoxContainer"]
  149. material = SubResource("ShaderMaterial_os3j6")
  150. layout_mode = 2
  151. size_flags_horizontal = 3
  152. size_flags_vertical = 3
  153. color = Color(0, 0, 0, 1)
  154. [node name="ColorRect2" type="ColorRect" parent="GridContainer/HBoxContainer"]
  155. material = SubResource("ShaderMaterial_w6cvu")
  156. layout_mode = 2
  157. size_flags_horizontal = 3
  158. size_flags_vertical = 3
  159. color = Color(0, 0, 0, 1)
  160. [node name="ColorRect3" type="ColorRect" parent="GridContainer/HBoxContainer"]
  161. material = SubResource("ShaderMaterial_r5sve")
  162. layout_mode = 2
  163. size_flags_horizontal = 3
  164. size_flags_vertical = 3
  165. color = Color(0, 0, 0, 1)
  166. [node name="ColorRect4" type="ColorRect" parent="GridContainer/HBoxContainer"]
  167. material = SubResource("ShaderMaterial_2ll4b")
  168. layout_mode = 2
  169. size_flags_horizontal = 3
  170. size_flags_vertical = 3
  171. color = Color(0, 0, 0, 1)
  172. [node name="HBoxContainer2" type="HBoxContainer" parent="GridContainer"]
  173. layout_mode = 2
  174. size_flags_vertical = 3
  175. theme_override_constants/separation = 0
  176. [node name="ColorRect5" type="ColorRect" parent="GridContainer/HBoxContainer2"]
  177. material = SubResource("ShaderMaterial_30lle")
  178. layout_mode = 2
  179. size_flags_horizontal = 3
  180. size_flags_vertical = 3
  181. color = Color(0, 0, 0, 1)
  182. [node name="ColorRect6" type="ColorRect" parent="GridContainer/HBoxContainer2"]
  183. material = SubResource("ShaderMaterial_68mh6")
  184. layout_mode = 2
  185. size_flags_horizontal = 3
  186. size_flags_vertical = 3
  187. color = Color(0, 0, 0, 1)
  188. [node name="ColorRect7" type="ColorRect" parent="GridContainer/HBoxContainer2"]
  189. material = SubResource("ShaderMaterial_ighdq")
  190. layout_mode = 2
  191. size_flags_horizontal = 3
  192. size_flags_vertical = 3
  193. color = Color(0, 0, 0, 1)
  194. [node name="ColorRect8" type="ColorRect" parent="GridContainer/HBoxContainer2"]
  195. material = SubResource("ShaderMaterial_ebkb4")
  196. layout_mode = 2
  197. size_flags_horizontal = 3
  198. size_flags_vertical = 3
  199. color = Color(0, 0, 0, 1)