I've been trying to load in a new ShaderMaterial thru script but I think I'm doing it wrong :(

here's the actual code:
extends MeshInstance
onready var dummy_cam = $DummyCam
onready var mirror_cam = $View/Camera
onready var SM = ShaderMaterial.new()
onready var W =ViewportTexture.new()
onready var mat = self.get("material/0")
func _ready():
add_to_group("mirrors")
self.set("material/0",SM)
mat.set("shader",load("res://Mshader.shader"))
W.set_viewport_path_in_scene("Mi2/View")
mat.set("shader_param/refl_tx",W)
View.size = Vector2(2000,1000)
func updatecam(maincam_transform):
scale.y *= -1
dummy_cam.global_transform = main_cam_transform
scale.y *= -1
mirror_cam.global_transform = dummy_cam.global_transform
mirror_cam.global_transform.basis.x *= -1
on top of that I still have yet to find a way to ".set()" this:

so It could change paths when I try making more of this in a future scene