Try adding subviewports programmatically - doesn't work
I hoped this would remove the frame lag in portals
This commit is contained in:
parent
0ee4f5c250
commit
2438205535
@ -142,4 +142,3 @@ func _add_key_input_action(name: String, key: Key) -> void:
|
||||
|
||||
InputMap.add_action(name)
|
||||
InputMap.action_add_event(name, ev)
|
||||
|
||||
|
@ -7,15 +7,12 @@ extends Camera3D
|
||||
set(v):
|
||||
portal_mesh = v
|
||||
if v != null:
|
||||
print("set: portal_mesh", v)
|
||||
var mat = v.mesh.surface_get_material(0) as ShaderMaterial
|
||||
mat.set_shader_parameter("albedo", get_parent().get_texture())
|
||||
|
||||
_portal_mesh_aabb = v.get_aabb()
|
||||
|
||||
var _portal_mesh_aabb: AABB
|
||||
|
||||
@export var player_camera: Node3D
|
||||
@export_range(0, 1, 0.01) var frame_width: float = 0.1
|
||||
|
||||
@export_tool_button("Grab editor camera", "Camera3D")
|
||||
var _tb_grab_editor_camera: Callable = _grab_editor_camera
|
||||
@ -34,6 +31,20 @@ func _ready() -> void:
|
||||
env.tonemap_exposure = 1
|
||||
self.environment = env
|
||||
|
||||
if not Engine.is_editor_hint():
|
||||
assert(check())
|
||||
|
||||
var vp = SubViewport.new()
|
||||
vp.name = home.name + "_SubViewport"
|
||||
vp.size = get_viewport().size
|
||||
await get_parent().ready
|
||||
get_parent().add_child(vp)
|
||||
|
||||
self.reparent(vp)
|
||||
|
||||
var mat = portal_mesh.mesh.surface_get_material(0) as ShaderMaterial
|
||||
mat.set_shader_parameter("albedo", vp.get_texture())
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
@ -48,6 +59,7 @@ func _process(delta: float) -> void:
|
||||
|
||||
self.near = _get_near_plane(_portal_mesh_aabb)
|
||||
|
||||
|
||||
func _get_near_plane(_mesh_aabb: AABB) -> float:
|
||||
var corner_1:Vector3 = target.to_global(Vector3(_mesh_aabb.position.x, _mesh_aabb.position.y, 0))
|
||||
var corner_2:Vector3 = target.to_global(Vector3(_mesh_aabb.position.x + _mesh_aabb.size.x, _mesh_aabb.position.y, 0))
|
||||
@ -63,7 +75,7 @@ func _get_near_plane(_mesh_aabb: AABB) -> float:
|
||||
var d_4:float = (corner_4 - global_position).dot(camera_forward)
|
||||
|
||||
# The near clip distance is the shortest distance which still contains all the corners
|
||||
return max(0.01, min(d_1, d_2, d_3, d_4) - 0.05)
|
||||
return max(0.01, min(d_1, d_2, d_3, d_4) - frame_width)
|
||||
|
||||
func check() -> bool:
|
||||
return target != null and \
|
||||
|
@ -10,6 +10,7 @@ size = Vector3(1.5, 1, 0.68)
|
||||
|
||||
[node name="PortalCamera" type="Camera3D"]
|
||||
script = ExtResource("1_jsd0o")
|
||||
frame_width = null
|
||||
|
||||
[node name="Cone" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, -0.5)
|
||||
|
48
world.tscn
48
world.tscn
@ -37,7 +37,7 @@ material = SubResource("ShaderMaterial_dwbse")
|
||||
size = Vector2(1.5, 2)
|
||||
orientation = 2
|
||||
|
||||
[sub_resource type="Environment" id="Environment_gbfbk"]
|
||||
[sub_resource type="Environment" id="Environment_dwbse"]
|
||||
background_mode = 2
|
||||
sky = SubResource("Sky_dwbse")
|
||||
glow_enabled = true
|
||||
@ -66,7 +66,7 @@ material = SubResource("ShaderMaterial_aqk2v")
|
||||
size = Vector2(1.5, 2)
|
||||
orientation = 2
|
||||
|
||||
[sub_resource type="Environment" id="Environment_wse8f"]
|
||||
[sub_resource type="Environment" id="Environment_gbfbk"]
|
||||
background_mode = 2
|
||||
sky = SubResource("Sky_dwbse")
|
||||
glow_enabled = true
|
||||
@ -109,18 +109,15 @@ mesh = SubResource("PlaneMesh_pkg7o")
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.49309, 0)
|
||||
text = "PortalA"
|
||||
|
||||
[node name="SubViewport" type="SubViewport" parent="PortalA"]
|
||||
process_priority = 1000
|
||||
size = Vector2i(1920, 1080)
|
||||
|
||||
[node name="PortalCamera" parent="PortalA/SubViewport" node_paths=PackedStringArray("home", "target", "portal_mesh", "player_camera") instance=ExtResource("3_tlwt5")]
|
||||
transform = Transform3D(0.677513, 0.0851509, -0.730565, 0, 0.993276, 0.115771, 0.735511, -0.0784365, 0.672957, 1.96377, 1.7265, 7.70245)
|
||||
environment = SubResource("Environment_gbfbk")
|
||||
near = 4.73928
|
||||
home = NodePath("../..")
|
||||
target = NodePath("../../../PortalB")
|
||||
portal_mesh = NodePath("../../MeshA")
|
||||
player_camera = NodePath("../../../Freecam3D")
|
||||
[node name="PortalCamera" parent="PortalA" node_paths=PackedStringArray("home", "target", "portal_mesh", "player_camera") instance=ExtResource("3_tlwt5")]
|
||||
transform = Transform3D(0.856264, 0.0598003, -0.513065, -5.47998e-09, 0.993276, 0.115771, 0.516539, -0.0991306, 0.850506, 4.87687, 1.7265, 4.89861)
|
||||
environment = SubResource("Environment_dwbse")
|
||||
near = 5.58832
|
||||
home = NodePath("..")
|
||||
target = NodePath("../../PortalB")
|
||||
portal_mesh = NodePath("../MeshA")
|
||||
player_camera = NodePath("../../Freecam3D")
|
||||
frame_width = 0.4
|
||||
|
||||
[node name="PortalFrame" type="MeshInstance3D" parent="PortalA"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||
@ -138,18 +135,15 @@ mesh = SubResource("PlaneMesh_036b0")
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.49309, 0)
|
||||
text = "PortalB"
|
||||
|
||||
[node name="SubViewport" type="SubViewport" parent="PortalB"]
|
||||
process_priority = 1000
|
||||
size = Vector2i(1920, 1080)
|
||||
|
||||
[node name="PortalCamera" parent="PortalB/SubViewport" node_paths=PackedStringArray("home", "target", "portal_mesh", "player_camera") instance=ExtResource("3_tlwt5")]
|
||||
transform = Transform3D(-0.677513, -0.0851509, 0.730565, 0, 0.993276, 0.115771, -0.735511, 0.0784365, -0.672957, 2.16021, 1.7265, -0.57847)
|
||||
environment = SubResource("Environment_wse8f")
|
||||
near = 4.98828
|
||||
home = NodePath("../..")
|
||||
target = NodePath("../../../PortalA")
|
||||
portal_mesh = NodePath("../../MeshB")
|
||||
player_camera = NodePath("../../../Freecam3D")
|
||||
[node name="PortalCamera" parent="PortalB" node_paths=PackedStringArray("home", "target", "portal_mesh", "player_camera") instance=ExtResource("3_tlwt5")]
|
||||
transform = Transform3D(0.516539, -0.0991306, 0.850506, -5.47998e-09, 0.993276, 0.115771, -0.856264, -0.0598003, 0.513066, 1.39861, 1.7265, -1.25289)
|
||||
environment = SubResource("Environment_gbfbk")
|
||||
near = 4.72397
|
||||
home = NodePath("..")
|
||||
target = NodePath("../../PortalA")
|
||||
portal_mesh = NodePath("../MeshB")
|
||||
player_camera = NodePath("../../Freecam3D")
|
||||
frame_width = 0.4
|
||||
|
||||
[node name="PortalFrame2" type="MeshInstance3D" parent="PortalB"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||
@ -158,7 +152,7 @@ mesh = SubResource("ArrayMesh_tlwt5")
|
||||
skeleton = NodePath("../../PortalA")
|
||||
|
||||
[node name="Freecam3D" type="Camera3D" parent="."]
|
||||
transform = Transform3D(0.735511, -0.0784364, 0.672957, 0, 0.993276, 0.115771, -0.677513, -0.085151, 0.730565, 6.20245, 1.7265, 3.66021)
|
||||
transform = Transform3D(0.516539, -0.0991306, 0.850506, -5.47998e-09, 0.993276, 0.115771, -0.856264, -0.0598004, 0.513066, 7.02259, 1.7265, 2.24711)
|
||||
script = ExtResource("5_036b0")
|
||||
metadata/_custom_type_script = "uid://hhinqn2b35ry"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user