跨服战场

3Dmax Script 自动减面

工作中需要对很多的家装Vray材质模型自动减面 并导出相对应的实时渲染的模型数据到unity3D,遇到很多坑,特此记录并分享。

1.自动减面:3Dmax自动减面的修改器有三个:MultiRes、Optimize、ProOptimizer。 对比下来 ProOptimizer 减面效果比较好。以下代码为目标添加修改器并设置保留UV的属性。

addModifier _obj(ProOptimizer()) ui:on

_modif = _obj.modifiers[#ProOptimizer]

_modif.KeepUV = true

_modif.LockUV = true

_modif.OptimizationMode = 1

_modif.Calculate = true

_modif.vertexCount = _VertsCount

初次测试以为减面功能完成。 后来发现有时候运行不会执行减面操作,经过多次测试需要减面的模型要处于选中状态。为此在代码前面添加减面命令。

select _obj

以为减面功能完成。 一波三折,有时候仍然不执行calculate 运算。多次测试都要手动点击一次,后续代码才执行正常。查了很多资料。百度不到,只能google 。外网的大佬们说要加一句:redrawViews() 。经测试并不能解决问题。后来拜了佛祖。佛祖给了我一个灵光。心想每次点一次calculate,是否是要在修改器面板下执行呢?后来加了以下这句代码切换至修改面板语句:

max modify mode

多次测试没有问题。 真的是各种Trick,查无可查。

之前写的自动烘焙AO的脚本,有时候自动展UV失灵,估计也是以上问题造成的。以下是自动减面的全部函数部分:

fn fn_OptimizeMesh _obj _vertsCount=(

max modify mode

select _obj

_modif = _obj.modifiers[#ProOptimizer]

if(_modif == undefined)do(

addModifier _obj(ProOptimizer()) ui:on

_modif = _obj.modifiers[#ProOptimizer]

)

_modif.KeepUV = true

_modif.LockUV = true

_modif.OptimizationMode = 1

_modif.Calculate = true

redrawviews()

_modif.vertexCount = _VertsCount

)