Example #1
0
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']
Example #2
0
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
Example #3
0
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)
Example #4
0
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
Example #5
0
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)