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()
|
||||
|
||||
func source_changed(input_index : int) -> void:
|
||||
print("source_changed "+str(input_index))
|
||||
for t in TEXTURE_LIST:
|
||||
if t.has("sources") and t.sources.find(input_index) != -1:
|
||||
generated_textures[t.texture] = null
|
||||
@ -163,7 +162,7 @@ func update_material(m, file_prefix = null) -> void:
|
||||
else:
|
||||
m.normal_enabled = false
|
||||
# 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_deep_parallax = true
|
||||
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:
|
||||
for k in export_context.keys():
|
||||
s = s.replace("$("+k+")", export_context[k])
|
||||
for input_index in range(shader_model.inputs.size()):
|
||||
var input = shader_model.inputs[input_index]
|
||||
var is_input_connected = "true" if get_source(input_index) != null else "false"
|
||||
s = s.replace("$(connected:"+input.name+")", is_input_connected)
|
||||
s = s.replace(k, export_context[k])
|
||||
while (true):
|
||||
var search_string = "$(expr:"
|
||||
var position = s.find(search_string)
|
||||
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
|
||||
|
||||
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 error = expr.parse(condition, [])
|
||||
if error != OK:
|
||||
print("Error in expression: "+expr.get_error_text())
|
||||
print("Error in expression "+condition+": "+expr.get_error_text())
|
||||
continue
|
||||
skip_state.push_back(!expr.execute())
|
||||
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:
|
||||
var export_context : Dictionary = {
|
||||
path_prefix=prefix,
|
||||
file_prefix=prefix.get_file()
|
||||
"$(path_prefix)":prefix,
|
||||
"$(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:
|
||||
match f.type:
|
||||
"texture":
|
||||
|
@ -6,17 +6,17 @@ var types : Dictionary = {}
|
||||
|
||||
func _ready():
|
||||
var file = File.new()
|
||||
if file.open("res://addons/material_maker/nodes/io_types.mmt", File.READ) != OK:
|
||||
print("Cannot read types")
|
||||
return false
|
||||
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()
|
||||
for p in mm_loader.get_nodes_paths():
|
||||
if file.open(p+"/io_types.mmt", File.READ) == OK:
|
||||
var type_list = parse_json(file.get_as_text())
|
||||
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:
|
||||
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:
|
||||
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()
|
||||
if dir.open(path) == OK:
|
||||
dir.list_dir_begin()
|
||||
@ -24,7 +27,7 @@ func update_predefined_generators()-> void:
|
||||
file_name = dir.get_next()
|
||||
|
||||
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(path.get_base_dir())
|
||||
return path.get_basename().get_file()
|
||||
@ -101,7 +104,7 @@ func create_gen(data) -> MMGenBase:
|
||||
func get_generator_list() -> Array:
|
||||
var rv = []
|
||||
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.list_dir_begin(true)
|
||||
while true:
|
||||
|
@ -14,34 +14,38 @@ $if $(connected:depth_tex)
|
||||
$fi
|
||||
|
||||
[resource]
|
||||
albedo_color = Color($(param:albedo_color.r), $(param:albedo_color.g), $(param:albedo_color.b), $(param:albedo_color.a))
|
||||
$if $(connected:albedo_tex)
|
||||
albedo_texture = ExtResource( 1 )
|
||||
$fi
|
||||
metallic = 1.0
|
||||
metallic = $(param:metallic)
|
||||
$if $(connected:metallic_tex)
|
||||
metallic_texture = ExtResource( 2 )
|
||||
metallic_texture_channel = 2
|
||||
$fi
|
||||
roughness = $(param:roughness)
|
||||
$if $(connected:ao_tex) or $(connected:roughness_tex) or $(connected:metallic_tex)
|
||||
roughness_texture = ExtResource( 2 )
|
||||
roughness_texture_channel = 1
|
||||
$fi
|
||||
$if $(connected:normal_tex)
|
||||
normal_enabled = true
|
||||
normal_scale = 1.0
|
||||
normal_scale = $(param:normal)
|
||||
normal_texture = ExtResource( 3 )
|
||||
$fi
|
||||
$if $(connected:ao_tex)
|
||||
ao_enabled = true
|
||||
ao_light_affect = 0.0
|
||||
ao_light_affect = $(param:ao)
|
||||
ao_texture = ExtResource( 2 )
|
||||
ao_on_uv2 = false
|
||||
ao_texture_channel = 0
|
||||
$fi
|
||||
$if $(connected:depth_tex)
|
||||
depth_enabled = true
|
||||
depth_scale = 0.05
|
||||
depth_deep_parallax = false
|
||||
depth_scale = $(expr:0.2*$(param:depth_scale))
|
||||
depth_deep_parallax = true
|
||||
depth_min_layers = 8
|
||||
depth_max_layers = 32
|
||||
depth_flip_tangent = false
|
||||
depth_flip_binormal = false
|
||||
depth_texture = ExtResource( 4 )
|
||||
|
@ -5,7 +5,7 @@
|
||||
"y": 0
|
||||
},
|
||||
"parameters": {
|
||||
"albedo": {
|
||||
"albedo_color": {
|
||||
"a": 1,
|
||||
"b": 1,
|
||||
"g": 1,
|
||||
@ -13,7 +13,7 @@
|
||||
"type": "Color"
|
||||
},
|
||||
"ao": 1,
|
||||
"depth": 0.5,
|
||||
"depth_scale": 0.5,
|
||||
"emission": 1,
|
||||
"metallic": 1,
|
||||
"normal": 1,
|
||||
@ -294,7 +294,7 @@
|
||||
"label": "Depth",
|
||||
"max": 1,
|
||||
"min": 0,
|
||||
"name": "depth",
|
||||
"name": "depth_scale",
|
||||
"step": 0.01,
|
||||
"type": "float"
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user