附录maya脚本(我自己写的网站里我卖的模型的配套的脚本):division_terrain_change_material__country_or_region.py

原创 教程/经验 版权:禁止匿名转载;禁止商业使用;禁止个人使用。

2 0 0 2023-11-20 22:42:04 举报

BEJ48

全部省 全部市

# 脚本测试于maya2023
# 脚本测试于maya2023

# 脚本名字:division_terrain_change_material__country_or_region.py(复制粘贴里面的文字到maya脚本编辑器,python类型的标签栏里面)

# 因为总是会不断发现bug,所以脚本发布到这里,以便修改更新,你需要自己把代码复制粘贴到maya中运行

import copy
import re

import maya.cmds as cmds


def list_all_geometry():  # 会把曲线也计算在内了
    geometry = cmds.ls(geometry=True)
    # curve也是geometry?
    geometry_transform_list = cmds.listRelatives(geometry, p=True, path=True)
    # cmds.select(geometry_transforms_list, r=True)
    return geometry_transform_list


def get_geometry_list(reg):
    # return list(filter(lambda v: re.search("__scenic__type_and_icon_control_circle$", v), list_all_geometry()))
    return list(filter(lambda v: re.search(reg, v), list_all_geometry()))


def get_division_area_list():
    # return get_geometry_list("_\d{6}$")
    # return get_geometry_list("__division$")
    return list(set(get_geometry_list("__division$") + get_geometry_list("__divisionFBXASC046")))


def get_scenic_area_list():
    return get_geometry_list("__scenic$")


def get_goverment_area_list():
    return get_geometry_list("__gover.?ment$")


def get_goverment__map_icon_list():
    return get_geometry_list("__gover.?ment__map_icon$")


def get_goverment__type_3d_place_name_list():
    return get_geometry_list("__gover.?ment__type_3d_place_name$")


def get_scenic__map_icon_list():
    return get_geometry_list("__scenic__map_icon$")


def get_scenic__type_3d_place_name_list():
    return get_geometry_list("__scenic__type_3d_place_name$")


def division_terrain_change_material_assign_mat(material_type, is_use_ramp=True):
    # # blender-osm所存在的profile
    # roads_dic = {'paths_bridleway': 2.0, 'paths_cycleway': 2.2, 'paths_footway': 2.0, 'paths_steps': 1.6, 'railways': 6.0, 'roads_motorway': 10.0, 'roads_other': 7.0,
    #              'roads_pedestrian': 7.0, 'roads_primary': 9.0, 'roads_residential': 7.0, 'roads_secondary': 8.0, 'roads_service': 4.0, 'roads_tertiary': 7.0,
    #              'roads_track': 3.0, 'roads_trunk': 9.0, 'roads_unclassified': 7.0}
    # water_dic = {'waterways_canal': 10,
    #              'waterways_drain': 3,
    #              'waterways_river': 10,
    #              'waterways_stream': 2, }
    #
    # osm_profile_width_dic = copy.deepcopy(roads_dic)
    # osm_profile_width_dic.update(water_dic)
    #
    # roads_type_list = list(roads_dic.keys())
    # water_type_list = list(water_dic.keys())
    cmds.select(get_goverment__map_icon_list() + get_goverment__type_3d_place_name_list())
    if cmds.ls(sl=1):
        cmds.hyperShade(assign='gover*ment_type_3d_mat_{}_template_SG'.format(material_type))  # goverment_type_3d_mat_arnold_template或者goverment_type_3d_mat_arnold_template_SG都可以

    cmds.select(get_scenic__map_icon_list() + get_scenic__type_3d_place_name_list())
    if cmds.ls(sl=1):
        cmds.hyperShade(assign='scenic_type_3d_mat_{}_template_SG'.format(material_type))

    cmds.select("geodetic_ground_plane")  # 就已经选择了 选择集 里的面了
    if cmds.ls(sl=1):
        cmds.hyperShade(assign='geodetic_ground_plane_mat_{}_template_SG'.format(material_type))

    cmds.select("*division_name_typeMesh1")  # 就已经选择了 选择集 里的面了
    if cmds.ls(sl=1):
        cmds.hyperShade(assign='division_name_mat_{}_template_SG'.format(material_type))

    cmds.select(cmds.ls("*__dem__gdem_v3_30m_ground_plane") + cmds.ls("*__dem__gdem_v3_30m"))
    if cmds.ls(sl=1):
        cmds.hyperShade(assign='dem_displacement_mat_{}_template_SG'.format(material_type))

    cmds.select("dem_displacement_middle_stretch_face_set")  # 就已经选择了 选择集 里的面了
    if cmds.ls(sl=1):
        cmds.hyperShade(assign='dem_displacement_middle_stretch_face_mat_{}_template_SG'.format(material_type))

    if is_country_or_region:
        cmds.select("*division_name_typeMesh2")  # 就已经选择了 选择集 里的面了
        if cmds.ls(sl=1):
            cmds.hyperShade(assign='division_name2_mat_{}_template_SG'.format(material_type))

        cmds.select("*national_flag_pattern")  # 就已经选择了 选择集 里的面了
        if cmds.ls(sl=1):
            cmds.hyperShade(assign='national_flag_pattern_mat_{}_template_SG'.format(material_type))

        cmds.select("*national_flag_mast")  # 就已经选择了 选择集 里的面了
        if cmds.ls(sl=1):
            cmds.hyperShade(assign='national_flag_mast_mat_{}_template_SG'.format(material_type))

    # 道路
    # roads_sweep_list=cmds.ls("*__osm__roads_*__sweep")
    cmds.select(cmds.ls("*__osm__roads_*__sweep"))
    if cmds.ls(sl=1):
        cmds.hyperShade(assign='roads_mat_{}_template_SG'.format(material_type))

    cmds.select(cmds.ls("*__osm__waterways_*__sweep"))
    if cmds.ls(sl=1):
        cmds.hyperShade(assign='water_mat_{}_template_SG'.format(material_type))
    if is_use_ramp:
        division_terrain_change_material_assign_mat_ramp(material_type)


