More progress on remote, bug fixes, cleanup and changes for standalone release

This commit is contained in:
RodZill4 2019-09-25 08:04:36 +02:00
parent 201f911f75
commit bd24b3e87e
23 changed files with 52 additions and 1235 deletions

View File

@ -21,7 +21,7 @@ const ADDON_TEXTURE_LIST = [
{ port=0, texture="albedo" }, { port=0, texture="albedo" },
{ port=3, texture="emission" }, { port=3, texture="emission" },
{ port=4, texture="normal_texture" }, { port=4, texture="normal_texture" },
{ ports=[1, 2, 5], default_values=["0.0", "1.0", "1.0"], texture="mrao" }, { ports=[5, 1, 2], default_values=["1.0", "0.0", "1.0"], texture="orm" },
{ port=6, texture="depth_texture" } { port=6, texture="depth_texture" }
] ]
@ -73,15 +73,16 @@ func generate_material(renderer : MMGenRenderer):
func render_textures(renderer : MMGenRenderer): func render_textures(renderer : MMGenRenderer):
for t in texture_list: for t in texture_list:
var source = get_source(t.port) if t.has("port"):
var texture = null var source = get_source(t.port)
if source != null: var texture = null
var status = source.generator.render(source.output_index, renderer, 512) if source != null:
while status is GDScriptFunctionState: var status = source.generator.render(source.output_index, renderer, 512)
status = yield(status, "completed") while status is GDScriptFunctionState:
texture = ImageTexture.new() status = yield(status, "completed")
texture.create_from_image(renderer.get_texture().get_data()) texture = ImageTexture.new()
generated_textures[t.texture] = texture texture.create_from_image(renderer.get_texture().get_data())
generated_textures[t.texture] = texture
func update_materials(material_list): func update_materials(material_list):
for m in material_list: for m in material_list:

View File

@ -52,7 +52,6 @@ func get_parameter_defs():
return rv return rv
func set_parameter(p, v): func set_parameter(p, v):
.set_parameter(p, v)
var parent = get_parent() var parent = get_parent()
var param_index = p.trim_prefix("param").to_int() var param_index = p.trim_prefix("param").to_int()
var widget = widgets[param_index] var widget = widgets[param_index]
@ -61,8 +60,14 @@ func set_parameter(p, v):
for w in widget.linked_widgets: for w in widget.linked_widgets:
parent.get_node(w.node).set_parameter(w.widget, v) parent.get_node(w.node).set_parameter(w.widget, v)
"config_control": "config_control":
for w in widget.configurations[widget.configurations.keys()[v]]: if v < widget.configurations.size():
parent.get_node(w.node).set_parameter(w.widget, w.value) for w in widget.configurations[widget.configurations.keys()[v]]:
parent.get_node(w.node).set_parameter(w.widget, w.value)
else:
# incorrect configuration index
print("error: incorrect config control parameter value")
return
.set_parameter(p, v)
func _serialize(data): func _serialize(data):
data.type = "remote" data.type = "remote"

View File

@ -68,7 +68,12 @@ static func create_gen(data) -> MMGenBase:
generator = MMGenSwitch.new() generator = MMGenSwitch.new()
else: else:
var file = File.new() var file = File.new()
if file.open("res://addons/material_maker/nodes/"+data.type+".mmg", File.READ) == OK: var gen_path = OS.get_executable_path().get_base_dir()+"/generators"
if file.open(gen_path+"/"+data.type+".mmg", File.READ) == OK:
generator = create_gen(parse_json(file.get_as_text()))
generator.model = data.type
file.close()
elif file.open("res://addons/material_maker/nodes/"+data.type+".mmg", File.READ) == OK:
generator = create_gen(parse_json(file.get_as_text())) generator = create_gen(parse_json(file.get_as_text()))
generator.model = data.type generator.model = data.type
file.close() file.close()

View File

@ -91,7 +91,7 @@ func render_shader(shader, textures, render_size):
render_target_update_mode = Viewport.UPDATE_ONCE render_target_update_mode = Viewport.UPDATE_ONCE
update_worlds() update_worlds()
yield(get_tree(), "idle_frame") yield(get_tree(), "idle_frame")
#yield(get_tree(), "idle_frame") yield(get_tree(), "idle_frame")
rendering = false rendering = false
return true return true
emit_signal("done") emit_signal("done")

View File

@ -27,8 +27,7 @@ func get_drag_data(position):
func _ready(): func _ready():
var root = create_item() var root = create_item()
var lib_path = OS.get_executable_path() var lib_path = OS.get_executable_path().get_base_dir()+"/library/base.json"
lib_path = lib_path.left(max(lib_path.rfind("\\"), lib_path.rfind("/"))+1)+"library/base.json"
if !add_library(lib_path): if !add_library(lib_path):
add_library("res://addons/material_maker/library/base.json") add_library("res://addons/material_maker/library/base.json")
add_library("user://library/user.json") add_library("user://library/user.json")

View File

@ -96,7 +96,6 @@ tab_align = 0
tab_close_display_policy = 1 tab_close_display_policy = 1
[node name="Renderer" parent="." instance=ExtResource( 5 )] [node name="Renderer" parent="." instance=ExtResource( 5 )]
debug_path = ""
[node name="NodeFactory" type="Node" parent="."] [node name="NodeFactory" type="Node" parent="."]
script = ExtResource( 6 ) script = ExtResource( 6 )

View File

@ -8,13 +8,9 @@ func _ready():
func create_node(type): func create_node(type):
var node = null var node = null
if File.new().file_exists("res://addons/material_maker/nodes/"+type+".mmn"): var node_type = load("res://addons/material_maker/nodes/"+type+".tscn")
node = preload("res://addons/material_maker/nodes/node_generic.gd").new() if node_type != null:
node.model = type node = node_type.instance()
else: else:
var node_type = load("res://addons/material_maker/nodes/"+type+".tscn") node = preload("res://addons/material_maker/nodes/generic.tscn").instance()
if node_type != null:
node = node_type.instance()
else:
node = preload("res://addons/material_maker/nodes/generic.tscn").instance()
return node return node

