最近为了场景的优化,接到一个小人物,用maxscript把相同父节点的可编辑网格合并,以使程序渲染速度提高,原理在场景管理器那篇随笔中说到过了。于是在晨辉的帮助下开始学习maxscript,遇到问题主要可以3dmax的maxscript.chm中找到帮助,在研究了一番maxscript的写法之后和将可能会遇到的问题后再开始写就会很流畅了。
考虑到主要的问题有:
1 函数、if、for的写法
2 如何判断一个节点的类型(MaxRootNode?Dummy?Editable_mesh?)这里使用classOf函数(也可以使用isKindOf)
3 依附的选项,这里主要加上attachMat:#IDToMat
4 构造子节点数组<node>.children、判断数组数量<node>.children.count
5 递归的逻辑就不啰嗦了,主要注意的是合并一个节点后,会使用source_node名字作为新名字,并删除原两节点,这样原来数组中第3个节点就变成了第2个了
上代码:
fn combineNode node=
(
number=node.children.count-1
for i=1 to number do
(
meshop.attach node.children[1] node.children[2] attachMat:#IDToMat
)
)
fn recursion node=
(
if Editable_mesh==classOf node.children[1] then
(
combineNode node
)
else
(
for i=1 to node.children.count do recursion node.children[i]
)
)
recursion rootNode