Shader Tree

作者: N景波 | 来源:发表于2017-03-23 15:47 被阅读0次

    下面的代码递归遍历C4D中的shader。 首先遍历doc中的所有material,因每个material都是一个shader网络,要先获取其第一个shader,这是一个GeListNode实例,也是个4D列表。剩下就是遍历了。

    import c4d, os
     
    ############################################################
    # 递归函数,在其中操作shader
    ############################################################
    def shadertree(shader):
        # 遍历 BaseList
        while(shader):         
            # 操作shader,这里简单输出其名字
            print shader.GetName()
            # 查看文件名
            if shader.GetType() == c4d.Xbitmap:
                filename = shader[c4d.BITMAPSHADER_FILENAME]
                print filename
                # 修改实例的文件名
                filename = os.path.basename(filename)
                shader[c4d.BITMAPSHADER_FILENAME] = filename
             
            # 检查是否有子类,递归处理
            if shader.GetDown():
                 shadertree(shader.GetDown())       
            shader = shader.GetNext()
             
    ############################################################
    # main function
    ############################################################
    def main():
        # 获取第一个material
        mat = doc.GetFirstMaterial()
        # 遍历 materials
        while(mat):
            # 拿第一个shader
            # 这是个4D列表
            shd = mat.GetFirstShader()
            # 用上面的递归函数处理
            shadertree(shd)
            # 来,下一个
            mat = mat.GetNext()
     
    if__name__=='__main__':
        main()
    

    相关文章

      网友评论

        本文标题:Shader Tree

        本文链接:https://www.haomeiwen.com/subject/mijenttx.html