View File

@ -1,51 +0,0 @@
tool
extends "res://addons/material_maker/node_base.gd"
const BLEND_TYPES = [
{ name="Normal", shortname="normal" },
{ name="Dissolve", shortname="dissolve" },
{ name="Multiply", shortname="multiply" },
{ name="Screen", shortname="screen" },
{ name="Overlay", shortname="overlay" },
{ name="Hard Light", shortname="hard_light" },
{ name="Soft Light", shortname="soft_light" },
{ name="Burn", shortname="burn" },
{ name="Dodge", shortname="dodge" },
{ name="Lighten", shortname="lighten" },
{ name="Darken", shortname="darken" },
{ name="Difference", shortname="difference" }
]
func _ready():
$blend_type.clear()
for i in range(BLEND_TYPES.size()):
$blend_type.add_item(BLEND_TYPES[i].name, i)
initialize_properties([ $blend_type, $HBoxContainer/amount ])
func _get_shader_code(uv, slot = 0):
var rv = { defs="", code="" }
var src0 = get_source(0)
var src1 = get_source(1)
var src2 = get_source(2)
if src0 == null or src1 == null:
return rv
var src0_code = src0.get_shader_code(uv)
var src1_code = src1.get_shader_code(uv)
var src2_code = { defs="", code="" }
var amount_str = "%.9f" % parameters.amount
if src2 != null:
src2_code = src2.get_shader_code(uv)
amount_str = src2_code.f
if generated_variants.empty():
rv.defs = src0_code.defs+src1_code.defs+src2_code.defs
var variant_index = generated_variants.find(uv)
if variant_index == -1:
variant_index = generated_variants.size()
generated_variants.append(uv)
rv.code = src0_code.code+src1_code.code+src2_code.code
rv.code += "vec4 %s_%d_rgba = vec4(blend_%s(%s, %s, %s, %s * %s.a), min(1.0, %s.a + %s * %s.a));\n" % [ name, variant_index, BLEND_TYPES[parameters.blend_type].shortname, uv, src0_code.rgb, src1_code.rgb, amount_str, src0_code.rgba, src1_code.rgba, amount_str, src0_code.rgba ]
rv.rgba = "%s_%d_rgba" % [ name, variant_index ]
return rv
func _get_state_variables():
return [ "amount" ]

View File

@ -1,82 +0,0 @@
[gd_scene load_steps=3 format=2]
[ext_resource path="res://addons/material_maker/nodes/blend/blend.gd" type="Script" id=1]
[sub_resource type="Theme" id=1]
[node name="Blend" type="GraphNode"]
margin_left = 1.0
margin_right = 160.0
margin_bottom = 104.0
mouse_filter = 1
theme = SubResource( 1 )
title = "Blend"
show_close = true
slot/0/left_enabled = false
slot/0/left_type = 0
slot/0/left_color = Color( 1, 1, 1, 1 )
slot/0/right_enabled = true
slot/0/right_type = 0
slot/0/right_color = Color( 0, 1, 0, 0.501961 )
slot/1/left_enabled = true
slot/1/left_type = 0
slot/1/left_color = Color( 0, 1, 0, 0.501961 )
slot/1/right_enabled = false
slot/1/right_type = 0
slot/1/right_color = Color( 1, 1, 1, 1 )
slot/2/left_enabled = true
slot/2/left_type = 0
slot/2/left_color = Color( 0, 1, 0, 0.501961 )
slot/2/right_enabled = false
slot/2/right_type = 0
slot/2/right_color = Color( 1, 1, 1, 1 )
slot/3/left_enabled = true
slot/3/left_type = 0
slot/3/left_color = Color( 0.756863, 0.756863, 0.756863, 1 )
slot/3/right_enabled = false
slot/3/right_type = 0
slot/3/right_color = Color( 1, 1, 1, 0.501961 )
script = ExtResource( 1 )
[node name="blend_type" type="OptionButton" parent="."]
margin_left = 16.0
margin_top = 24.0
margin_right = 143.0
margin_bottom = 44.0
text = "Normal"
items = [ "Normal", null, false, 0, null, "Dissolve", null, false, 1, null, "Multiply", null, false, 2, null, "Screen", null, false, 3, null, "Overlay", null, false, 4, null, "Hard Light", null, false, 5, null, "Soft Light", null, false, 6, null, "Burn", null, false, 7, null, "Dodge", null, false, 8, null, "Lighten", null, false, 9, null, "Darken", null, false, 10, null, "Difference", null, false, 11, null ]
selected = 0
[node name="Label1" type="Label" parent="."]
margin_left = 16.0
margin_top = 44.0
margin_right = 143.0
margin_bottom = 58.0
text = "Source 1"
[node name="Label2" type="Label" parent="."]
margin_left = 16.0
margin_top = 59.0
margin_right = 143.0
margin_bottom = 73.0
text = "Source 2"
[node name="HBoxContainer" type="HBoxContainer" parent="."]
margin_left = 16.0
margin_top = 74.0
margin_right = 143.0
margin_bottom = 98.0
[node name="Label3" type="Label" parent="HBoxContainer"]
margin_top = 5.0
margin_right = 49.0
margin_bottom = 19.0
text = "Opacity"
[node name="amount" type="SpinBox" parent="HBoxContainer"]
margin_left = 53.0
margin_right = 127.0
margin_bottom = 24.0
max_value = 1.0
step = 0.05
value = 0.5

View File

