通过紧凑的材质编辑器和Slate材质编辑器,可以通过两种方式访问maxscript中的材质。问题是,如果将max设置为使用Slate编辑器,则尝试通过压缩编辑器(currentMaterialLibrary
,sceneMaterials
,meditMaterials
访问/修改材料的脚本会失败,反之亦然。
有没有办法直接在maxscript中访问材料,无论使用哪种编辑器?
有了这些材料,我想:
答案 0 :(得分:4)
如果您想查找所有现有资料(在场景中或不在场景中),以下代码段会为您执行此操作
for aMtlType in material.classes do
(
for aMtl in (getClassInstances aMtlType processAllAnimatables:true) do
(
print aMtl
-- Does this material exist in the scene or not?
if (findItem sceneMaterials aMtl) == 0 do (print "This material does not exist in the scene")
)
)
我不太确定如何从现场清除它。您可以获得dependents(refs.dependents aMtl),然后将对此材质的任何引用替换为新的默认材质。这应该有用,虽然我没有尝试过(或者甚至尝试过它)。所以...测试一下并小心使用: - )。
defMtl = ...
for d in refs.dependents aMtl do (
refIdx = 0
for i = 1 to refs.getNumRefs d do ( if (refs.getreference d i) == aMtl ) do ( refIdx = i )
refs.replaceReference aMtl refIdx defMtl
)
对于您的第二个问题 - 检查属性 - 您可以检查它是否具有适当的属性并根据需要设置值
if(hasProperty aMtl" diffuse")do(aMtl.diffuse = 0)
答案 1 :(得分:0)
你对你想要做的事情并不是很具体,但是你可以做的是循环遍历场景中的所有材料,然后从那里去挑选你想做什么材料做什么。通过这种方式,它不关心材料编辑器正在使用什么设置。
for mat in scenematerials do
(
print ("material name: " + mat.name)
)