mirror of
https://github.com/Relintai/material-maker.git
synced 2024-11-13 06:27:18 +01:00
Updated import, preview and slider widgets
This commit is contained in:
parent
b861cf446d
commit
8c06cd3aa8
@ -7,6 +7,7 @@ Base class for texture generators, that defines their API
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
signal parameter_changed
|
signal parameter_changed
|
||||||
|
signal update_textures
|
||||||
|
|
||||||
class InputPort:
|
class InputPort:
|
||||||
var generator : MMGenBase = null
|
var generator : MMGenBase = null
|
||||||
|
@ -25,6 +25,12 @@ const ADDON_TEXTURE_LIST = [
|
|||||||
{ port=6, texture="depth_texture" }
|
{ port=6, texture="depth_texture" }
|
||||||
]
|
]
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
texture_list = TEXTURE_LIST
|
||||||
|
for t in texture_list:
|
||||||
|
generated_textures[t.texture] = null
|
||||||
|
material = SpatialMaterial.new()
|
||||||
|
|
||||||
func get_type():
|
func get_type():
|
||||||
return "material"
|
return "material"
|
||||||
|
|
||||||
@ -53,23 +59,8 @@ func get_input_defs():
|
|||||||
{ name="depth_texture", label="", type="f" }
|
{ name="depth_texture", label="", type="f" }
|
||||||
]
|
]
|
||||||
|
|
||||||
func _ready():
|
func source_changed(input_index : int):
|
||||||
texture_list = TEXTURE_LIST
|
emit_signal("update_textures")
|
||||||
if Engine.editor_hint:
|
|
||||||
texture_list = ADDON_TEXTURE_LIST
|
|
||||||
for t in texture_list:
|
|
||||||
generated_textures[t.texture] = null
|
|
||||||
material = SpatialMaterial.new()
|
|
||||||
|
|
||||||
func generate_material(renderer : MMGenRenderer):
|
|
||||||
var source = get_source(0)
|
|
||||||
if source != null:
|
|
||||||
var status = source.generator.render(source.output_index, renderer, 512)
|
|
||||||
while status is GDScriptFunctionState:
|
|
||||||
status = yield(status, "completed")
|
|
||||||
renderer.get_texture().get_data().save_png("res://test.png")
|
|
||||||
material.albedo_texture = load("res://test.png")
|
|
||||||
return material
|
|
||||||
|
|
||||||
func render_textures(renderer : MMGenRenderer):
|
func render_textures(renderer : MMGenRenderer):
|
||||||
for t in texture_list:
|
for t in texture_list:
|
||||||
@ -77,7 +68,7 @@ func render_textures(renderer : MMGenRenderer):
|
|||||||
var source = get_source(t.port)
|
var source = get_source(t.port)
|
||||||
var texture = null
|
var texture = null
|
||||||
if source != null:
|
if source != null:
|
||||||
var status = source.generator.render(source.output_index, renderer, 512)
|
var status = source.generator.render(source.output_index, renderer, 1024)
|
||||||
while status is GDScriptFunctionState:
|
while status is GDScriptFunctionState:
|
||||||
status = yield(status, "completed")
|
status = yield(status, "completed")
|
||||||
texture = ImageTexture.new()
|
texture = ImageTexture.new()
|
||||||
@ -104,7 +95,7 @@ func update_spatial_material(m, file_prefix = null):
|
|||||||
m.albedo_texture = get_generated_texture("albedo", file_prefix)
|
m.albedo_texture = get_generated_texture("albedo", file_prefix)
|
||||||
m.metallic = parameters.metallic
|
m.metallic = parameters.metallic
|
||||||
m.roughness = parameters.roughness
|
m.roughness = parameters.roughness
|
||||||
if Engine.editor_hint:
|
if false:
|
||||||
texture = get_generated_texture("mrao", file_prefix)
|
texture = get_generated_texture("mrao", file_prefix)
|
||||||
m.metallic_texture = texture
|
m.metallic_texture = texture
|
||||||
m.metallic_texture_channel = SpatialMaterial.TEXTURE_CHANNEL_RED
|
m.metallic_texture_channel = SpatialMaterial.TEXTURE_CHANNEL_RED
|
||||||
@ -126,7 +117,7 @@ func update_spatial_material(m, file_prefix = null):
|
|||||||
m.normal_texture = texture
|
m.normal_texture = texture
|
||||||
else:
|
else:
|
||||||
m.normal_enabled = false
|
m.normal_enabled = false
|
||||||
if Engine.editor_hint:
|
if false:
|
||||||
if (generated_textures.mrao.mask & (1 << 2)) != 0:
|
if (generated_textures.mrao.mask & (1 << 2)) != 0:
|
||||||
m.ao_enabled = true
|
m.ao_enabled = true
|
||||||
m.ao_light_affect = parameters.ao_light_affect
|
m.ao_light_affect = parameters.ao_light_affect
|
||||||
@ -151,22 +142,21 @@ func update_spatial_material(m, file_prefix = null):
|
|||||||
else:
|
else:
|
||||||
m.depth_enabled = false
|
m.depth_enabled = false
|
||||||
|
|
||||||
func export_textures(prefix, size = null):
|
func export_textures(prefix, editor_interface = null):
|
||||||
if size == null:
|
|
||||||
size = int(pow(2, 8+parameters.resolution))
|
|
||||||
for t in texture_list:
|
for t in texture_list:
|
||||||
var texture = generated_textures[t.texture]
|
var texture = generated_textures[t.texture]
|
||||||
if texture != null:
|
if texture != null:
|
||||||
var image = texture.get_data()
|
var image = texture.get_data()
|
||||||
image.save_png("%s_%s.png" % [ prefix, t.texture ])
|
image.save_png("%s_%s.png" % [ prefix, t.texture ])
|
||||||
if Engine.editor_hint:
|
if Engine.editor_hint:
|
||||||
var resource_filesystem = get_parent().editor_interface.get_resource_filesystem()
|
var resource_filesystem = editor_interface.get_resource_filesystem()
|
||||||
resource_filesystem.scan()
|
resource_filesystem.scan()
|
||||||
yield(resource_filesystem, "filesystem_changed")
|
yield(resource_filesystem, "filesystem_changed")
|
||||||
var new_material = SpatialMaterial.new()
|
var new_material = SpatialMaterial.new()
|
||||||
update_spatial_material(new_material, prefix)
|
update_spatial_material(new_material, prefix)
|
||||||
ResourceSaver.save("%s.tres" % [ prefix ], new_material)
|
ResourceSaver.save("%s.tres" % [ prefix ], new_material)
|
||||||
resource_filesystem.scan()
|
resource_filesystem.scan()
|
||||||
|
return new_material
|
||||||
|
|
||||||
func _serialize(data):
|
func _serialize(data):
|
||||||
return data
|
return data
|
||||||
|
@ -363,3 +363,9 @@ func _on_Projects_tab_changed(tab):
|
|||||||
new_tab.connect("node_selected", self, "update_preview_2d")
|
new_tab.connect("node_selected", self, "update_preview_2d")
|
||||||
current_tab = new_tab
|
current_tab = new_tab
|
||||||
update_preview()
|
update_preview()
|
||||||
|
|
||||||
|
func _on_Preview_show_background_preview(v):
|
||||||
|
var pv = $VBoxContainer/HBoxContainer/VBoxContainer/Preview/MaterialPreview
|
||||||
|
var bgpv = $VBoxContainer/HBoxContainer/ProjectsPane/BackgroundPreview/Viewport
|
||||||
|
bgpv.world = pv.find_world()
|
||||||
|
$VBoxContainer/HBoxContainer/ProjectsPane/BackgroundPreview.visible = v
|
||||||
|
@ -100,7 +100,7 @@ handle_input_locally = false
|
|||||||
render_target_update_mode = 0
|
render_target_update_mode = 0
|
||||||
|
|
||||||
[node name="Camera" type="Camera" parent="VBoxContainer/HBoxContainer/ProjectsPane/BackgroundPreview/Viewport"]
|
[node name="Camera" type="Camera" parent="VBoxContainer/HBoxContainer/ProjectsPane/BackgroundPreview/Viewport"]
|
||||||
transform = Transform( 1, 0, 0, 0, 0.766044, 0.642788, 0, -0.642788, 0.766044, 0, 2.24976, 2.68116 )
|
transform = Transform( 1, 0, 0, 0, 0.766044, 0.642788, 0, -0.642788, 0.766044, 0, 2.24976, 2.68115 )
|
||||||
current = true
|
current = true
|
||||||
|
|
||||||
[node name="Projects" type="Panel" parent="VBoxContainer/HBoxContainer/ProjectsPane"]
|
[node name="Projects" type="Panel" parent="VBoxContainer/HBoxContainer/ProjectsPane"]
|
||||||
@ -123,7 +123,7 @@ debug_path = null
|
|||||||
[node name="NodeFactory" type="Node" parent="."]
|
[node name="NodeFactory" type="Node" parent="."]
|
||||||
script = ExtResource( 6 )
|
script = ExtResource( 6 )
|
||||||
[connection signal="need_update" from="VBoxContainer/HBoxContainer/VBoxContainer/Preview" to="." method="update_preview_3d"]
|
[connection signal="need_update" from="VBoxContainer/HBoxContainer/VBoxContainer/Preview" to="." method="update_preview_3d"]
|
||||||
[connection signal="show_background_preview" from="VBoxContainer/HBoxContainer/VBoxContainer/Preview" to="VBoxContainer/HBoxContainer/ProjectsPane/BackgroundPreview" method="set_visible"]
|
[connection signal="show_background_preview" from="VBoxContainer/HBoxContainer/VBoxContainer/Preview" to="." method="_on_Preview_show_background_preview"]
|
||||||
[connection signal="no_more_tabs" from="VBoxContainer/HBoxContainer/ProjectsPane/Projects" to="." method="new_material"]
|
[connection signal="no_more_tabs" from="VBoxContainer/HBoxContainer/ProjectsPane/Projects" to="." method="new_material"]
|
||||||
[connection signal="resized" from="VBoxContainer/HBoxContainer/ProjectsPane/Projects" to="VBoxContainer/HBoxContainer/ProjectsPane/Projects" method="_on_Projects_resized"]
|
[connection signal="resized" from="VBoxContainer/HBoxContainer/ProjectsPane/Projects" to="VBoxContainer/HBoxContainer/ProjectsPane/Projects" method="_on_Projects_resized"]
|
||||||
[connection signal="tab_changed" from="VBoxContainer/HBoxContainer/ProjectsPane/Projects" to="." method="_on_Projects_tab_changed"]
|
[connection signal="tab_changed" from="VBoxContainer/HBoxContainer/ProjectsPane/Projects" to="." method="_on_Projects_tab_changed"]
|
||||||
|
@ -102,7 +102,7 @@ func create_parameter_control(p : Dictionary):
|
|||||||
if p.has("widget") and p.widget == "spinbox":
|
if p.has("widget") and p.widget == "spinbox":
|
||||||
control = SpinBox.new()
|
control = SpinBox.new()
|
||||||
else:
|
else:
|
||||||
control = HSlider.new()
|
control = preload("res://addons/material_maker/widgets/hslider.tscn").instance()
|
||||||
control.min_value = p.min
|
control.min_value = p.min
|
||||||
control.max_value = p.max
|
control.max_value = p.max
|
||||||
control.step = 0.005 if !p.has("step") else p.step
|
control.step = 0.005 if !p.has("step") else p.step
|
||||||
|
@ -49,8 +49,12 @@ func close_material_maker():
|
|||||||
func generate_material(ptex_filename: String) -> Material:
|
func generate_material(ptex_filename: String) -> Material:
|
||||||
var generator = MMGenLoader.load_gen(ptex_filename)
|
var generator = MMGenLoader.load_gen(ptex_filename)
|
||||||
add_child(generator)
|
add_child(generator)
|
||||||
var material = generator.get_node("Material")
|
if generator.has_node("Material"):
|
||||||
var return_value = material.generate_material(renderer)
|
var gen_material = generator.get_node("Material")
|
||||||
while return_value is GDScriptFunctionState:
|
print(renderer)
|
||||||
return_value = yield(return_value, "completed")
|
var return_value = gen_material.render_textures(renderer)
|
||||||
return return_value
|
while return_value is GDScriptFunctionState:
|
||||||
|
return_value = yield(return_value, "completed")
|
||||||
|
var prefix = ptex_filename.left(ptex_filename.rfind("."))
|
||||||
|
return gen_material.export_textures(prefix, get_editor_interface())
|
||||||
|
return null
|
||||||
|
@ -7,7 +7,7 @@ const ENVIRONMENTS = [
|
|||||||
"experiment", "lobby", "night", "park", "schelde"
|
"experiment", "lobby", "night", "park", "schelde"
|
||||||
]
|
]
|
||||||
|
|
||||||
onready var objects = $MaterialPreview/Objects
|
onready var objects = $MaterialPreview/Preview3d/Objects
|
||||||
onready var current_object = objects.get_child(0)
|
onready var current_object = objects.get_child(0)
|
||||||
|
|
||||||
signal need_update
|
signal need_update
|
||||||
@ -20,14 +20,14 @@ func _ready():
|
|||||||
var m = o.get_surface_material(0)
|
var m = o.get_surface_material(0)
|
||||||
o.set_surface_material(0, m.duplicate())
|
o.set_surface_material(0, m.duplicate())
|
||||||
$Config/Model.add_item(o.name)
|
$Config/Model.add_item(o.name)
|
||||||
$ObjectRotate.play("rotate")
|
$MaterialPreview/Preview3d/ObjectRotate.play("rotate")
|
||||||
$Preview2D.material = $Preview2D.material.duplicate(true)
|
$Preview2D.material = $Preview2D.material.duplicate(true)
|
||||||
_on_Environment_item_selected($Config/Environment.selected)
|
_on_Environment_item_selected($Config/Environment.selected)
|
||||||
_on_Preview_resized()
|
_on_Preview_resized()
|
||||||
$MaterialPreview/CameraPivot/Camera/RemoteTransform.set_remote_node("../../../../../../ProjectsPane/BackgroundPreview/Viewport/Camera")
|
$MaterialPreview/Preview3d/CameraPivot/Camera/RemoteTransform.set_remote_node("../../../../../../../ProjectsPane/BackgroundPreview/Viewport/Camera")
|
||||||
|
|
||||||
func _on_Environment_item_selected(id):
|
func _on_Environment_item_selected(id):
|
||||||
$MaterialPreview/WorldEnvironment.environment.background_sky.panorama = load("res://addons/material_maker/panoramas/"+ENVIRONMENTS[id]+".hdr")
|
$MaterialPreview/Preview3d/WorldEnvironment.environment.background_sky.panorama = load("res://addons/material_maker/panoramas/"+ENVIRONMENTS[id]+".hdr")
|
||||||
|
|
||||||
func _on_Model_item_selected(id):
|
func _on_Model_item_selected(id):
|
||||||
current_object.visible = false
|
current_object.visible = false
|
||||||
@ -60,8 +60,8 @@ func _on_Button_toggled(button_pressed):
|
|||||||
|
|
||||||
func on_gui_input(event):
|
func on_gui_input(event):
|
||||||
if event is InputEventMouseButton:
|
if event is InputEventMouseButton:
|
||||||
$ObjectRotate.stop()
|
$MaterialPreview/Preview3d/ObjectRotate.stop()
|
||||||
elif event is InputEventMouseMotion:
|
elif event is InputEventMouseMotion:
|
||||||
if event.button_mask != 0:
|
if event.button_mask != 0:
|
||||||
$MaterialPreview/Objects.rotation.y += 0.01*event.relative.x
|
$MaterialPreview/Preview3d/Objects.rotation.y += 0.01*event.relative.x
|
||||||
$MaterialPreview/CameraPivot.rotation.x -= 0.01*event.relative.y
|
$MaterialPreview/Preview3d/CameraPivot.rotation.x -= 0.01*event.relative.y
|
||||||
|
@ -1,33 +1,11 @@
|
|||||||
[gd_scene load_steps=9 format=2]
|
[gd_scene load_steps=6 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://addons/material_maker/preview.gd" type="Script" id=1]
|
[ext_resource path="res://addons/material_maker/preview.gd" type="Script" id=1]
|
||||||
[ext_resource path="res://addons/material_maker/preview_objects.tscn" type="PackedScene" id=2]
|
[ext_resource path="res://addons/material_maker/preview_3d.tscn" type="PackedScene" id=2]
|
||||||
[ext_resource path="res://addons/material_maker/panoramas/park.hdr" type="Texture" id=3]
|
|
||||||
|
|
||||||
[sub_resource type="Animation" id=1]
|
[sub_resource type="World" id=4]
|
||||||
loop = true
|
|
||||||
tracks/0/type = "value"
|
|
||||||
tracks/0/path = NodePath("MaterialPreview/Objects:rotation_degrees")
|
|
||||||
tracks/0/interp = 1
|
|
||||||
tracks/0/loop_wrap = true
|
|
||||||
tracks/0/imported = false
|
|
||||||
tracks/0/enabled = true
|
|
||||||
tracks/0/keys = {
|
|
||||||
"times": PoolRealArray( 0, 1 ),
|
|
||||||
"transitions": PoolRealArray( 1, 1 ),
|
|
||||||
"update": 0,
|
|
||||||
"values": [ Vector3( 0, 0, 0 ), Vector3( 0, 360, 0 ) ]
|
|
||||||
}
|
|
||||||
|
|
||||||
[sub_resource type="PanoramaSky" id=2]
|
[sub_resource type="Shader" id=2]
|
||||||
radiance_size = 2
|
|
||||||
panorama = ExtResource( 3 )
|
|
||||||
|
|
||||||
[sub_resource type="Environment" id=3]
|
|
||||||
background_mode = 2
|
|
||||||
background_sky = SubResource( 2 )
|
|
||||||
|
|
||||||
[sub_resource type="Shader" id=4]
|
|
||||||
code = "shader_type canvas_item;
|
code = "shader_type canvas_item;
|
||||||
|
|
||||||
uniform sampler2D tex;
|
uniform sampler2D tex;
|
||||||
@ -36,8 +14,8 @@ void fragment() {
|
|||||||
COLOR = texture(tex, UV);
|
COLOR = texture(tex, UV);
|
||||||
}"
|
}"
|
||||||
|
|
||||||
[sub_resource type="ShaderMaterial" id=5]
|
[sub_resource type="ShaderMaterial" id=3]
|
||||||
shader = SubResource( 4 )
|
shader = SubResource( 2 )
|
||||||
|
|
||||||
[node name="Preview" type="ViewportContainer"]
|
[node name="Preview" type="ViewportContainer"]
|
||||||
anchor_left = 1.0
|
anchor_left = 1.0
|
||||||
@ -52,36 +30,15 @@ size_flags_vertical = 3
|
|||||||
stretch = true
|
stretch = true
|
||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
|
|
||||||
[node name="ObjectRotate" type="AnimationPlayer" parent="."]
|
|
||||||
autoplay = "rotate"
|
|
||||||
playback_speed = 0.1
|
|
||||||
anims/rotate = SubResource( 1 )
|
|
||||||
|
|
||||||
[node name="MaterialPreview" type="Viewport" parent="."]
|
[node name="MaterialPreview" type="Viewport" parent="."]
|
||||||
size = Vector2( 395, 370 )
|
size = Vector2( 395, 370 )
|
||||||
|
own_world = true
|
||||||
|
world = SubResource( 4 )
|
||||||
handle_input_locally = false
|
handle_input_locally = false
|
||||||
render_target_clear_mode = 1
|
render_target_clear_mode = 1
|
||||||
render_target_update_mode = 3
|
render_target_update_mode = 3
|
||||||
|
|
||||||
[node name="Objects" parent="MaterialPreview" instance=ExtResource( 2 )]
|
[node name="Preview3d" parent="MaterialPreview" instance=ExtResource( 2 )]
|
||||||
transform = Transform( 0.768253, 0, -0.640147, 0, 1, 0, 0.640147, 0, 0.768253, 0, 0, 0 )
|
|
||||||
|
|
||||||
[node name="OmniLight" type="OmniLight" parent="MaterialPreview"]
|
|
||||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 1.04729, 1.80471, -2.51024 )
|
|
||||||
omni_range = 6.46518
|
|
||||||
|
|
||||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="MaterialPreview"]
|
|
||||||
environment = SubResource( 3 )
|
|
||||||
|
|
||||||
[node name="CameraPivot" type="Spatial" parent="MaterialPreview"]
|
|
||||||
transform = Transform( 1, 0, 0, 0, 0.766044, 0.642788, 0, -0.642788, 0.766044, 0, 0, 0 )
|
|
||||||
|
|
||||||
[node name="Camera" type="Camera" parent="MaterialPreview/CameraPivot"]
|
|
||||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 3.5 )
|
|
||||||
environment = SubResource( 3 )
|
|
||||||
current = true
|
|
||||||
|
|
||||||
[node name="RemoteTransform" type="RemoteTransform" parent="MaterialPreview/CameraPivot/Camera"]
|
|
||||||
|
|
||||||
[node name="Config" type="HBoxContainer" parent="."]
|
[node name="Config" type="HBoxContainer" parent="."]
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
@ -115,7 +72,7 @@ toggle_mode = true
|
|||||||
text = "O"
|
text = "O"
|
||||||
|
|
||||||
[node name="Preview2D" type="ColorRect" parent="."]
|
[node name="Preview2D" type="ColorRect" parent="."]
|
||||||
material = SubResource( 5 )
|
material = SubResource( 3 )
|
||||||
anchor_top = 1.0
|
anchor_top = 1.0
|
||||||
anchor_bottom = 1.0
|
anchor_bottom = 1.0
|
||||||
margin_top = -64.0
|
margin_top = -64.0
|
||||||
|
55
addons/material_maker/preview_3d.tscn
Normal file
55
addons/material_maker/preview_3d.tscn
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
[gd_scene load_steps=6 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://addons/material_maker/preview_objects.tscn" type="PackedScene" id=1]
|
||||||
|
[ext_resource path="res://addons/material_maker/panoramas/park.hdr" type="Texture" id=2]
|
||||||
|
|
||||||
|
[sub_resource type="PanoramaSky" id=1]
|
||||||
|
radiance_size = 2
|
||||||
|
panorama = ExtResource( 2 )
|
||||||
|
|
||||||
|
[sub_resource type="Environment" id=2]
|
||||||
|
background_mode = 2
|
||||||
|
background_sky = SubResource( 1 )
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id=3]
|
||||||
|
loop = true
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/path = NodePath("MaterialPreview/Spatial/Objects:rotation_degrees")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PoolRealArray( 0, 1 ),
|
||||||
|
"transitions": PoolRealArray( 1, 1 ),
|
||||||
|
"update": 0,
|
||||||
|
"values": [ Vector3( 0, 0, 0 ), Vector3( 0, 360, 0 ) ]
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="Preview3d" type="Spatial"]
|
||||||
|
|
||||||
|
[node name="Objects" type="Spatial" parent="." instance=ExtResource( 1 )]
|
||||||
|
transform = Transform( -0.799512, 0, 0.60065, 0, 1, 0, -0.60065, 0, -0.799512, 0, 0, 0 )
|
||||||
|
|
||||||
|
[node name="OmniLight" type="OmniLight" parent="."]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.345557, 2.74973, -3.97441 )
|
||||||
|
omni_range = 6.46518
|
||||||
|
|
||||||
|
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||||
|
environment = SubResource( 2 )
|
||||||
|
|
||||||
|
[node name="CameraPivot" type="Spatial" parent="."]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 0.766044, 0.642788, 0, -0.642788, 0.766044, 0, 0, 0 )
|
||||||
|
|
||||||
|
[node name="Camera" type="Camera" parent="CameraPivot"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 3.5 )
|
||||||
|
environment = SubResource( 2 )
|
||||||
|
current = true
|
||||||
|
|
||||||
|
[node name="RemoteTransform" type="RemoteTransform" parent="CameraPivot/Camera"]
|
||||||
|
remote_path = NodePath("../../../../../../ProjectsPane/BackgroundPreview/Viewport/Camera")
|
||||||
|
|
||||||
|
[node name="ObjectRotate" type="AnimationPlayer" parent="."]
|
||||||
|
autoplay = "rotate"
|
||||||
|
playback_speed = 0.1
|
||||||
|
anims/rotate = SubResource( 3 )
|
3
addons/material_maker/preview_world.tres
Normal file
3
addons/material_maker/preview_world.tres
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[gd_resource type="World" format=2]
|
||||||
|
|
||||||
|
[resource]
|
12
addons/material_maker/widgets/hslider.gd
Normal file
12
addons/material_maker/widgets/hslider.gd
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
tool
|
||||||
|
extends HSlider
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
update_label(value)
|
||||||
|
|
||||||
|
func set_value(v):
|
||||||
|
.set_value(v)
|
||||||
|
update_label(v)
|
||||||
|
|
||||||
|
func update_label(v):
|
||||||
|
$Label.text = "%f" % v
|
23
addons/material_maker/widgets/hslider.tscn
Normal file
23
addons/material_maker/widgets/hslider.tscn
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
[gd_scene load_steps=2 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://addons/material_maker/widgets/hslider.gd" type="Script" id=1]
|
||||||
|
|
||||||
|
[node name="MMHSlider" type="HSlider"]
|
||||||
|
margin_left = 1.0
|
||||||
|
margin_top = 1.0
|
||||||
|
margin_right = 134.0
|
||||||
|
margin_bottom = 17.0
|
||||||
|
ticks_on_borders = true
|
||||||
|
script = ExtResource( 1 )
|
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="."]
|
||||||
|
self_modulate = Color( 1, 1, 1, 0.501961 )
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
text = "100"
|
||||||
|
align = 1
|
||||||
|
valign = 1
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_lock_": true
|
||||||
|
}
|
||||||
|
[connection signal="value_changed" from="." to="." method="update_label"]
|
Loading…
Reference in New Issue
Block a user