@ -1,37 +0,0 @@
tool
extends "res://addons/material_maker/node_base.gd"
func _get_shader_code(uv, slot = 0):
var rv = { defs="", code="" }
var src0 = get_source(0)
var src1 = get_source(1)
var src2 = get_source(2)
var src3 = get_source(3)
var src0_code = { defs="", code="", f="0.0" }
var src1_code = { defs="", code="", f="0.0" }
var src2_code = { defs="", code="", f="0.0" }
var src3_code = { defs="", code="", f="1.0" }
if src0 != null:
src0_code = src0.get_shader_code(uv)
if src1 != null:
src1_code = src1.get_shader_code(uv)
if src2 != null:
src2_code = src2.get_shader_code(uv)
if src3 != null:
src3_code = src3.get_shader_code(uv)
if generated_variants.empty():
rv.defs = src0_code.defs;
rv.defs += src1_code.defs;
rv.defs += src2_code.defs;
rv.defs += src3_code.defs;
var variant_index = generated_variants.find(uv)
if variant_index == -1:
variant_index = generated_variants.size()
generated_variants.append(uv)
rv.code = src0_code.code
rv.code += src1_code.code
rv.code += src2_code.code
rv.code += src3_code.code
rv.code += "vec4 %s_%d_rgba = vec4(%s, %s, %s, %s);\n" % [ name, variant_index, src0_code.f, src1_code.f, src2_code.f, src3_code.f ]
rv.rgba = "%s_%d_rgba" % [ name, variant_index ]
return rv

View File

@ -1,143 +0,0 @@
[gd_scene load_steps=3 format=2]
[ext_resource path="res://addons/material_maker/nodes/combine/combine.gd" type="Script" id=1]
[sub_resource type="Theme" id=1]
[node name="Combine" type="GraphNode"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 204.0
margin_top = 72.0
margin_right = 306.0
margin_bottom = 145.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
mouse_filter = 1
mouse_default_cursor_shape = 0
size_flags_horizontal = 1
size_flags_vertical = 1
theme = SubResource( 1 )
title = "Combine"
offset = Vector2( 0, 0 )
show_close = true
resizable = false
selected = false
comment = false
overlay = 0
slot/0/left_enabled = true
slot/0/left_type = 0
slot/0/left_color = Color( 0.756863, 0.756863, 0.756863, 1 )
slot/0/right_enabled = true
slot/0/right_type = 0
slot/0/right_color = Color( 0.414353, 1, 0.388902, 0.353608 )
slot/1/left_enabled = true
slot/1/left_type = 0
slot/1/left_color = Color( 0.756863, 0.756863, 0.756863, 1 )
slot/1/right_enabled = false
slot/1/right_type = 0
slot/1/right_color = Color( 0.498039, 0.498039, 1, 1 )
slot/2/left_enabled = true
slot/2/left_type = 0
slot/2/left_color = Color( 0.756863, 0.756863, 0.756863, 1 )
slot/2/right_enabled = false
slot/2/right_type = 0
slot/2/right_color = Color( 0.498039, 0.498039, 1, 1 )
slot/3/left_enabled = true
slot/3/left_type = 0
slot/3/left_color = Color( 0.756863, 0.756863, 0.756863, 1 )
slot/3/right_enabled = false
slot/3/right_type = 0
slot/3/right_color = Color( 1, 1, 1, 1 )
script = ExtResource( 1 )
_sections_unfolded = [ "Theme", "slot", "slot/0", "slot/1", "slot/2", "slot/3" ]
[node name="R" type="Label" parent="." index="0"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 16.0
margin_top = 24.0
margin_right = 86.0
margin_bottom = 38.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
mouse_filter = 2
mouse_default_cursor_shape = 0
size_flags_horizontal = 1
size_flags_vertical = 4
text = "R"
percent_visible = 1.0
lines_skipped = 0
max_lines_visible = -1
[node name="G" type="Label" parent="." index="1"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 16.0
margin_top = 38.0
margin_right = 86.0
margin_bottom = 52.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
mouse_filter = 2
mouse_default_cursor_shape = 0
size_flags_horizontal = 1
size_flags_vertical = 4
text = "G"
percent_visible = 1.0
lines_skipped = 0
max_lines_visible = -1
[node name="B" type="Label" parent="." index="2"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 16.0
margin_top = 53.0
margin_right = 86.0
margin_bottom = 67.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
mouse_filter = 2
mouse_default_cursor_shape = 0
size_flags_horizontal = 1
size_flags_vertical = 4
text = "B"
percent_visible = 1.0
lines_skipped = 0
max_lines_visible = -1
[node name="A" type="Label" parent="." index="3"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 16.0
margin_top = 68.0
margin_right = 86.0
margin_bottom = 82.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
mouse_filter = 2
mouse_default_cursor_shape = 0
size_flags_horizontal = 1
size_flags_vertical = 4
text = "A"
percent_visible = 1.0
lines_skipped = 0
max_lines_visible = -1

View File

@ -1,21 +0,0 @@
tool
extends "res://addons/material_maker/node_base.gd"
const OUTPUTS = [ "r", "g", "b", "a" ]
func _get_shader_code(uv, output = 0):
var rv = { defs="", code="" }
var src = get_source()
var src_code = { defs="", code="", rgba="vec4(0.0)" }
if src != null:
src_code = src.get_shader_code(uv)
if generated_variants.empty():
rv.defs = src_code.defs;
var variant_index = generated_variants.find(uv)
if variant_index == -1:
variant_index = generated_variants.size()
generated_variants.append(uv)
rv.code = src_code.code
rv.code += "vec4 %s_%d_rgba = %s;\n" % [ name, variant_index, src_code.rgba ]
rv.f = "%s_%d_rgba.%s" % [ name, variant_index, OUTPUTS[output] ]
return rv

View File

@ -1,147 +0,0 @@
[gd_scene load_steps=3 format=2]
[ext_resource path="res://addons/material_maker/nodes/decompose/decompose.gd" type="Script" id=1]
[sub_resource type="Theme" id=1]
[node name="Decompose" type="GraphNode"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 204.0
margin_top = 72.0
margin_right = 306.0
margin_bottom = 145.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
mouse_filter = 1
mouse_default_cursor_shape = 0
size_flags_horizontal = 1
size_flags_vertical = 1
theme = SubResource( 1 )
title = "Decompose"
offset = Vector2( 0, 0 )
show_close = true
resizable = false
selected = false
comment = false
overlay = 0
slot/0/left_enabled = true
slot/0/left_type = 0
slot/0/left_color = Color( 0.411765, 1, 0.388235, 0.352941 )
slot/0/right_enabled = true
slot/0/right_type = 0
slot/0/right_color = Color( 0.756863, 0.756863, 0.756863, 1 )
slot/1/left_enabled = false
slot/1/left_type = 0
slot/1/left_color = Color( 0.756863, 0.756863, 0.756863, 1 )
slot/1/right_enabled = true
slot/1/right_type = 0
slot/1/right_color = Color( 0.756863, 0.756863, 0.756863, 1 )
slot/2/left_enabled = false
slot/2/left_type = 0
slot/2/left_color = Color( 0.756863, 0.756863, 0.756863, 1 )
slot/2/right_enabled = true
slot/2/right_type = 0
slot/2/right_color = Color( 0.756863, 0.756863, 0.756863, 1 )
slot/3/left_enabled = false
slot/3/left_type = 0
slot/3/left_color = Color( 1, 1, 1, 1 )
slot/3/right_enabled = true
slot/3/right_type = 0
slot/3/right_color = Color( 0.756863, 0.756863, 0.756863, 1 )
script = ExtResource( 1 )
_sections_unfolded = [ "Theme", "slot", "slot/0", "slot/1", "slot/2", "slot/3" ]
[node name="R" type="Label" parent="." index="0"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 16.0
margin_top = 24.0
margin_right = 106.0
margin_bottom = 38.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
mouse_filter = 2
mouse_default_cursor_shape = 0
size_flags_horizontal = 1
size_flags_vertical = 4
text = "R"
align = 2
percent_visible = 1.0
lines_skipped = 0
max_lines_visible = -1
[node name="G" type="Label" parent="." index="1"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 16.0
margin_top = 38.0
margin_right = 106.0
margin_bottom = 52.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
mouse_filter = 2
mouse_default_cursor_shape = 0
size_flags_horizontal = 1
size_flags_vertical = 4
text = "G"
align = 2
percent_visible = 1.0
lines_skipped = 0
max_lines_visible = -1
[node name="B" type="Label" parent="." index="2"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 16.0
margin_top = 53.0
margin_right = 106.0
margin_bottom = 67.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
mouse_filter = 2
mouse_default_cursor_shape = 0
size_flags_horizontal = 1
size_flags_vertical = 4
text = "B"
align = 2
percent_visible = 1.0
lines_skipped = 0
max_lines_visible = -1
[node name="A" type="Label" parent="." index="3"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 16.0
margin_top = 68.0
margin_right = 106.0
margin_bottom = 82.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
mouse_filter = 2
mouse_default_cursor_shape = 0
size_flags_horizontal = 1
size_flags_vertical = 4
text = "A"
align = 2
percent_visible = 1.0
lines_skipped = 0
max_lines_visible = -1

View File

@ -1,3 +1,4 @@
tool
extends HBoxContainer extends HBoxContainer
func connect_buttons(object, edit_fct, load_fct, save_fct): func connect_buttons(object, edit_fct, load_fct, save_fct):

View File

@ -1,64 +0,0 @@
tool
extends "res://addons/material_maker/node_base.gd"
var input_shader = ""
var input_texture
var final_texture
const CONVOLUTION = {
x=1,
y=1,
kernel=[
Vector3(-1, -1, 0), Vector3(0, -2, 0), Vector3(1, -1, 0),
Vector3(-2, 0, 0), 0, Vector3(2, 0, 0),
Vector3(-1, 1, 0), Vector3(0, 2, 0), Vector3(1, 1, 0),
],
epsilon=1.0/1024,
normalize=true,
translate_before_normalize=Vector3(0.0, 0.0, -1.0),
scale_before_normalize=0.5,
translate=Vector3(0.5, 0.5, 0.5),
scale=0.5
}
func _ready():
# init size widget
$HBoxContainer1/size.clear()
for i in range(7):
$HBoxContainer1/size.add_item(str(int(pow(2, 5+i))), i)
parameters.size = 2
$HBoxContainer1/size.selected = parameters.size
input_texture = ImageTexture.new()
final_texture = ImageTexture.new()
initialize_properties([ $HBoxContainer1/size, $HBoxContainer2/amount ])
func _rerender():
get_parent().renderer.precalculate_shader(input_shader, get_source().get_textures(), int(pow(2, 5+parameters.size)), input_texture, self, "pass_1", [])
func pass_1():
var convolution = CONVOLUTION
convolution.epsilon=1.0/pow(2, 5+parameters.size)
convolution.scale_before_normalize = pow(2, parameters.size-1)*parameters.amount
get_parent().renderer.precalculate_shader(get_convolution_shader(convolution), { input=input_texture}, int(pow(2, 5+parameters.size)), final_texture, self, "rerender_targets", [])
func get_textures():
var list = {}
list[name] = final_texture
return list
func _get_shader_code(uv, slot = 0):
var rv = { defs="", code="" }
var src = get_source()
if src == null:
return rv
input_shader = get_parent().renderer.generate_shader(src.get_shader_code_with_globals("UV"))
_rerender()
if generated_variants.empty():
rv.defs = "uniform sampler2D %s_tex;\n" % [ name ]
var variant_index = generated_variants.find(uv)
if variant_index == -1:
variant_index = generated_variants.size()
generated_variants.append(uv)
rv.code = "vec3 %s_%d_rgb = texture(%s_tex, %s).rgb;\n" % [ name, variant_index, name, uv ]
rv.rgb = "%s_%d_rgb" % [ name, variant_index ]
return rv

View File

@ -1,184 +0,0 @@
[gd_scene load_steps=3 format=2]
[ext_resource path="res://addons/material_maker/nodes/normal_map/normal_map.gd" type="Script" id=1]
[sub_resource type="Theme" id=1]
[node name="NormalMap" type="GraphNode" index="0"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 1.0
margin_top = 1.0
margin_right = 173.0
margin_bottom = 75.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
mouse_filter = 1
mouse_default_cursor_shape = 0
size_flags_horizontal = 1
size_flags_vertical = 1
theme = SubResource( 1 )
title = "Normal Map"
offset = Vector2( 0, 0 )
show_close = true
resizable = false
selected = false
comment = false
overlay = 0
slot/0/left_enabled = true
slot/0/left_type = 0
slot/0/left_color = Color( 0.756863, 0.756863, 0.756863, 1 )
slot/0/right_enabled = true
slot/0/right_type = 0
slot/0/right_color = Color( 0.5, 0.5, 1, 1 )
slot/1/left_enabled = false
slot/1/left_type = 0
slot/1/left_color = Color( 1, 1, 1, 1 )
slot/1/right_enabled = false
slot/1/right_type = 0
slot/1/right_color = Color( 1, 1, 1, 1 )
script = ExtResource( 1 )
_sections_unfolded = [ "Theme", "slot", "slot/0" ]
[node name="HBoxContainer1" type="HBoxContainer" parent="." index="0"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 16.0
margin_top = 24.0
margin_right = 156.0
margin_bottom = 44.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
mouse_filter = 1
mouse_default_cursor_shape = 0
size_flags_horizontal = 3
size_flags_vertical = 1
alignment = 0
_sections_unfolded = [ "Size Flags" ]
[node name="Label" type="Label" parent="HBoxContainer1" index="0"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_top = 3.0
margin_right = 61.0
margin_bottom = 17.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
mouse_filter = 2
mouse_default_cursor_shape = 0
size_flags_horizontal = 3
size_flags_vertical = 4
text = "Grid size:"
percent_visible = 1.0
lines_skipped = 0
max_lines_visible = -1
_sections_unfolded = [ "Anchor", "Margin", "Size Flags" ]
[node name="size" type="OptionButton" parent="HBoxContainer1" index="1"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 65.0
margin_right = 140.0
margin_bottom = 20.0
rect_min_size = Vector2( 75, 0 )
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
focus_mode = 2
mouse_filter = 0
mouse_default_cursor_shape = 0
size_flags_horizontal = 11
size_flags_vertical = 1
toggle_mode = false
action_mode = 0
enabled_focus_mode = 2
shortcut = null
group = null
text = "1024"
flat = false
align = 0
items = [ "32", null, false, 0, null, "64", null, false, 1, null, "128", null, false, 2, null, "256", null, false, 3, null, "512", null, false, 4, null, "1024", null, false, 5, null, "2048", null, false, 6, null ]
selected = 5
_sections_unfolded = [ "Anchor", "Caret", "Placeholder", "Rect", "Size Flags" ]
[node name="HBoxContainer2" type="HBoxContainer" parent="." index="1"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 16.0
margin_top = 44.0
margin_right = 156.0
margin_bottom = 68.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
mouse_filter = 1
mouse_default_cursor_shape = 0
size_flags_horizontal = 3
size_flags_vertical = 1
alignment = 0
_sections_unfolded = [ "Size Flags" ]
[node name="Label" type="Label" parent="HBoxContainer2" index="0"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_top = 5.0
margin_right = 62.0
margin_bottom = 19.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
mouse_filter = 2
mouse_default_cursor_shape = 0
size_flags_horizontal = 3
size_flags_vertical = 4
text = "Amount:"
percent_visible = 1.0
lines_skipped = 0
max_lines_visible = -1
_sections_unfolded = [ "Anchor", "Margin", "Size Flags" ]
[node name="amount" type="SpinBox" parent="HBoxContainer2" index="1"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_left = 66.0
margin_right = 140.0
margin_bottom = 24.0
rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false
mouse_filter = 0
mouse_default_cursor_shape = 0
size_flags_horizontal = 1
size_flags_vertical = 1
min_value = 0.0
max_value = 1.0
step = 0.05
page = 0.0
value = 0.5
exp_edit = false
rounded = false
editable = true
prefix = ""
suffix = ""
_sections_unfolded = [ "Caret", "Placeholder" ]

View File

@ -2,9 +2,6 @@ tool
extends MMGraphNodeGeneric extends MMGraphNodeGeneric
class_name MMGraphNodeRemote class_name MMGraphNodeRemote
const LinkedControl = preload("res://addons/material_maker/widgets/linked_widgets/linked_control.tscn")
const ConfigControl = preload("res://addons/material_maker/widgets/linked_widgets/config_control.tscn")
func add_control(text, control): func add_control(text, control):
var index = $Controls.get_child_count() / 4 var index = $Controls.get_child_count() / 4
var label = preload("res://addons/material_maker/widgets/linked_widgets/editable_label.tscn").instance() var label = preload("res://addons/material_maker/widgets/linked_widgets/editable_label.tscn").instance()
@ -32,10 +29,30 @@ func update_node():
control.name = p.name control.name = p.name
controls[control.name] = control controls[control.name] = control
add_control(generator.widgets[i].label, control) add_control(generator.widgets[i].label, control)
if generator.widgets[i].type == "config_control":
var current = null
if control.get_item_count() > 0:
control.selected = generator.parameters["param"+str(i)]
current = control.get_item_text(control.selected)
control.add_separator()
control.add_item("<add configuration>")
if current != null:
control.add_separator()
control.add_item("<update "+current+">")
control.add_item("<remove "+current+">")
i += 1 i += 1
rect_size = Vector2(0, 0) rect_size = Vector2(0, 0)
initialize_properties() initialize_properties()
func _on_value_changed(new_value, variable):
var param_index = variable.trim_prefix("param").to_int()
var widget = generator.widgets[param_index]
if widget.type == "config_control" and new_value >= widget.configurations.size():
var command = new_value - widget.configurations.size()
print(command)
else:
._on_value_changed(new_value, variable)
func _on_AddLink_pressed(): func _on_AddLink_pressed():
var widget = Control.new() var widget = Control.new()
add_control("Unnamed", widget) add_control("Unnamed", widget)

View File

@ -1,25 +0,0 @@
tool
extends "res://addons/material_maker/node_base.gd"
func _ready():
initialize_properties([ $source ])
func reset():
generated = false
generated_variants = [ [], [] ]
func _get_shader_code(uv, index = 0):
var rv = { defs="", code="" }
var src = get_source(2*parameters.source+index)
var src_code = { defs="", code="", rgb="0.0" }
if src != null:
src_code = src.get_shader_code(uv)
if generated_variants[index].empty():
rv.defs = src_code.defs;
var variant_index = generated_variants[index].find(uv)
if variant_index == -1:
variant_index = generated_variants[index].size()
generated_variants[index].append(uv)
rv.code = src_code.code
rv.rgb = src_code.rgb
return rv

View File

@ -1,107 +0,0 @@
[gd_scene load_steps=3 format=2]
[ext_resource path="res://addons/material_maker/nodes/switch/switch.gd" type="Script" id=1]
[sub_resource type="Theme" id=1]
[node name="Switch" type="GraphNode"]
margin_left = 1.0
margin_top = 1.0
margin_right = 100.0
margin_bottom = 110.0
mouse_filter = 1
theme = SubResource( 1 )
title = "Switch"
show_close = true
slot/0/left_enabled = false
slot/0/left_type = 0
slot/0/left_color = Color( 0.498039, 0.498039, 1, 1 )
slot/0/right_enabled = false
slot/0/right_type = 0
slot/0/right_color = Color( 0.498039, 0.498039, 1, 1 )
slot/1/left_enabled = true
slot/1/left_type = 0
slot/1/left_color = Color( 0.498039, 0.498039, 1, 1 )
slot/1/right_enabled = false
slot/1/right_type = 0
slot/1/right_color = Color( 0.498039, 0.498039, 1, 1 )
slot/2/left_enabled = true
slot/2/left_type = 0
slot/2/left_color = Color( 0.498039, 0.498039, 1, 1 )
slot/2/right_enabled = true
slot/2/right_type = 0
slot/2/right_color = Color( 0.498039, 0.498039, 1, 1 )
slot/3/left_enabled = true
slot/3/left_type = 0
slot/3/left_color = Color( 0.498039, 0.498039, 1, 1 )
slot/3/right_enabled = true
slot/3/right_type = 0
slot/3/right_color = Color( 0.498039, 0.498039, 1, 1 )
slot/4/left_enabled = true
slot/4/left_type = 0
slot/4/left_color = Color( 0.498039, 0.498039, 1, 1 )
slot/4/right_enabled = false
slot/4/right_type = 0
slot/4/right_color = Color( 1, 0, 0, 1 )
script = ExtResource( 1 )
[node name="source" type="OptionButton" parent="."]
margin_left = 16.0
margin_top = 24.0
margin_right = 83.0
margin_bottom = 44.0
text = "1"
items = [ "1", null, false, 0, null, "2", null, false, 1, null ]
selected = 0
[node name="Label1" type="Label" parent="."]
margin_left = 16.0
margin_top = 44.0
margin_right = 83.0
margin_bottom = 58.0
text = "A1"
[node name="HBoxContainer1" type="HBoxContainer" parent="."]
margin_left = 16.0
margin_top = 59.0
margin_right = 83.0
margin_bottom = 73.0
[node name="Label1" type="Label" parent="HBoxContainer1"]
margin_right = 54.0
margin_bottom = 14.0
size_flags_horizontal = 3
text = "B1"
[node name="Label2" type="Label" parent="HBoxContainer1"]
margin_left = 58.0
margin_right = 67.0
margin_bottom = 14.0
size_flags_horizontal = 9
text = "A"
[node name="HBoxContainer2" type="HBoxContainer" parent="."]
margin_left = 16.0
margin_top = 74.0
margin_right = 83.0
margin_bottom = 88.0
[node name="Label1" type="Label" parent="HBoxContainer2"]
margin_right = 54.0
margin_bottom = 14.0
size_flags_horizontal = 3
text = "A2"
[node name="Label2" type="Label" parent="HBoxContainer2"]
margin_left = 58.0
margin_right = 67.0
margin_bottom = 14.0
size_flags_horizontal = 9
text = "B"
[node name="Label2" type="Label" parent="."]
margin_left = 16.0
margin_top = 89.0
margin_right = 83.0
margin_bottom = 103.0
text = "B2"

View File

@ -1,39 +0,0 @@
tool
extends "res://addons/material_maker/node_base.gd"
func _ready():
set_slot(0, true, 0, Color(0.5, 0.5, 1), true, 0, Color(0.5, 0.5, 1))
initialize_properties([ $HBoxContainer1/translate_x, $HBoxContainer2/translate_y, $HBoxContainer3/rotate, $HBoxContainer4/scale_x, $HBoxContainer5/scale_y, $repeat ])
func _get_shader_code(uv, slot = 0):
var rv = { defs="", code="" }
var src = get_source()
if src == null:
return rv
var variant_index = generated_variants.find(uv)
if variant_index == -1:
variant_index = generated_variants.size()
generated_variants.append(uv)
var inputs = [ "", "", "", "", "" ]
for i in range(5):
var tsrc = get_source(i+1)
if tsrc != null:
var tsrc_code = tsrc.get_shader_code(uv)
if generated_variants.size() == 1:
rv.defs += tsrc_code.defs
rv.code += tsrc_code.code
inputs[i] = "*(2.0*(%s)-1.0)" % tsrc_code.f
rv.code += "vec2 %s_%d_uv = %s(%s, vec2(%.9f%s, %.9f%s), %.9f%s, vec2(%.9f%s, %.9f%s));\n" % [ name, variant_index, "transform_repeat" if parameters.repeat else "transform_norepeat", uv, parameters.translate_x, inputs[0], parameters.translate_y, inputs[1], PI*parameters.rotate/180.0, inputs[2], parameters.scale_x, inputs[3], parameters.scale_y, inputs[4] ]
var src_code = src.get_shader_code("%s_%d_uv" % [ name, variant_index ])
if rv.code != "":
if generated_variants.size() == 1:
rv.defs += src_code.defs
rv.code += src_code.code
rv.rgba = src_code.rgba
return rv
func deserialize(data):
if data.has("scale"):
parameters.scale_x = data.scale
parameters.scale_y = data.scale
.deserialize(data)

View File

@ -1,216 +0,0 @@
[gd_scene load_steps=6 format=2]
[ext_resource path="res://addons/material_maker/nodes/transform/transform.gd" type="Script" id=1]
[sub_resource type="StyleBoxEmpty" id=1]
[sub_resource type="StyleBoxEmpty" id=2]
[sub_resource type="StyleBoxEmpty" id=3]
[sub_resource type="StyleBoxEmpty" id=4]
[node name="Transform" type="GraphNode"]
margin_left = 1.0
margin_top = 1.0
margin_right = 185.0
margin_bottom = 179.0
mouse_filter = 1
custom_styles/position = SubResource( 1 )
custom_styles/defaultfocus = SubResource( 2 )
custom_styles/breakpoint = SubResource( 3 )
custom_styles/defaultframe = SubResource( 4 )
title = "Transform"
show_close = true
slot/0/left_enabled = true
slot/0/left_type = 0
slot/0/left_color = Color( 0.5, 0.5, 1, 1 )
slot/0/right_enabled = true
slot/0/right_type = 0
slot/0/right_color = Color( 0.5, 0.5, 1, 1 )
slot/1/left_enabled = true
slot/1/left_type = 0
slot/1/left_color = Color( 0.760784, 0.760784, 0.760784, 1 )
slot/1/right_enabled = false
slot/1/right_type = 0
slot/1/right_color = Color( 1, 1, 1, 1 )
slot/2/left_enabled = true
slot/2/left_type = 0
slot/2/left_color = Color( 0.760784, 0.760784, 0.760784, 1 )
slot/2/right_enabled = false
slot/2/right_type = 0
slot/2/right_color = Color( 1, 1, 1, 1 )
slot/3/left_enabled = true
slot/3/left_type = 0
slot/3/left_color = Color( 0.760784, 0.760784, 0.760784, 1 )
slot/3/right_enabled = false
slot/3/right_type = 0
slot/3/right_color = Color( 1, 1, 1, 1 )
slot/4/left_enabled = true
slot/4/left_type = 0
slot/4/left_color = Color( 0.760784, 0.760784, 0.760784, 1 )
slot/4/right_enabled = false
slot/4/right_type = 0
slot/4/right_color = Color( 1, 1, 1, 1 )
slot/5/left_enabled = true
slot/5/left_type = 0
slot/5/left_color = Color( 0.761719, 0.761719, 0.761719, 1 )
slot/5/right_enabled = false
slot/5/right_type = 0
slot/5/right_color = Color( 1, 1, 1, 1 )
slot/6/left_enabled = false
slot/6/left_type = 0
slot/6/left_color = Color( 1, 1, 1, 1 )
slot/6/right_enabled = false
slot/6/right_type = 0
slot/6/right_color = Color( 1, 1, 1, 1 )
script = ExtResource( 1 )
[node name="HBoxContainer0" type="HBoxContainer" parent="."]
margin_left = 16.0
margin_top = 24.0
margin_right = 168.0
margin_bottom = 44.0
[node name="Input" type="Label" parent="HBoxContainer0"]
margin_right = 74.0
margin_bottom = 20.0
rect_min_size = Vector2( 0, 20 )
size_flags_horizontal = 3
text = "Input"
valign = 1
[node name="Output" type="Label" parent="HBoxContainer0"]
margin_left = 78.0
margin_right = 152.0
margin_bottom = 20.0
rect_min_size = Vector2( 0, 20 )
size_flags_horizontal = 3
text = "Output"
align = 2
valign = 1
[node name="HBoxContainer1" type="HBoxContainer" parent="."]
margin_left = 16.0
margin_top = 44.0
margin_right = 168.0
margin_bottom = 68.0
[node name="Label" type="Label" parent="HBoxContainer1"]
margin_top = 5.0
margin_right = 74.0
margin_bottom = 19.0
size_flags_horizontal = 3
text = "Translate X:"
[node name="translate_x" type="SpinBox" parent="HBoxContainer1"]
margin_left = 78.0
margin_right = 152.0
margin_bottom = 24.0
size_flags_horizontal = 0
size_flags_vertical = 4
min_value = -1.0
max_value = 1.0
step = 0.05
[node name="HBoxContainer2" type="HBoxContainer" parent="."]
margin_left = 16.0
margin_top = 69.0
margin_right = 168.0
margin_bottom = 93.0
[node name="Label" type="Label" parent="HBoxContainer2"]
margin_top = 5.0
margin_right = 74.0
margin_bottom = 19.0
size_flags_horizontal = 3
text = "Translate Y:"
[node name="translate_y" type="SpinBox" parent="HBoxContainer2"]
margin_left = 78.0
margin_right = 152.0
margin_bottom = 24.0
size_flags_horizontal = 0
size_flags_vertical = 4
min_value = -1.0
max_value = 1.0
step = 0.05
[node name="HBoxContainer3" type="HBoxContainer" parent="."]
margin_left = 16.0
margin_top = 94.0
margin_right = 168.0
margin_bottom = 118.0
[node name="Label" type="Label" parent="HBoxContainer3"]
margin_top = 5.0
margin_right = 74.0
margin_bottom = 19.0
size_flags_horizontal = 3
text = "Rotate:"
[node name="rotate" type="SpinBox" parent="HBoxContainer3"]
margin_left = 78.0
margin_right = 152.0
margin_bottom = 24.0
size_flags_horizontal = 0
size_flags_vertical = 4
min_value = -720.0
max_value = 720.0
step = 5.0
[node name="HBoxContainer4" type="HBoxContainer" parent="."]
margin_left = 16.0
margin_top = 119.0
margin_right = 168.0
margin_bottom = 143.0
[node name="Label" type="Label" parent="HBoxContainer4"]
margin_top = 5.0
margin_right = 74.0
margin_bottom = 19.0
size_flags_horizontal = 3
text = "Scale X:"
[node name="scale_x" type="SpinBox" parent="HBoxContainer4"]
margin_left = 78.0
margin_right = 152.0
margin_bottom = 24.0
size_flags_horizontal = 0
size_flags_vertical = 4
min_value = 0.05
max_value = 50.0
step = 0.05
value = 1.0
[node name="HBoxContainer5" type="HBoxContainer" parent="."]
margin_left = 16.0
margin_top = 144.0
margin_right = 168.0
margin_bottom = 168.0
[node name="Label" type="Label" parent="HBoxContainer5"]
margin_top = 5.0
margin_right = 74.0
margin_bottom = 19.0
size_flags_horizontal = 3
text = "Scale Y:"
[node name="scale_y" type="SpinBox" parent="HBoxContainer5"]
margin_left = 78.0
margin_right = 152.0
margin_bottom = 24.0
size_flags_horizontal = 0
size_flags_vertical = 4
min_value = 0.05
max_value = 50.0
step = 0.05
value = 1.0
[node name="repeat" type="CheckBox" parent="."]
margin_left = 16.0
margin_top = 169.0
margin_right = 168.0
margin_bottom = 193.0
pressed = true
text = "Repeat"

View File

@ -1,32 +0,0 @@
tool
extends "res://addons/material_maker/node_base.gd"
func _ready():
initialize_properties([ $amount ])
func _get_shader_code(uv, slot = 0):
var epsilon = 0.01
var rv = { defs="", code="" }
var src0 = get_source(0)
var src1 = get_source(1)
if src0 == null || src1 == null:
return rv
var variant_index = generated_variants.find(uv)
if variant_index == -1:
variant_index = generated_variants.size()
generated_variants.append(uv)
var src1_code0 = src1.get_shader_code("fract(%s+vec2(%.9f, 0.0))" % [ uv, epsilon ])
var src1_code1 = src1.get_shader_code("fract(%s-vec2(%.9f, 0.0))" % [ uv, epsilon ])
var src1_code2 = src1.get_shader_code("fract(%s+vec2(0.0, %.9f))" % [ uv, epsilon ])
var src1_code3 = src1.get_shader_code("fract(%s-vec2(0.0, %.9f))" % [ uv, epsilon ])
rv.defs = src1_code0.defs
rv.code = src1_code0.code+src1_code1.code+src1_code2.code+src1_code3.code
rv.code += "vec2 %s_%d_uv = %s+%.9f*vec2((%s)-(%s), (%s)-(%s));\n" % [ name, variant_index, uv, parameters.amount, src1_code0.f, src1_code1.f, src1_code2.f, src1_code3.f ]
var src0_code = src0.get_shader_code("%s_%d_uv" % [ name, variant_index ])
rv.defs += src0_code.defs
rv.code += src0_code.code
rv.code += "vec3 %s_%d_rgb = %s;\n" % [ name, variant_index, src0_code.rgb ]
rv.code += "float %s_%d_f = %s;\n" % [ name, variant_index, src0_code.f ]
rv.rgb = "%s_%d_rgb" % [ name, variant_index ]
rv.f = "%s_%d_f" % [ name, variant_index ]
return rv

View File

@ -1,58 +0,0 @@
[gd_scene load_steps=3 format=2]
[ext_resource path="res://addons/material_maker/nodes/warp/warp.gd" type="Script" id=1]
[sub_resource type="Theme" id=1]
[node name="Warp" type="GraphNode"]
margin_left = 1.0
margin_top = 1.0
margin_right = 91.0
margin_bottom = 84.0
mouse_filter = 1
theme = SubResource( 1 )
title = "Warp"
show_close = true
slot/0/left_enabled = true
slot/0/left_type = 0
slot/0/left_color = Color( 0.5, 0.5, 1, 1 )
slot/0/right_enabled = true
slot/0/right_type = 0
slot/0/right_color = Color( 0.5, 0.5, 1, 1 )
slot/1/left_enabled = true
slot/1/left_type = 0
slot/1/left_color = Color( 0.756863, 0.756863, 0.756863, 1 )
slot/1/right_enabled = false
slot/1/right_type = 0
slot/1/right_color = Color( 0.5, 0.5, 1, 1 )
slot/2/left_enabled = false
slot/2/left_type = 0
slot/2/left_color = Color( 1, 1, 1, 1 )
slot/2/right_enabled = false
slot/2/right_type = 0
slot/2/right_color = Color( 1, 1, 1, 1 )
script = ExtResource( 1 )
[node name="Label1" type="Label" parent="."]
margin_left = 16.0
margin_top = 24.0
margin_right = 90.0
margin_bottom = 38.0
text = "Source"
[node name="Label2" type="Label" parent="."]
margin_left = 16.0
margin_top = 38.0
margin_right = 90.0
margin_bottom = 52.0
text = "Displace"
[node name="amount" type="SpinBox" parent="."]
margin_left = 16.0
margin_top = 53.0
margin_right = 90.0
margin_bottom = 77.0
max_value = 1.0
step = 0.05
value = 0.5
[connection signal="close_request" from="." to="." method="queue_free"]