关于MEdit,有一个要明白的概念:
场景中物体上的材质 和 MEdit中的材质会一同被保存
如果MEdit中有一个材质,所有的物体上都没使用, 这个材质会随文件一起保存
如果一个物体上有个材质,它没有在MEdit上,这个材质也会随着物体一起保存
如果这个物体被删除了,上面的材质没有在MEdit上,那么这个材质就一起被删除了
当前材质编辑器中所选的材质
MEditMaterials[activeMeditSlot]
显示当前所选材质编辑器中的材质属性,根据材质类型的不同,属性也会不同
showproperties MEditMaterials[activeMeditSlot]
判断一个材质的类型使用Classof 就行
classof MEditMaterials[activeMeditSlot]
遍历整个材质编辑器的材质
-- 材质编辑器只有24个材质球for i = 1 to 24 do
(
-- 做一些事情 . . .
-- 打印所有的材质球名称
print ( MEditMaterials[i].name )
-- 打印他们的类型
print ( classof MeditMaterials[i] )
)
检查一个物体是否有材质
-- 如果这个结果为 True,那么说明所选没有材质($.mat == undefined)
清理掉物体上的材质也可以用此
$.mat = undefined-- 或可以遍历所有所选的物体for s in selection do s.mat = undefined
除了材质,每个几何体都会有wirecolor 的属性,就是基本的线框颜色
-- 也可以是 =[0,0,0] -- 0~255的值for s in selection do s.wirecolor = color 0 0 0
赋予材质编辑器中所选的材质 到 所选的物体上
for s in selection do s.mat = MEditMaterials[activeMeditSlot]
创建一个标准材质到 所选的材质编辑球上
MEditMaterials[activeMeditSlot] = Standard()
清空材质编辑器中的材质球
for i = 1 to 24 do MEditMaterials[i] = Standard name:("StdMat_"+i as string)
创建一个多维材质,并放入到所选的材质编辑槽上
-- 创建一个多维材质fn fnCreateAMultiMat iCount=
(
-- 创建一个多维材质
myMultiMat = Multimaterial count:iCount
-- 遍历设置所有材质
for i = 1 to myMultiMat.count do
(
-- 材质的名称
myMultiMat[i] = Standardmaterial name:("SubMat_"+ i as string)
-- 多维材质球上的名称栏上的名字
myMultiMat.names[i] = ("Slot_"+ i as string)
-- . . .
)
-- 将创建材质放到当前所选 材质编辑器 所选的槽中
MEditMaterials[activeMeditSlot] = myMultiMat
-- 或者也可以遍历所选择的物体,赋予当前材质
-- for s in selection do s.mat = myMultiMat
)
搜集材质上贴图路径的方法
-- 搜集所给材质的所有贴图fn fnGetMatTexList mat=
(
-- 用于搜集贴图的数组
local texs = #()
-- 贴图的数量
iTexSlotCount = getNumSubTexmaps mat
-- 遍历
if(iTexSlotCount > 0)then for i = 1 to iTexSlotCount do
(
local tempTex = getSubTexmap mat i
if(classof tempTex == Bitmaptexture)then
(
append texs (tempTex .filename)
)
)
return texs
)
对于不同类型材质可以分开处理
fn fnGetMatTextures mat=
(
local aAllTexList = #()
case (classof mat) of
(
-- 如果是多维材质
Multimaterial:
(
-- 遍历所有的子材质
for i = 1 to mat.count do
(
-- 获得单个材质上所有的贴图
local aTexList = fnGetMatTexList (mat[i])
-- 加到总的列表上
if(aTexList.count >0)then for t in aTexList do append aAllTexList t
)
)
-- 标准材质
Standardmaterial:
(
aAllTexList = fnGetMatTexList mat
)
-- 其它
default:
(
print "unknown mat type!"
)
)
-- 去除可能重复的贴图
aAllTexList = makeUniqueArray aAllTexList
-- 返回
return aAllTexList
)
-- 调用的时候就调用
fnGetMatTextures
-- 例如: 获得当前在材质编辑器中所选材质上的贴图
texs = fnGetMatTextures (MEditMaterials[activeMeditSlot])
作者:TAZORN
著作权归作者所有
【相关阅读】:
Maxscript_基础_回调函数:http://tk.v5cg.com/help/246.html
Maxscript_基础_材质处理:http://tk.v5cg.com/help/247.html
Maxscript_基础_修改器操作:http://tk.v5cg.com/help/248.html
Maxscript_基础_创建窗口:http://tk.v5cg.com/help/249.html
Maxscript_基础_遍历与递归:http://tk.v5cg.com/help/250.html
Maxscript_与DotNet交互:http://tk.v5cg.com/help/251.html
【上传发布插件】:
编写3DMAX插件到发布上线全流程:http://tk.v5cg.com/help/147.html
代码上传与工具发布:http://tk.v5cg.com/help/99.html
代码发布,部署实例参考:http://tk.v5cg.com/help/140.html
PS【动作库】代码部署指南:http://tk.v5cg.com/help/141.html
CG云盘 - 开发者使用说明:http://tk.v5cg.com/help/34.html