Esempio n. 1
0
def create_studio_shader(studio_shader_path, merge):
    from studio_usd_pipe.api import studioShader
    studio_model = common.read_json(studio_shader_path)
    surface_data = studio_model['surface']
    sshader = studioShader.Shader()
    for node, contenst in surface_data.items():
        shading_engine = sshader.create_shadernet(node, contenst, merge=merge)
Esempio n. 2
0
 def __init__(self):
     # studioMaya.Maya.__init__(self)  
     super(Pack, self).__init__()
           
     self.model = studioModel.Model()
     self.shader = studioShader.Shader()
     self.nurbscurve = studioNurbscurve.Nurbscurve()   
     self.nested_bundle = {}
     self.flatted_bundle = {}
Esempio n. 3
0
def create_model():
    '''
        :example
            from studio_usd_pipe.core import asset
            mpack.asset()      
        '''
    from maya import OpenMaya
    from studio_usd_pipe.api import studioNurbscurve
    from studio_usd_pipe.api import studioShader

    scurve = studioNurbscurve.Nurbscurve()
    sshader = studioShader.Shader()
    root = get_root()
    world = get_world()
    # remove depend nodes
    depend_nodes = scurve.extract_depend_nodes(default=False)
    for x in range(depend_nodes.length()):
        scurve.remove_node(depend_nodes[x])
    scurve.remove_nodes(depend_nodes)
    # make model group
    mesh_mobjects = scurve.extract_transform_primitive(OpenMaya.MFn.kMesh,
                                                       shape=False)
    model_dag_node = scurve.create_group(root)
    # make geometry hierarchy
    for x in range(mesh_mobjects.length()):
        scurve.set_locked(mesh_mobjects[x].node(),
                          attributes=None,
                          locked=False)
        scurve.disconnect_chanelbox(mesh_mobjects[x].node())
        scurve.set_parent(mesh_mobjects[x], model_dag_node.object())
        # assigin default shader
        sshader.assign_shading_engine(mesh_mobjects[x], shading_group=None)
    # remove unwanted dag nodes
    trans_dagpath_array = scurve.extract_top_transforms(default=False)
    for x in range(trans_dagpath_array.length()):
        if trans_dagpath_array[x].node() == model_dag_node.object():
            continue
        scurve.remove_node(trans_dagpath_array[x].node())
    # scurve.remove_nodes(transform_mobjects)
    # reset transforms
    for x in range(mesh_mobjects.length()):
        scurve.delete_history(mesh_mobjects[x])
        scurve.freeze_transformations(mesh_mobjects[x])
        scurve.set_default_position(mesh_mobjects[x].node())
    # create world control
    world_dependency_node = scurve.create_world(model_dag_node, parent=True)
    # set the name
    model_dag_node.setName(root)
    world_dependency_node.setName(world)
    # create asset id
    id_data = resource.getPipeIDData()
    scurve.create_maya_ids(model_dag_node.object(), id_data)
    # OpenMaya.MGlobal.selectByName(model_dag_node.fullPathName())
    OpenMaya.MGlobal.clearSelectionList()
    scurve.set_perspective_view()
    return True, [root], 're-generate hierarchy'
Esempio n. 4
0
def create_shader_usd(output_path):
    from studio_usd_pipe.api import studioUsd
    from studio_usd_pipe.api import studioShader
    sshader = studioShader.Shader()
    root = get_root()
    mobject = sshader.get_mobject(root)
    surface_data = sshader.get_surface_data(mobject)
    pipe_ids, valid = sshader.get_pipe_id_data(mobject, id_data=None)
    final_data = {'surface': surface_data, 'asset_id': pipe_ids}
    susd = studioUsd.Susd(path=output_path)
    susd.create_surface_usd(root, final_data)
    return output_path
Esempio n. 5
0
def create_studio_shader(output_path):
    from studio_usd_pipe.api import studioShader
    sshader = studioShader.Shader()
    root = get_root()
    mobject = sshader.get_mobject(root)
    mesh_data = sshader.get_surface_data(mobject)
    final_data = {
        'surface': mesh_data,
    }
    with (open(output_path, 'w')) as content:
        content.write(json.dumps(final_data, indent=4))
    return output_path
Esempio n. 6
0
    def surface(self, replace=False):
        '''
            from studio_usd_pipe.core import mayacreate
            path = '/venture/shows/batman/assets/batman/surface/1.0.0/batman.shader'
            mcreate = mayacreate.Create(path)
            mcreate.surface()
        '''

        sshader = studioShader.Shader()
        surface_data = self.studio_data['surface']
        for node, contenst in surface_data.items():
            shading_engine = sshader.create_shadernet(node,
                                                      contenst,
                                                      replace=replace)
