Material parameters support
This commit is contained in:
parent
47fc741753
commit
998dc60687
|
@ -394,7 +394,12 @@ def parse_rgb(node, socket):
|
|||
return 'vcolor'
|
||||
|
||||
elif node.type == 'RGB':
|
||||
return to_vec3(socket.default_value)
|
||||
if node.arm_material_param:
|
||||
nn = node_name(node.name)
|
||||
curshader.add_uniform('vec3 param_{0}'.format(nn), link='{0}'.format(nn))
|
||||
return 'param_' + nn
|
||||
else:
|
||||
return to_vec3(socket.default_value)
|
||||
|
||||
elif node.type == 'TEX_BRICK':
|
||||
curshader.add_function(c_functions.str_tex_brick)
|
||||
|
@ -451,17 +456,18 @@ def parse_rgb(node, socket):
|
|||
return '{0}.rgb'.format(store_var_name(node))
|
||||
tex_name = node_name(node.name)
|
||||
tex = make_texture(node, tex_name)
|
||||
tex_link = tex_name if node.arm_material_param else None
|
||||
if tex != None:
|
||||
curshader.write_textures += 1
|
||||
to_linear = parsing_basecol and not tex['file'].endswith('.hdr')
|
||||
res = '{0}.rgb'.format(texture_store(node, tex, tex_name, to_linear))
|
||||
res = '{0}.rgb'.format(texture_store(node, tex, tex_name, to_linear, tex_link=tex_link))
|
||||
curshader.write_textures -= 1
|
||||
return res
|
||||
elif node.image == None: # Empty texture
|
||||
tex = {}
|
||||
tex['name'] = tex_name
|
||||
tex['file'] = ''
|
||||
return '{0}.rgb'.format(texture_store(node, tex, tex_name, True))
|
||||
return '{0}.rgb'.format(texture_store(node, tex, tex_name, True, tex_link=tex_link))
|
||||
else:
|
||||
tex_store = store_var_name(node) # Pink color for missing texture
|
||||
curshader.write('vec4 {0} = vec4(1.0, 0.0, 1.0, 1.0);'.format(tex_store))
|
||||
|
@ -1009,7 +1015,12 @@ def parse_value(node, socket):
|
|||
return '1.0'
|
||||
|
||||
elif node.type == 'VALUE':
|
||||
return to_vec1(node.outputs[0].default_value)
|
||||
if node.arm_material_param:
|
||||
nn = node_name(node.name)
|
||||
curshader.add_uniform('float param_{0}'.format(nn), link='{0}'.format(nn))
|
||||
return 'param_' + nn
|
||||
else:
|
||||
return to_vec1(node.outputs[0].default_value)
|
||||
|
||||
elif node.type == 'WIREFRAME':
|
||||
#node.use_pixel_size
|
||||
|
@ -1065,9 +1076,10 @@ def parse_value(node, socket):
|
|||
return '{0}.a'.format(store_var_name(node))
|
||||
tex_name = safesrc(node.name)
|
||||
tex = make_texture(node, tex_name)
|
||||
tex_link = tex_name if node.arm_material_param else None
|
||||
if tex != None:
|
||||
curshader.write_textures += 1
|
||||
res = '{0}.a'.format(texture_store(node, tex, tex_name))
|
||||
res = '{0}.a'.format(texture_store(node, tex, tex_name, tex_link=tex_link))
|
||||
curshader.write_textures -= 1
|
||||
return res
|
||||
else:
|
||||
|
@ -1289,14 +1301,14 @@ def to_uniform(inp):
|
|||
def store_var_name(node):
|
||||
return node_name(node.name) + '_store'
|
||||
|
||||
def texture_store(node, tex, tex_name, to_linear=False):
|
||||
def texture_store(node, tex, tex_name, to_linear=False, tex_link=None):
|
||||
global parsing_basecol
|
||||
global basecol_texname
|
||||
global sample_bump
|
||||
global sample_bump_res
|
||||
mat_bind_texture(tex)
|
||||
con.add_elem('tex', 2)
|
||||
curshader.add_uniform('sampler2D {0}'.format(tex_name))
|
||||
curshader.add_uniform('sampler2D {0}'.format(tex_name), link=tex_link)
|
||||
if node.inputs[0].is_linked:
|
||||
uv_name = parse_vector_input(node.inputs[0])
|
||||
else:
|
||||
|
|
|
@ -56,7 +56,7 @@ def unregister_nodes():
|
|||
nodeitems_utils.unregister_node_categories('ArmLogicNodes')
|
||||
|
||||
class ArmLogicNodePanel(bpy.types.Panel):
|
||||
bl_label = 'Armory Logic Nodes'
|
||||
bl_label = 'Armory Logic Node'
|
||||
bl_idname = 'ArmLogicNodePanel'
|
||||
bl_space_type = 'NODE_EDITOR'
|
||||
bl_region_type = 'UI'
|
||||
|
|
|
@ -292,6 +292,9 @@ def init_properties():
|
|||
bpy.types.Material.signature = StringProperty(name="Signature", description="Unique string generated from material nodes", default="")
|
||||
bpy.types.Material.is_cached = BoolProperty(name="Material Cached", description="No need to reexport material data", default=False, update=update_mat_cache)
|
||||
bpy.types.Material.lock_cache = BoolProperty(name="Lock Material Cache", description="Prevent is_cached from updating", default=False)
|
||||
bpy.types.ShaderNodeRGB.arm_material_param = BoolProperty(name="Parameter", description="Control this node from script", default=False)
|
||||
bpy.types.ShaderNodeValue.arm_material_param = BoolProperty(name="Parameter", description="Control this node from script", default=False)
|
||||
bpy.types.ShaderNodeTexImage.arm_material_param = BoolProperty(name="Parameter", description="Control this node from script", default=False)
|
||||
# Particles
|
||||
bpy.types.ParticleSettings.arm_gpu_sim = BoolProperty(name="GPU Simulation", description="Calculate particle simulation on GPU", default=False, update=assets.invalidate_shader_cache)
|
||||
bpy.types.ParticleSettings.arm_count_mult = FloatProperty(name="Multiply Count", description="Multiply particle count when rendering in Armory", default=1.0)
|
||||
|
|
|
@ -1272,6 +1272,18 @@ class ArmPrintTraitsButton(bpy.types.Operator):
|
|||
print('Object {0} - {1}'.format(o.name, tname))
|
||||
return{'FINISHED'}
|
||||
|
||||
class ArmMaterialNodePanel(bpy.types.Panel):
|
||||
bl_label = 'Armory Material Node'
|
||||
bl_idname = 'ArmMaterialNodePanel'
|
||||
bl_space_type = 'NODE_EDITOR'
|
||||
bl_region_type = 'UI'
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
n = context.active_node
|
||||
if n != None and (n.bl_idname == 'ShaderNodeRGB' or n.bl_idname == 'ShaderNodeValue' or n.bl_idname == 'ShaderNodeTexImage'):
|
||||
layout.prop(context.active_node, 'arm_material_param')
|
||||
|
||||
def register():
|
||||
bpy.utils.register_class(ObjectPropsPanel)
|
||||
bpy.utils.register_class(ModifiersPropsPanel)
|
||||
|
@ -1310,6 +1322,7 @@ def register():
|
|||
bpy.utils.register_class(ArmProxyApplyAllButton)
|
||||
bpy.utils.register_class(ArmSyncProxyButton)
|
||||
bpy.utils.register_class(ArmPrintTraitsButton)
|
||||
bpy.utils.register_class(ArmMaterialNodePanel)
|
||||
bpy.types.VIEW3D_HT_header.append(draw_view3d_header)
|
||||
|
||||
def unregister():
|
||||
|
@ -1351,3 +1364,4 @@ def unregister():
|
|||
bpy.utils.unregister_class(ArmProxyApplyAllButton)
|
||||
bpy.utils.unregister_class(ArmSyncProxyButton)
|
||||
bpy.utils.unregister_class(ArmPrintTraitsButton)
|
||||
bpy.utils.unregister_class(ArmMaterialNodePanel)
|
||||
|
|
Loading…
Reference in a new issue