Updated custom file generation in export and Godot export

This commit is contained in:
RodZill4 2020-02-19 08:33:52 +01:00
parent 6883561beb
commit 4d73ff1a2b
5 changed files with 74 additions and 34 deletions

View File

@ -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":

View File

@ -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

View File

@ -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:

View File

@ -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 )

View File

@ -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"
},