Viewport render to ViewportTexture after dynamic reparenting and moving nodes

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By beetbeet

Hello,

Godot version:
3.2.1
OS/device including version:
Windows 10
Minimal reproduction project:
https://1drv.ms/u/s!Arug_xB8WkZQtFRNDgHJ-GwbbneK?e=PnlxAB

I have scene MovingAndReparenting.tscn:

Spatial
-MeshInstance
-DirectionalLight
-Camera
-Spatial1
--Viewport
--MeshInstance
--Camera

I want to render Viewport content to ViewportTexture of first MeshInstace.

Unfortunately I have to move the node of Spatial1 to another place of the scene in space at the start function.

That’s why the objects I render to Viewport are not its children at start. (Viewport is not a Spatial type, so they would not move to a new place in space).

After moving Spatial1 node to a new place and reparent child nodes to Viewport there is nothing projected from Viewport.

Script for that scene:

func _ready():

	# translate Spatial1 to new location
	master_node.set_translation(Vector3(100,0,0))

	# parent all nodes to Viewport node
	for N in master_node.get_children():
		# leave first node because it is a Viewport
			if N != master_node.get_child(0):
				var node = N
				master_node.remove_child(node)
				# translate also child nodes
				node.set_translation(master_node.get_translation())
				viewport_node.add_child(node)
				node.set_owner(viewport_node)


	# set viewport texturte to mesh node albedo
	mesh_node.get_surface_material(0).albedo_texture = viewport_node.get_texture()
	# update viewport path
	mesh_node.get_surface_material(0).albedo_texture.set_viewport_path_in_scene("/root/Spatial/Spatial1/Viewport")

But scene tree is correct in remote:

Spatial
-MeshInstance
-DirectionalLight
-Camera
-Spatial1
--Viewport
---MeshInstance
---Camera

Interesting thing is when i save scene to tscn from code:

var packed_scene = PackedScene.new()
packed_scene.pack(get_tree().get_current_scene())
ResourceSaver.save("res://my_generated_scene.tscn", packed_scene)

there is no children nodes of Viewport in that tscn file but in remote i see that nodes as children of Viewport

In that project i made also scene WithoutMovingAndReparenting.tscn where:

I place Spatial1 node and his child nodes to another place in scene in editor without any reparenting script operations.

Script for that scene:

extends Spatial

onready var viewport_node = get_node("/root/Spatial/Spatial1/Viewport")
onready var mesh_node = get_node("/root/Spatial/MeshInstance")

func _ready():
	# set viewport texturte to mesh node albedo
	mesh_node.get_surface_material(0).albedo_texture = viewport_node.get_texture()

And it that case Viewport works good.

Does anyone have any idea why this is happening?
How to deal with such a problem? Doesn’t Viewport update the data correctly?