Added shadow on all objects outside the canvas.

This commit is contained in:
Mono 2021-12-05 11:21:58 +01:00
parent 68d8e00922
commit 79228c9462
8 changed files with 89 additions and 36 deletions

View File

@ -4,4 +4,4 @@
[resource]
script = ExtResource( 1 )
aspect_ratio = Vector2( 13.252, 10.607 )
aspect_ratio = Vector2( 16.291, 11.644 )

View File

@ -38,7 +38,7 @@ shader = SubResource( 1 )
shader_param/albedo = Color( 0.768627, 0.231373, 0.231373, 1 )
shader_param/ha = null
[sub_resource type="Image" id=20]
[sub_resource type="Image" id=17]
data = {
"data": PoolByteArray( 0, 0, 128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 154, 153, 25, 62, 0, 0, 0, 0, 0, 0, 128, 62, 0, 0, 0, 0, 154, 153, 25, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 154, 153, 25, 190, 0, 0, 0, 0, 0, 0, 128, 62, 0, 0, 0, 0, 154, 153, 25, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63 ),
"format": "RGBAFloat",
@ -50,7 +50,7 @@ data = {
[sub_resource type="ImageTexture" id=16]
flags = 0
flags = 0
image = SubResource( 20 )
image = SubResource( 17 )
size = Vector2( 8, 1 )
[sub_resource type="CapsuleMesh" id=5]
@ -105,7 +105,7 @@ void fragment() {
ALBEDO = texture(table, UV).rgb;
}"
[sub_resource type="Image" id=21]
[sub_resource type="Image" id=18]
data = {
"data": PoolByteArray( 0, 0, 128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 154, 153, 25, 62, 0, 0, 0, 0, 0, 0, 128, 62, 0, 0, 0, 0, 154, 153, 25, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63, 0, 0, 128, 62, 0, 0, 0, 0, 0, 0, 0, 0, 154, 153, 25, 190, 0, 0, 0, 0, 0, 0, 128, 62, 0, 0, 0, 0, 154, 153, 25, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63 ),
"format": "RGBAFloat",
@ -117,12 +117,12 @@ data = {
[sub_resource type="ImageTexture" id=19]
flags = 0
flags = 0
image = SubResource( 21 )
image = SubResource( 18 )
size = Vector2( 8, 1 )
[sub_resource type="ShaderMaterial" id=7]
shader = SubResource( 6 )
shader_param/canvas_transform = Basis( 0.0194222, -0.293236, -1.35872, -0.545418, -0.0361252, 0.406385, 0, 0, 1 )
shader_param/canvas_transform = Basis( 0.486942, -0.0451413, -0.453712, -0.0795491, -0.858099, 0.370417, 0, 0, 1 )
shader_param/table = SubResource( 19 )
[sub_resource type="QuadMesh" id=8]
@ -186,7 +186,7 @@ visible = false
opacity = 0.15
texture = ExtResource( 3 )
[node name="CSGBox" type="CSGMesh" parent="." groups=["ListenForTransformUpdate"]]
[node name="CSGBox" type="CSGMesh" parent="." groups=["ListenForSpatialTransform"]]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.401247, 0.829002, -0.735263 )
mesh = SubResource( 5 )
material = SubResource( 7 )

View File

@ -12,9 +12,7 @@ var tool_context: SummerDayToolContext # Provided by plugin root.
func _ready():
tool_context.canvas_state = canvas_state
canvas_state.connect("view_transform_changed",
$Render/BackgroundLayer/EmptyCanvasLayer, "_on_view_transform_changed")
canvas_state.connect("clip_space_view_transform_changed",
self, "_on_clip_space_view_transform_changed")
self, "_on_view_transform_changed")
func _gui_input(event):
@ -32,8 +30,9 @@ func _on_SummerDay_scene_changed(new_scene):
canvas_state.update_fill_transform(scene)
scene.connect("aspect_ratio_changed",
self, "_on_scene_aspect_ratio_changed")
canvas_state.connect("canvas_polygon_changed",
self, "_on_canvas_polygon_changed")
$Render/Label.text = str(scene) + "\n" + str(scene.aspect_ratio)
$Render/BackgroundLayer/EmptyCanvasLayer.update_size(scene)
canvas_state.update_fill_transform(scene)
@ -44,19 +43,30 @@ func _on_Canvas_resized():
func _on_scene_aspect_ratio_changed(new_aspect_ratio):
$Render/BackgroundLayer/EmptyCanvasLayer.update_size(scene)
canvas_state.update_fill_transform(scene)
func _on_clip_space_view_transform_changed(new_transform):
var listeners = get_tree().get_nodes_in_group("ListenForTransformUpdate")
for i in listeners:
func _on_view_transform_changed(canvas_transform, spatial_transform):
var canvas_transform_listeners = get_tree().get_nodes_in_group(
"ListenForCanvasTransform"
)
for i in canvas_transform_listeners:
if i is Viewport:
i.canvas_transform = canvas_transform
var spatial_transform_listeners = get_tree().get_nodes_in_group(
"ListenForSpatialTransform"
)
for i in spatial_transform_listeners:
var basis = Basis(
Vector3(new_transform.x.x, new_transform.x.y, 0.0),
Vector3(new_transform.y.x, new_transform.y.y, 0.0),
Vector3(new_transform.origin.x, new_transform.origin.y, 1.0)
Vector3(spatial_transform.x.x, spatial_transform.x.y, 0.0),
Vector3(spatial_transform.y.x, spatial_transform.y.y, 0.0),
Vector3(spatial_transform.origin.x, spatial_transform.origin.y, 1.0)
)
i.get_material().set_shader_param("canvas_transform", basis)
#print(i.get_material().get_shader_param("canvas_transform"))
func _on_canvas_polygon_changed(new_polygon):
var listeners = get_tree().get_nodes_in_group("CanvasPolygon")
for i in listeners:
i.polygon = new_polygon

View File

@ -2,7 +2,6 @@
[ext_resource path="res://addons/summer_day/tool/canvas/canvas.gd" type="Script" id=1]
[ext_resource path="res://Main.tscn" type="PackedScene" id=2]
[ext_resource path="res://addons/summer_day/tool/canvas/rendering/empty_canvas_layer.gd" type="Script" id=3]
[sub_resource type="StyleBoxFlat" id=3]
bg_color = Color( 0.180392, 0.172549, 0.203922, 1 )
@ -22,6 +21,9 @@ ambient_light_color = Color( 1, 1, 1, 1 )
[sub_resource type="World" id=2]
environment = SubResource( 1 )
[sub_resource type="CanvasItemMaterial" id=5]
blend_mode = 3
[node name="Canvas" type="PanelContainer"]
anchor_right = 1.0
anchor_bottom = 1.0
@ -48,7 +50,7 @@ __meta__ = {
"_edit_use_anchors_": false
}
[node name="BackgroundLayer" type="Viewport" parent="Render"]
[node name="BackgroundLayer" type="Viewport" parent="Render" groups=["ListenForCanvasTransform"]]
size = Vector2( 998, 574 )
size_override_stretch = true
transparent_bg = true
@ -57,10 +59,10 @@ usage = 0
render_target_update_mode = 3
gui_disable_input = true
[node name="EmptyCanvasLayer" type="Polygon2D" parent="Render/BackgroundLayer"]
script = ExtResource( 3 )
[node name="EmptyCanvasLayer" type="Polygon2D" parent="Render/BackgroundLayer" groups=["CanvasPolygon"]]
polygon = PoolVector2Array( 0, 0, 1.39909, 0, 1.39909, 1, 0, 1 )
[node name="RenderLayer" type="Viewport" parent="Render"]
[node name="RenderLayer" type="Viewport" parent="Render" groups=["ListenForCanvasTransform"]]
size = Vector2( 998, 574 )
world = SubResource( 2 )
transparent_bg = true
@ -70,7 +72,14 @@ gui_disable_input = true
[node name="Main" parent="Render/RenderLayer" instance=ExtResource( 2 )]
[node name="ForegroundLayer" type="Viewport" parent="Render"]
[node name="BorderShadow" type="Polygon2D" parent="Render/RenderLayer" groups=["CanvasPolygon"]]
material = SubResource( 5 )
color = Color( 0.611765, 0.611765, 0.611765, 1 )
invert_enable = true
invert_border = 1000.0
polygon = PoolVector2Array( 0, 0, 1.39909, 0, 1.39909, 1, 0, 1 )
[node name="ForegroundLayer" type="Viewport" parent="Render" groups=["ListenForCanvasTransform"]]
size = Vector2( 998, 574 )
transparent_bg = true
handle_input_locally = false

View File

@ -4,7 +4,8 @@ class_name SummerDayCanvasState
signal fill_transform_changed(fill_transform)
signal canvas_transform_changed(canvas_transform)
signal view_transform_changed(view_transform)
signal clip_space_view_transform_changed(view_transform)
signal canvas_polygon_changed(polygon)
var rect_size: Vector2
@ -12,16 +13,19 @@ var fill_transform := Transform2D.IDENTITY
var canvas_transform := Transform2D.IDENTITY setget _set_canvas_transform
var view_transform := Transform2D.IDENTITY # canvas_transform * fill_transform
# For spacial transform.
var clip_space_view_transform := Transform2D.IDENTITY
var canvas_to_clip_space := Transform2D.IDENTITY
var _canvas_polygon: PoolVector2Array # The polygon, that forms the canvas rect.
func _init():
connect("fill_transform_changed", self, "_update_view_transformation")
connect("canvas_transform_changed", self, "_update_view_transformation")
func update_fill_transform(scene):
func update_fill_transform(scene: SummerDayScene):
if scene == null:
fill_transform = Transform2D.IDENTITY
else:
@ -45,6 +49,9 @@ func update_fill_transform(scene):
Vector2(0.0, scale),
translation
)
_update_canvas_polygon(scene)
emit_signal("fill_transform_changed", fill_transform)
@ -58,16 +65,29 @@ func update_canvas_to_clip_space():
func _update_view_transformation(transform):
view_transform = canvas_transform * fill_transform
# var off_view_transform = view_transform
# var offset = off_view_transform.origin
# off_view_transform.origin = Vector2.ZERO
clip_space_view_transform = canvas_to_clip_space * view_transform
# clip_space_view_transform.origin = offset
emit_signal("clip_space_view_transform_changed", clip_space_view_transform)
emit_signal("view_transform_changed", view_transform)
emit_signal(
"view_transform_changed", view_transform, clip_space_view_transform
)
func _set_canvas_transform(new_canvas_transform):
canvas_transform = new_canvas_transform
emit_signal("canvas_transform_changed", canvas_transform)
func _update_canvas_polygon(scene: SummerDayScene):
if scene == null:
_canvas_polygon = PoolVector2Array()
return
_canvas_polygon = PoolVector2Array(
[
Vector2.ZERO,
Vector2(scene.raw_aspect_ratio, 0.0),
Vector2(scene.raw_aspect_ratio, 1.0),
Vector2(0.0, 1.0)
]
)
emit_signal("canvas_polygon_changed", _canvas_polygon)

View File

@ -18,6 +18,3 @@ func update_size(scene: SummerDayScene):
Vector2(0.0, 1.0)
]
)
func _on_view_transform_changed(new_view_transform):
transform = new_view_transform

View File

@ -0,0 +1,11 @@
extends Viewport
class_name SummerDayViewportHandler
func _ready():
pass
# Connect from CanvasState.
func _on_view_transform_changed(view_transform, clip_space_view_transform):
canvas_transform = view_transform

View File

@ -109,6 +109,11 @@ _global_script_classes=[ {
"language": "GDScript",
"path": "res://addons/summer_day/tool/tool_system/tool_pool.gd"
}, {
"base": "Viewport",
"class": "SummerDayViewportHandler",
"language": "GDScript",
"path": "res://addons/summer_day/tool/canvas/rendering/viewport_handler.gd"
}, {
"base": "SummerDayTool",
"class": "SummerDayZoomCanvasTool",
"language": "GDScript",
@ -140,6 +145,7 @@ _global_script_class_icons={
"SummerDayTool": "",
"SummerDayToolContext": "",
"SummerDayToolPool": "",
"SummerDayViewportHandler": "",
"SummerDayZoomCanvasTool": "",
"VeryWorse": ""
}