错误案例:导出的3dmax.jlb文件在vue中运行,是黑色的

解决办法:直接用下面的代码运行
import pymxs
from pymxs import runtime as rt
def convert_vray_to_physical_material(convert_to_physical=True):
"""
将场景中所有 VRayMtl 转换为 Physical Material 或 Standard Material
:param convert_to_physical: True=转Physical Material, False=转Standard Material
"""
rt.redrawViews() # 刷新视图
# 获取场景中所有VRay材质
vray_materials = [mat for mat in rt.sceneMaterials if rt.isKindOf(mat, rt.VRayMtl)]
if not vray_materials:
rt.messageBox("场景中没有找到 VRayMtl 材质!", title="提示")
return
for vray_mat in vray_materials:
try:
new_mat = None
mat_name = vray_mat.name
if convert_to_physical:
# 创建 Physical Material
new_mat = rt.PhysicalMaterial()
new_mat.name = f"{mat_name}_Physical"
# 复制基础属性
if hasattr(vray_mat, "diffuse"):
new_mat.base_color = vray_mat.diffuse
if hasattr(vray_mat, "reflection"):
new_mat.metalness = 0.0 # 非金属
new_mat.roughness = 1.0 - vray_mat.reflection_glossiness
new_mat.ior = 1.5 # 默认值
else:
# 创建 Standard Material
new_mat = rt.StandardMaterial()
new_mat.name = f"{mat_name}_Standard"
# 复制基础属性
if hasattr(vray_mat, "diffuse"):
new_mat.diffuse = vray_mat.diffuse
if hasattr(vray_mat, "reflection"):
new_mat.specular_level = vray_mat.reflection_amount * 100
new_mat.glossiness = vray_mat.reflection_glossiness * 100
# 替换材质
rt.replaceInstances(vray_mat, new_mat)
print(f"已转换材质: {mat_name} -> {new_mat.name}")
except Exception as e:
print(f"转换失败: {vray_mat.name} | 错误: {str(e)}")
rt.messageBox(f"转换完成!共处理 {len(vray_materials)} 个VRay材质。", title="完成")
# 调用示例(默认转Physical Material)
convert_vray_to_physical_material(convert_to_physical=True)
插件安装步骤
-
保存脚本:
- 将上述代码复制到记事本,保存为
VRayToPhysicalMaterialConverter.py
(确保扩展名是.py
)。
- 将上述代码复制到记事本,保存为
-
安装到3ds Max:
-
方法1(临时运行) :
打开3ds Max → 菜单栏
Scripting
→Run Script
→ 选择该脚本文件。 -
方法2(永久安装) :
将脚本文件放入3ds Max的脚本目录(如
C:\Users\<用户名>\AppData\Local\Autodesk\3dsMax\<版本>\ENU\scripts\
),然后通过 MAXScript监听器 输入以下命令加载:python.executeFile("VRayToPhysicalMaterialConverter.py")
-
-
自定义按钮(可选):
-
打开
Customize User Interface
→Toolbars
→ 新建一个工具栏。 -
在
Category
中选择Python
,找到脚本名称拖到工具栏即可生成按钮。
-
运行后的结果:
