mirror of
https://github.com/Relintai/material-maker.git
synced 2025-02-27 12:04:19 +01:00
Updated custom file generation in export and Godot export
This commit is contained in:
parent
6883561beb
commit
4d73ff1a2b
@ -70,7 +70,6 @@ func set_parameter(p, v) -> void:
|
|||||||
update_preview()
|
update_preview()
|
||||||
|
|
||||||
func source_changed(input_index : int) -> void:
|
func source_changed(input_index : int) -> void:
|
||||||
print("source_changed "+str(input_index))
|
|
||||||
for t in TEXTURE_LIST:
|
for t in TEXTURE_LIST:
|
||||||
if t.has("sources") and t.sources.find(input_index) != -1:
|
if t.has("sources") and t.sources.find(input_index) != -1:
|
||||||
generated_textures[t.texture] = null
|
generated_textures[t.texture] = null
|
||||||
@ -163,7 +162,7 @@ func update_material(m, file_prefix = null) -> void:
|
|||||||
else:
|
else:
|
||||||
m.normal_enabled = false
|
m.normal_enabled = false
|
||||||
# Depth
|
# Depth
|
||||||
if get_source(INPUT_DEPTH) != null and parameters.depth > 0:
|
if get_source(INPUT_DEPTH) != null and parameters.depth_scale > 0:
|
||||||
m.depth_enabled = true
|
m.depth_enabled = true
|
||||||
m.depth_deep_parallax = true
|
m.depth_deep_parallax = true
|
||||||
m.depth_scale = parameters.depth_scale * 0.2
|
m.depth_scale = parameters.depth_scale * 0.2
|
||||||
@ -203,11 +202,28 @@ func get_export_extension(profile : String) -> String:
|
|||||||
|
|
||||||
func subst_string(s : String, export_context : Dictionary) -> String:
|
func subst_string(s : String, export_context : Dictionary) -> String:
|
||||||
for k in export_context.keys():
|
for k in export_context.keys():
|
||||||
s = s.replace("$("+k+")", export_context[k])
|
s = s.replace(k, export_context[k])
|
||||||
for input_index in range(shader_model.inputs.size()):
|
while (true):
|
||||||
var input = shader_model.inputs[input_index]
|
var search_string = "$(expr:"
|
||||||
var is_input_connected = "true" if get_source(input_index) != null else "false"
|
var position = s.find(search_string)
|
||||||
s = s.replace("$(connected:"+input.name+")", is_input_connected)
|
if position == -1:
|
||||||
|
break
|
||||||
|
var parenthesis_level = 0
|
||||||
|
var expr_begin = position+search_string.length()
|
||||||
|
for i in range(expr_begin, s.length()):
|
||||||
|
if s[i] == '(':
|
||||||
|
parenthesis_level += 1
|
||||||
|
elif s[i] == ')':
|
||||||
|
if parenthesis_level == 0:
|
||||||
|
var expression = s.substr(expr_begin, i-expr_begin)
|
||||||
|
var expr = Expression.new()
|
||||||
|
var error = expr.parse(expression, [])
|
||||||
|
if error == OK:
|
||||||
|
s = s.replace(s.substr(position, i+1-position), str(expr.execute()))
|
||||||
|
else:
|
||||||
|
s = s.replace(s.substr(position, i+1-position), "EXPRESSION ERROR ("+expression+")")
|
||||||
|
break
|
||||||
|
parenthesis_level -= 1
|
||||||
return s
|
return s
|
||||||
|
|
||||||
func create_file_from_template(template : String, file_name : String, export_context : Dictionary) -> bool:
|
func create_file_from_template(template : String, file_name : String, export_context : Dictionary) -> bool:
|
||||||
@ -228,7 +244,7 @@ func create_file_from_template(template : String, file_name : String, export_con
|
|||||||
var expr = Expression.new()
|
var expr = Expression.new()
|
||||||
var error = expr.parse(condition, [])
|
var error = expr.parse(condition, [])
|
||||||
if error != OK:
|
if error != OK:
|
||||||
print("Error in expression: "+expr.get_error_text())
|
print("Error in expression "+condition+": "+expr.get_error_text())
|
||||||
continue
|
continue
|
||||||
skip_state.push_back(!expr.execute())
|
skip_state.push_back(!expr.execute())
|
||||||
elif l.left(3) == "$fi":
|
elif l.left(3) == "$fi":
|
||||||
@ -241,9 +257,26 @@ func create_file_from_template(template : String, file_name : String, export_con
|
|||||||
|
|
||||||
func export_material(prefix, profile) -> void:
|
func export_material(prefix, profile) -> void:
|
||||||
var export_context : Dictionary = {
|
var export_context : Dictionary = {
|
||||||
path_prefix=prefix,
|
"$(path_prefix)":prefix,
|
||||||
file_prefix=prefix.get_file()
|
"$(file_prefix)":prefix.get_file()
|
||||||
}
|
}
|
||||||
|
for i in range(shader_model.inputs.size()):
|
||||||
|
var input = shader_model.inputs[i]
|
||||||
|
export_context["$(connected:"+input.name+")"] = "true" if get_source(i) != null else "false"
|
||||||
|
for p in shader_model.parameters:
|
||||||
|
var value = p.default
|
||||||
|
if parameters.has(p.name):
|
||||||
|
value = parameters[p.name]
|
||||||
|
match p.type:
|
||||||
|
"float", "size":
|
||||||
|
export_context["$(param:"+p.name+")"] = str(value)
|
||||||
|
"color":
|
||||||
|
export_context["$(param:"+p.name+".r)"] = str(value.r)
|
||||||
|
export_context["$(param:"+p.name+".g)"] = str(value.g)
|
||||||
|
export_context["$(param:"+p.name+".b)"] = str(value.b)
|
||||||
|
export_context["$(param:"+p.name+".a)"] = str(value.a)
|
||||||
|
_:
|
||||||
|
print(p.type+" not supported in material")
|
||||||
for f in shader_model.exports[profile].files:
|
for f in shader_model.exports[profile].files:
|
||||||
match f.type:
|
match f.type:
|
||||||
"texture":
|
"texture":
|
||||||
|
@ -6,17 +6,17 @@ var types : Dictionary = {}
|
|||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
var file = File.new()
|
var file = File.new()
|
||||||
if file.open("res://addons/material_maker/nodes/io_types.mmt", File.READ) != OK:
|
for p in mm_loader.get_nodes_paths():
|
||||||
print("Cannot read types")
|
if file.open(p+"/io_types.mmt", File.READ) == OK:
|
||||||
return false
|
var type_list = parse_json(file.get_as_text())
|
||||||
var type_list = parse_json(file.get_as_text())
|
|
||||||
file.close()
|
|
||||||
for t in type_list:
|
|
||||||
if t.has("label"):
|
|
||||||
type_names.push_back(t.name)
|
|
||||||
var c = t.color
|
|
||||||
t.color = Color(c.r, c.g, c.b, c.a)
|
|
||||||
if file.open("res://addons/material_maker/nodes/preview_"+t.name+".shader", File.READ) == OK:
|
|
||||||
t.preview = file.get_as_text()
|
|
||||||
file.close()
|
file.close()
|
||||||
types[t.name] = t
|
for t in type_list:
|
||||||
|
if t.has("label"):
|
||||||
|
type_names.push_back(t.name)
|
||||||
|
var c = t.color
|
||||||
|
t.color = Color(c.r, c.g, c.b, c.a)
|
||||||
|
if file.open(p+"/preview_"+t.name+".shader", File.READ) == OK:
|
||||||
|
t.preview = file.get_as_text()
|
||||||
|
file.close()
|
||||||
|
types[t.name] = t
|
||||||
|
break
|
||||||
|
@ -8,9 +8,12 @@ var predefined_generators = {}
|
|||||||
func _ready()-> void:
|
func _ready()-> void:
|
||||||
update_predefined_generators()
|
update_predefined_generators()
|
||||||
|
|
||||||
|
func get_nodes_paths() -> Array:
|
||||||
|
return [ STD_GENDEF_PATH, OS.get_executable_path().get_base_dir()+"/nodes" ]
|
||||||
|
|
||||||
func update_predefined_generators()-> void:
|
func update_predefined_generators()-> void:
|
||||||
predefined_generators = {}
|
predefined_generators = {}
|
||||||
for path in [ STD_GENDEF_PATH, OS.get_executable_path().get_base_dir()+"/generators" ]:
|
for path in get_nodes_paths():
|
||||||
var dir = Directory.new()
|
var dir = Directory.new()
|
||||||
if dir.open(path) == OK:
|
if dir.open(path) == OK:
|
||||||
dir.list_dir_begin()
|
dir.list_dir_begin()
|
||||||
@ -24,7 +27,7 @@ func update_predefined_generators()-> void:
|
|||||||
file_name = dir.get_next()
|
file_name = dir.get_next()
|
||||||
|
|
||||||
func generator_name_from_path(path : String) -> String:
|
func generator_name_from_path(path : String) -> String:
|
||||||
for p in [ STD_GENDEF_PATH, OS.get_executable_path().get_base_dir()+"/generators" ]:
|
for p in get_nodes_paths():
|
||||||
print(p)
|
print(p)
|
||||||
print(path.get_base_dir())
|
print(path.get_base_dir())
|
||||||
return path.get_basename().get_file()
|
return path.get_basename().get_file()
|
||||||
@ -101,7 +104,7 @@ func create_gen(data) -> MMGenBase:
|
|||||||
func get_generator_list() -> Array:
|
func get_generator_list() -> Array:
|
||||||
var rv = []
|
var rv = []
|
||||||
var dir : Directory = Directory.new()
|
var dir : Directory = Directory.new()
|
||||||
for p in [ STD_GENDEF_PATH, OS.get_executable_path().get_base_dir()+"/generators" ]:
|
for p in get_nodes_paths():
|
||||||
dir.open(p)
|
dir.open(p)
|
||||||
dir.list_dir_begin(true)
|
dir.list_dir_begin(true)
|
||||||
while true:
|
while true:
|
||||||
|
@ -14,34 +14,38 @@ $if $(connected:depth_tex)
|
|||||||
$fi
|
$fi
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
|
albedo_color = Color($(param:albedo_color.r), $(param:albedo_color.g), $(param:albedo_color.b), $(param:albedo_color.a))
|
||||||
$if $(connected:albedo_tex)
|
$if $(connected:albedo_tex)
|
||||||
albedo_texture = ExtResource( 1 )
|
albedo_texture = ExtResource( 1 )
|
||||||
$fi
|
$fi
|
||||||
metallic = 1.0
|
metallic = $(param:metallic)
|
||||||
$if $(connected:metallic_tex)
|
$if $(connected:metallic_tex)
|
||||||
metallic_texture = ExtResource( 2 )
|
metallic_texture = ExtResource( 2 )
|
||||||
metallic_texture_channel = 2
|
metallic_texture_channel = 2
|
||||||
$fi
|
$fi
|
||||||
|
roughness = $(param:roughness)
|
||||||
$if $(connected:ao_tex) or $(connected:roughness_tex) or $(connected:metallic_tex)
|
$if $(connected:ao_tex) or $(connected:roughness_tex) or $(connected:metallic_tex)
|
||||||
roughness_texture = ExtResource( 2 )
|
roughness_texture = ExtResource( 2 )
|
||||||
roughness_texture_channel = 1
|
roughness_texture_channel = 1
|
||||||
$fi
|
$fi
|
||||||
$if $(connected:normal_tex)
|
$if $(connected:normal_tex)
|
||||||
normal_enabled = true
|
normal_enabled = true
|
||||||
normal_scale = 1.0
|
normal_scale = $(param:normal)
|
||||||
normal_texture = ExtResource( 3 )
|
normal_texture = ExtResource( 3 )
|
||||||
$fi
|
$fi
|
||||||
$if $(connected:ao_tex)
|
$if $(connected:ao_tex)
|
||||||
ao_enabled = true
|
ao_enabled = true
|
||||||
ao_light_affect = 0.0
|
ao_light_affect = $(param:ao)
|
||||||
ao_texture = ExtResource( 2 )
|
ao_texture = ExtResource( 2 )
|
||||||
ao_on_uv2 = false
|
ao_on_uv2 = false
|
||||||
ao_texture_channel = 0
|
ao_texture_channel = 0
|
||||||
$fi
|
$fi
|
||||||
$if $(connected:depth_tex)
|
$if $(connected:depth_tex)
|
||||||
depth_enabled = true
|
depth_enabled = true
|
||||||
depth_scale = 0.05
|
depth_scale = $(expr:0.2*$(param:depth_scale))
|
||||||
depth_deep_parallax = false
|
depth_deep_parallax = true
|
||||||
|
depth_min_layers = 8
|
||||||
|
depth_max_layers = 32
|
||||||
depth_flip_tangent = false
|
depth_flip_tangent = false
|
||||||
depth_flip_binormal = false
|
depth_flip_binormal = false
|
||||||
depth_texture = ExtResource( 4 )
|
depth_texture = ExtResource( 4 )
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
"y": 0
|
"y": 0
|
||||||
},
|
},
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"albedo": {
|
"albedo_color": {
|
||||||
"a": 1,
|
"a": 1,
|
||||||
"b": 1,
|
"b": 1,
|
||||||
"g": 1,
|
"g": 1,
|
||||||
@ -13,7 +13,7 @@
|
|||||||
"type": "Color"
|
"type": "Color"
|
||||||
},
|
},
|
||||||
"ao": 1,
|
"ao": 1,
|
||||||
"depth": 0.5,
|
"depth_scale": 0.5,
|
||||||
"emission": 1,
|
"emission": 1,
|
||||||
"metallic": 1,
|
"metallic": 1,
|
||||||
"normal": 1,
|
"normal": 1,
|
||||||
@ -294,7 +294,7 @@
|
|||||||
"label": "Depth",
|
"label": "Depth",
|
||||||
"max": 1,
|
"max": 1,
|
||||||
"min": 0,
|
"min": 0,
|
||||||
"name": "depth",
|
"name": "depth_scale",
|
||||||
"step": 0.01,
|
"step": 0.01,
|
||||||
"type": "float"
|
"type": "float"
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user