def parse_surface(world, node, context): wrd = bpy.data.worlds['Arm'] rpdat = arm.utils.get_rp() solid_mat = rpdat.arm_material_model == 'Solid' # Extract environment strength if node.type == 'BACKGROUND': # Append irradiance define if wrd.arm_irradiance and not solid_mat: wrd.world_defs += '_Irr' # Strength envmap_strength_const = {} envmap_strength_const['name'] = 'envmapStrength' envmap_strength_const['float'] = node.inputs[1].default_value # Always append for now, even though envmapStrength is not always needed context['bind_constants'].append(envmap_strength_const) if node.inputs[0].is_linked: color_node = node_utils.find_node_by_link(world.node_tree, node, node.inputs[0]) parse_color(world, color_node, context, envmap_strength_const) # Cache results world.arm_envtex_color = node.inputs[0].default_value world.arm_envtex_strength = envmap_strength_const['float']
def parse_world_output(world: bpy.types.World, node_output: bpy.types.Node, frag: Shader) -> bool: """Parse the world's output node. Return `False` when the node has no connected surface input.""" surface_node = node_utils.find_node_by_link(world.node_tree, node_output, node_output.inputs[0]) if surface_node is None: return False parse_surface(world, surface_node, frag) return True
def parse_surface(world, node): wrd = bpy.data.worlds['Arm'] rpdat = arm.utils.get_rp() solid_mat = rpdat.arm_material_model == 'Solid' # Extract environment strength if node.type == 'BACKGROUND': # Append irradiance define if rpdat.arm_irradiance and not solid_mat: wrd.world_defs += '_Irr' world.arm_envtex_color = node.inputs[0].default_value world.arm_envtex_strength = node.inputs[1].default_value # Strength if node.inputs[0].is_linked: color_node = node_utils.find_node_by_link(world.node_tree, node, node.inputs[0]) parse_color(world, color_node)
def parse_surface(world: bpy.types.World, node_surface: bpy.types.Node, frag: Shader): wrd = bpy.data.worlds['Arm'] rpdat = arm.utils.get_rp() solid_mat = rpdat.arm_material_model == 'Solid' if node_surface.type in ('BACKGROUND', 'EMISSION'): # Append irradiance define if rpdat.arm_irradiance and not solid_mat: wrd.world_defs += '_Irr' # Extract environment strength # Todo: follow/parse strength input world.arm_envtex_strength = node_surface.inputs[1].default_value # Color if node_surface.inputs[0].is_linked: color_node = node_utils.find_node_by_link(world.node_tree, node_surface, node_surface.inputs[0]) parse_color(world, color_node, frag) else: world.arm_envtex_color = node_surface.inputs[0].default_value
def parse_world_output(world, node): if node.inputs[0].is_linked: surface_node = node_utils.find_node_by_link(world.node_tree, node, node.inputs[0]) parse_surface(world, surface_node)