工作中需要对很多的家装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
)