Esempio n. 7
0
def check_shader_assigned_geometries():
    from studio_usd_pipe.api import studioShader
    sshader = studioShader.Shader()
    root = get_root()
    mobject = sshader.get_mobject(root)
    shader_data = sshader.get_scene_shading_engines(mobject)
    geometries = []
    for geometry, shader_engines in shader_data.items():
        if shader_engines:
            continue
        geometries.append(geometry.fullPathName().encode())
    if geometries:
        return False, geometries, 'found geometries with out shader assignment'
    return True, [], 'all geometries are assigned user shader'
Esempio n. 8
0
def create_shader_maya(output_path):
    from maya import OpenMaya
    from studio_usd_pipe.api import studioShader
    sshader = studioShader.Shader()
    root = get_root()
    mobject = sshader.get_mobject(root)
    shader_data = sshader.get_scene_shading_engines(mobject)
    shading_engines = []
    for geometry in shader_data:
        for index in range(shader_data[geometry].length()):
            mfn_dependency_node = OpenMaya.MFnDependencyNode(
                shader_data[geometry][index])
            if mfn_dependency_node.name() == 'initialShadingGroup':
                continue
            shading_engines.append(mfn_dependency_node.name())
    sshader.export_selected(shading_engines, output_path, force=True)
    return output_path
Esempio n. 9
0
def create_shader_source_images(caption, temp_output_path, remap_output_path):
    '''
    from studio_usd_pipe.utils import maya_asset
    reload(maya_asset)
    caption = 'batman'
    output_path = '/usr/tmp/test_show/assets/batman/shader/0.0.1/'
    remap_output_path = '/venture/shows/batman/assets/batman/shader/0.0.1/'
    maya_asset.create_shader_source_images(caption, output_path, remap_output_path)
    '''
    from studio_usd_pipe.api import studioShader
    sshader = studioShader.Shader()
    root = get_root()
    mobject = sshader.get_mobject(root)
    temp_source_image_path = os.path.join(temp_output_path, 'source_images')
    source_image_path = os.path.join(remap_output_path, 'source_images')
    if not os.path.isdir(temp_source_image_path):
        os.makedirs(temp_source_image_path)
    input_data = sshader.get_source_image_data(mobject)
    output_data = sshader.set_source_images(input_data, source_image_path)
    # copy to temp directory
    source_images = set()
    for node in input_data:
        for attribute in input_data[node]:
            source_images.add(input_data[node][attribute]['value'])
    lores_data = {}
    all_source_images = []
    for source_image in source_images:
        temp_source_image = os.path.join(temp_source_image_path,
                                         os.path.basename(source_image))
        shutil.copy2(source_image, temp_source_image)
        lowres_source_image = sshader.create_lowres_source_images(
            source_image, temp_source_image_path)
        lores_data.setdefault(source_image, lowres_source_image)
        all_source_images.append(temp_source_image)
        all_source_images.append(lowres_source_image)
    source_image_data = os.path.join(temp_output_path,
                                     '%s.sourceimage' % caption)
    final_data = {
        'input': input_data,
        'output': output_data,
        'lowres': lores_data
    }
    with (open(source_image_data, 'w')) as content:
        content.write(json.dumps(final_data, indent=4))
    final_source_image_data = all_source_images + [source_image_data]
    return final_source_image_data
Esempio n. 10
0
def check_source_images():
    from studio_usd_pipe.api import studioShader
    sshader = studioShader.Shader()
    root = get_root()
    mobject = sshader.get_mobject(root)
    input_data = sshader.get_source_image_data(mobject)
    if not input_data:
        return True, []
    valid = {}
    for node in input_data:
        for attribute in input_data[node]:
            source_image = input_data[node][attribute]['value']
            if not os.path.isfile(source_image):
                valid.setdefault(False, []).append([node, source_image])
                continue
            valid.setdefault(True, []).append([node, source_image])
    if False in valid:
        return False, valid[False]
    return True, valid[True]
Esempio n. 11
0
def check_default_shader_geometries():
    from maya import OpenMaya
    from studio_usd_pipe.api import studioShader
    sshader = studioShader.Shader()
    root = get_root()
    mobject = sshader.get_mobject(root)
    shader_data = sshader.get_scene_shading_engines(mobject)
    geometries = []
    for geometry, shader_engines in shader_data.items():
        if not shader_engines:
            continue
        for index in range(shader_engines.length()):
            mfn_dependency_node = OpenMaya.MFnDependencyNode(
                shader_engines[index])
            if mfn_dependency_node.name() != 'initialShadingGroup':
                continue
            if geometry.fullPathName() in geometries:
                continue
            geometries.append(geometry.fullPathName())
    if geometries:
        return False, list(
            geometries), 'found geometries with default shader assignment'
    return True, [], 'all geometries are user assigned shader'