def division_terrain_change_material_assign_mat_ramp(material_type):
    if material_type == "blinn" and cmds.checkBox("is_ramp_blinn", q=1, value=1):
        division_terrain_change_material_assign_middle_stretch_face_mat(material_type)
    if material_type == "arnold" and cmds.checkBox("is_ramp_arnold", q=1, value=1):
        division_terrain_change_material_assign_middle_stretch_face_mat(material_type)


def division_terrain_change_material_assign_middle_stretch_face_mat(material_type):
    print("material_type", material_type)

    cmds.select(cmds.ls("*__dem__gdem_v3_30m"))
    cmds.hyperShade(assign='elevation_mat_{}_template_SG'.format(material_type))

    cmds.select("dem_displacement_middle_stretch_face_set")  # 就已经选择了 选择集 里的面了
    cmds.hyperShade(assign='dem_displacement_middle_stretch_face_mat_{}_template_SG'.format(material_type))
    # cmds.sets(edit=True, forceElement="dem_displacement_middle_stretch_face_mat_arnold_template_SG")


def division_terrain_change_material_assign_mat_part_setting(part_type):
    print("part_type", part_type)

    if part_type == "2dmap":
        cmds.setAttr("dem_displacement_texture_template.exposure", -0.900)
        cmds.setAttr("aiPhysicalSky1.groundAlbedo", 255 / 255, 255 / 255, 255 / 255)

    if part_type == "sat_or_ramp":
        cmds.setAttr("dem_displacement_texture_template.exposure", 0.300)
        cmds.setAttr("aiPhysicalSky1.groundAlbedo", 26 / 255, 26 / 255, 26 / 255)


