Update PBR node
This commit is contained in:
parent
fe1c7c70c1
commit
cef5c03df3
|
@ -165,41 +165,75 @@ def parse_shader(node, socket):
|
|||
if node.node_tree.name.startswith('Armory PBR'):
|
||||
|
||||
if parse_surface:
|
||||
# Base color
|
||||
parsing_basecolor(True)
|
||||
out_basecol = parse_vector_input(node.inputs[0])
|
||||
parsing_basecolor(False)
|
||||
# Occlusion TODO: deprecated, occlussion is value instead of vector now
|
||||
if node.inputs[1].type == 'RGBA':
|
||||
out_occlusion = '{0}.r'.format(parse_vector_input(node.inputs[1]))
|
||||
else:
|
||||
out_occlusion = parse_value_input(node.inputs[1])
|
||||
if node.inputs[2].is_linked or node.inputs[2].default_value != 1.0:
|
||||
out_occlusion = '({0} * {1})'.format(out_occlusion, parse_value_input(node.inputs[2]))
|
||||
# Roughness
|
||||
out_roughness = parse_value_input(node.inputs[3])
|
||||
if node.inputs[4].is_linked or node.inputs[4].default_value != 1.0:
|
||||
out_roughness = '({0} * {1})'.format(out_roughness, parse_value_input(node.inputs[4]))
|
||||
# Metallic
|
||||
out_metallic = parse_value_input(node.inputs[5])
|
||||
# Normal
|
||||
if node.inputs[6].is_linked and node.inputs[6].links[0].from_node.type == 'NORMAL_MAP':
|
||||
c_state.warn(c_state.mat_name() + ' - Do not use Normal Map node with Armory PBR, connect Image Texture directly')
|
||||
parse_normal_map_color_input(node.inputs[6], node.inputs[7])
|
||||
# Emission
|
||||
if node.inputs[8].is_linked:
|
||||
|
||||
if len(node.inputs) != 14:
|
||||
# Base color
|
||||
parsing_basecolor(True)
|
||||
out_emission = parse_vector_input(node.inputs[8])
|
||||
emission_found = True
|
||||
out_basecol = parse_vector_input(node.inputs[0])
|
||||
parsing_basecolor(False)
|
||||
if node.inputs[9].is_linked or node.inputs[9].default_value != 1.0:
|
||||
out_emission = '({0} * {1})'.format(out_emission, parse_value_input(node.inputs[9]))
|
||||
out_basecol = '({0} + {1} * 100.0)'.format(out_basecol, out_emission)
|
||||
# Occlusion
|
||||
out_occlusion = parse_value_input(node.inputs[2])
|
||||
# Roughness
|
||||
out_roughness = parse_value_input(node.inputs[3])
|
||||
# Metallic
|
||||
out_metallic = parse_value_input(node.inputs[4])
|
||||
# Normal
|
||||
if node.inputs[5].is_linked and node.inputs[5].links[0].from_node.type == 'NORMAL_MAP':
|
||||
c_state.warn(c_state.mat_name() + ' - Do not use Normal Map node with Armory PBR, connect Image Texture directly')
|
||||
parse_normal_map_color_input(node.inputs[5], node.inputs[6])
|
||||
# Emission
|
||||
dv = node.inputs[7].default_value
|
||||
if node.inputs[7].is_linked or dv[0] != 0.0 or dv[1] != 0.0 or dv[2] != 0.0:
|
||||
parsing_basecolor(True)
|
||||
out_emission = parse_vector_input(node.inputs[7])
|
||||
emission_found = True
|
||||
parsing_basecolor(False)
|
||||
if node.inputs[8].is_linked or node.inputs[8].default_value != 1.0:
|
||||
out_emission = '({0} * {1})'.format(out_emission, parse_value_input(node.inputs[9]))
|
||||
out_basecol = '({0} + {1} * 100.0)'.format(out_basecol, out_emission)
|
||||
|
||||
else: # Deprecated
|
||||
# Base color
|
||||
parsing_basecolor(True)
|
||||
out_basecol = parse_vector_input(node.inputs[0])
|
||||
parsing_basecolor(False)
|
||||
# Occlusion TODO: deprecated, occlussion is value instead of vector now
|
||||
if node.inputs[1].type == 'RGBA':
|
||||
out_occlusion = '{0}.r'.format(parse_vector_input(node.inputs[1]))
|
||||
else:
|
||||
out_occlusion = parse_value_input(node.inputs[1])
|
||||
if node.inputs[2].is_linked or node.inputs[2].default_value != 1.0:
|
||||
out_occlusion = '({0} * {1})'.format(out_occlusion, parse_value_input(node.inputs[2]))
|
||||
# Roughness
|
||||
out_roughness = parse_value_input(node.inputs[3])
|
||||
if node.inputs[4].is_linked or node.inputs[4].default_value != 1.0:
|
||||
out_roughness = '({0} * {1})'.format(out_roughness, parse_value_input(node.inputs[4]))
|
||||
# Metallic
|
||||
out_metallic = parse_value_input(node.inputs[5])
|
||||
# Normal
|
||||
if node.inputs[6].is_linked and node.inputs[6].links[0].from_node.type == 'NORMAL_MAP':
|
||||
c_state.warn(c_state.mat_name() + ' - Do not use Normal Map node with Armory PBR, connect Image Texture directly')
|
||||
parse_normal_map_color_input(node.inputs[6], node.inputs[7])
|
||||
# Emission
|
||||
if node.inputs[8].is_linked:
|
||||
parsing_basecolor(True)
|
||||
out_emission = parse_vector_input(node.inputs[8])
|
||||
emission_found = True
|
||||
parsing_basecolor(False)
|
||||
if node.inputs[9].is_linked or node.inputs[9].default_value != 1.0:
|
||||
out_emission = '({0} * {1})'.format(out_emission, parse_value_input(node.inputs[9]))
|
||||
out_basecol = '({0} + {1} * 100.0)'.format(out_basecol, out_emission)
|
||||
|
||||
|
||||
if parse_opacity:
|
||||
out_opacity = parse_value_input(node.inputs[12])
|
||||
if node.inputs[13].is_linked or node.inputs[13].default_value != 1.0:
|
||||
out_opacity = '({0} * {1})'.format(out_opacity, parse_value_input(node.inputs[13]))
|
||||
|
||||
if len(node.inputs) != 14:
|
||||
out_opacity = parse_value_input(node.inputs[1])
|
||||
else: # Deprecated
|
||||
out_opacity = parse_value_input(node.inputs[12])
|
||||
if node.inputs[13].is_linked or node.inputs[13].default_value != 1.0:
|
||||
out_opacity = '({0} * {1})'.format(out_opacity, parse_value_input(node.inputs[13]))
|
||||
|
||||
else:
|
||||
return parse_group(node, socket)
|
||||
|
||||
|
@ -927,9 +961,14 @@ def parse_value(node, socket):
|
|||
if node.node_tree.name.startswith('Armory PBR'):
|
||||
# Displacement
|
||||
if socket == node.outputs[1]:
|
||||
res = parse_value_input(node.inputs[10])
|
||||
if node.inputs[11].is_linked or node.inputs[11].default_value != 1.0:
|
||||
res = "({0} * {1})".format(res, parse_value_input(node.inputs[11]))
|
||||
|
||||
if len(node.inputs) != 14:
|
||||
res = parse_value_input(node.inputs[9])
|
||||
else: # Deprecated
|
||||
res = parse_value_input(node.inputs[10])
|
||||
if node.inputs[11].is_linked or node.inputs[11].default_value != 1.0:
|
||||
res = "({0} * {1})".format(res, parse_value_input(node.inputs[11]))
|
||||
|
||||
return res
|
||||
else:
|
||||
return None
|
||||
|
|
|
@ -53,6 +53,9 @@ def parse(material, mat_data, mat_users, mat_armusers, rid):
|
|||
sss_node = arm.nodes.get_node_by_type(material.node_tree, 'BSDF_PRINCIPLED')
|
||||
if sss_node != None and sss_node.outputs[0].is_linked and (sss_node.inputs[1].is_linked or sss_node.inputs[1].default_value != 0.0):
|
||||
sss = True
|
||||
sss_node = arm.nodes.get_node_armorypbr(material.node_tree)
|
||||
if sss_node != None and sss_node.outputs[0].is_linked and (sss_node.inputs[10].is_linked or sss_node.inputs[10].default_value != 0.0):
|
||||
sss = True
|
||||
if sss:
|
||||
const = {}
|
||||
const['name'] = 'materialID'
|
||||
|
|
|
@ -12,7 +12,8 @@ def disp_linked(output_node):
|
|||
tess_enabled = arm.utils.tess_enabled(make_state.target)
|
||||
if linked:
|
||||
l = output_node.inputs[2].links[0]
|
||||
if l.from_node.type == 'GROUP' and l.from_node.node_tree.name.startswith('Armory PBR') and l.from_node.inputs[10].is_linked == False:
|
||||
if l.from_node.type == 'GROUP' and l.from_node.node_tree.name.startswith('Armory PBR') and \
|
||||
((len(l.from_node.inputs) == 14 and l.from_node.inputs[10].is_linked == False) or (l.from_node.inputs[9].is_linked == False)):
|
||||
return False
|
||||
if linked and not tess_enabled:
|
||||
log.warn('Tessellation not available on ' + make_state.target)
|
||||
|
@ -77,6 +78,7 @@ def is_transluc_type(node):
|
|||
if node.type == 'BSDF_GLASS' or \
|
||||
node.type == 'BSDF_TRANSPARENT' or \
|
||||
node.type == 'BSDF_TRANSLUCENT' or \
|
||||
(node.type == 'GROUP' and node.node_tree.name.startswith('Armory PBR') and (node.inputs[12].is_linked or node.inputs[12].default_value != 1.0)):
|
||||
(node.type == 'GROUP' and node.node_tree.name.startswith('Armory PBR') and len(node.inputs) == 14 and (node.inputs[12].is_linked or node.inputs[12].default_value != 1.0)) or \
|
||||
(node.type == 'GROUP' and node.node_tree.name.startswith('Armory PBR') and (node.inputs[1].is_linked or node.inputs[1].default_value != 1.0)):
|
||||
return True
|
||||
return False
|
||||
|
|
|
@ -21,6 +21,11 @@ def get_node_by_type(node_group, ntype):
|
|||
if node.type == ntype:
|
||||
return node
|
||||
|
||||
def get_node_armorypbr(node_group):
|
||||
for node in node_group.nodes:
|
||||
if node.type == 'GROUP' and node.node_tree.name.startswith('Armory PBR'):
|
||||
return node
|
||||
|
||||
def get_input_node(node_group, to_node, input_index):
|
||||
for link in node_group.links:
|
||||
if link.to_node == to_node and link.to_socket == to_node.inputs[input_index]:
|
||||
|
|
Binary file not shown.
Loading…
Reference in a new issue