def division_terrain_change_material_ui():
    if (cmds.window('division_terrain_change_material', q=True, ex=True)):
        cmds.deleteUI('division_terrain_change_material')
    if (cmds.windowPref('division_terrain_change_material', q=1, ex=1)):
        cmds.windowPref('division_terrain_change_material', r=1)
    cmds.window('division_terrain_change_material', mb=True)
    cmds.columnLayout("division_terrain_change_material_columnLayout", w=405, adj=False, cal=u'center', cw=200, rs=5)
    # cmds.rowLayout("division_terrain_change_material_columnLayout_blinn_rowLayout", p="division_terrain_change_material_columnLayout", nc=2)
    # cmds.button(label="赋予所有模型为blinn材质球", annotation=u"赋予所有模型为blinn材质球,blinn材质球可以导出到其它软件", width=200, command="division_terrain_change_material_assign_mat('blinn')")
    # cmds.button(label="赋予所有模型为arnold材质球",
    #             annotation=u"赋予所有模型为arnold材质球,可以用maya直接渲染,用arnold渲染器的渲染静帧效果好,但渲染比较慢;如果你要渲染动画,可以自己制作redshift材质球后使用redshift渲染",
    #             width=200, command="division_terrain_change_material_assign_mat('arnold')")
    #
    # cmds.rowLayout("division_terrain_change_material_columnLayout_arnold_rowLayout", p="division_terrain_change_material_columnLayout", nc=2)
    # cmds.button(label="赋予地形模型为渐变色的blinn材质球",
    #             annotation=u"注意,使用之后模型可能会变成绿色,只是显示bug,渲染不会出现问题,保存打开之后会是正确的。赋予地形模型为blinn材质球,blinn材质球可以导出到其它软件",
    #             width=200, command="division_terrain_change_material_assign_middle_stretch_face_mat('blinn')")
    # cmds.button(label="赋予地形模型为渐变色的arnold材质球",
    #             annotation=u"注意,使用之后模型可能会变成绿色,只是显示bug,渲染不会出现问题,保存打开之后会是正确的。赋予地形模型为渐变色的arnold材质球,可以用maya直接渲染,用arnold渲染器的渲染静帧效果好,但渲染比较慢;如果你要渲染动画,可以自己制作redshift材质球后使用redshift渲染",
    #             width=200, command="division_terrain_change_material_assign_middle_stretch_face_mat('arnold')")

    cmds.rowLayout("division_terrain_change_material_columnLayout_blinn_rowLayout", p="division_terrain_change_material_columnLayout", nc=2)
    cmds.button(label="赋予所有模型为blinn材质球", annotation=u"赋予所有模型为blinn材质球,blinn材质球可以导出到其它软件", width=200, command="division_terrain_change_material_assign_mat('blinn')")
    cmds.checkBox("is_ramp_blinn", label="赋予地形模型为渐变色的blinn材质球",
                  annotation=u"注意,使用之后模型可能会变成绿色,只是显示bug,渲染不会出现问题,保存打开之后会是正确的。赋予地形模型为blinn材质球,blinn材质球可以导出到其它软件",
                  width=200, v=0)

    cmds.rowLayout("division_terrain_change_material_columnLayout_arnold_rowLayout", p="division_terrain_change_material_columnLayout", nc=2)
    cmds.button(label="赋予所有模型为arnold材质球",
                annotation=u"赋予所有模型为arnold材质球,可以用maya直接渲染,用arnold渲染器的渲染静帧效果好,但渲染比较慢;如果你要渲染动画,可以自己制作redshift材质球后使用redshift渲染",
                width=200, command="division_terrain_change_material_assign_mat('arnold')")
    cmds.checkBox("is_ramp_arnold", label="赋予地形模型为渐变色的arnold材质球",
                  annotation=u"注意,使用之后模型可能会变成绿色,只是显示bug,渲染不会出现问题,保存打开之后会是正确的。赋予地形模型为渐变色的arnold材质球,可以用maya直接渲染,用arnold渲染器的渲染静帧效果好,但渲染比较慢;如果你要渲染动画,可以自己制作redshift材质球后使用redshift渲染",
                  width=200, v=0)

    cmds.rowLayout("division_terrain_change_material_columnLayout_sat_and_2dmap_rowLayout", p="division_terrain_change_material_columnLayout", nc=2)
    cmds.button(label="设置为2d地图的参数",
                annotation=u"如果你要渲染二维地图,请先手动替换为二维地图的贴图,然后记得点击此按钮设置对应的参数",
                width=200, command="division_terrain_change_material_assign_mat_part_setting('2dmap')")

    cmds.button(label="设置为卫星地图或者渐变地图的参数",
                annotation=u"如果你要渲染卫星地图或者渐变地图,并且你之前又点击过左侧的按钮,请记得点击此按钮恢复设置对应的参数",
                width=200, command="division_terrain_change_material_assign_mat_part_setting('sat_or_ramp')")
    cmds.showWindow('division_terrain_change_material')


is_country_or_region = True

if __name__ == '__main__':
    division_terrain_change_material_ui()

标签 mayapython脚本

声明:该资源由发布人:【BEJ48】上传,点击查看作者主页其他资源。

CG模型网(cgmodel.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何CG模型网(cgmodel.com)之意见及观点。

推送到

首页推荐 编辑推荐

取消 通知作者
对此作品设置了隐私保护,禁止保存至本地。