首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在没有材料编辑器的情况下访问maxscript中的材料?

如何在没有材料编辑器的情况下访问maxscript中的材料?
EN

Stack Overflow用户
提问于 2014-03-12 12:27:46
回答 2查看 10.5K关注 0票数 3

似乎有两个选项可以访问maxscript中的材料,通过紧凑的材料编辑器和板岩材料编辑器。问题是,尝试通过紧凑编辑器(currentMaterialLibrarysceneMaterialsmeditMaterials)访问/修改材料的纸片如果设置为使用板岩编辑器,则失败,反之亦然。

是否有一种方法可以直接访问maxscript中的材料,而不管使用哪个编辑器?

一旦我有了材料,我想:

  1. 从场景中清除未分配的材料,这样就不会丢失未使用材料上的纹理,从而不会在场景打开/网络渲染时抛出错误。
  2. 检查某些材料特性(即光泽度细分),这样购买的模型具有“不必要的高价值”,就不会破坏渲染时间。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-13 21:23:16

如果您想要找到所有现有的材料(无论是否在现场),下面的片段将为您完成此任务

代码语言:javascript
复制
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")
    )
)

我不知道怎么把它从现场清除掉。您可以获得受抚养人(refs.dependents aMtl),然后将对此材料的任何引用替换为新的默认材料。虽然我还没有试过它(甚至试图运行它),但这应该是可行的。所以..。好好测试一下,小心使用:-)。

代码语言:javascript
复制
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
)

对于第二个问题--检查属性--您可以检查它是否具有a固有属性,并根据需要设置值。

如果(hasProperty aMtl“弥散”) do ( aMtl.diffuse =0)

票数 5
EN

Stack Overflow用户

发布于 2014-03-13 06:29:18

对于你想要做的事情,你不是很具体,但是你能做的是在场景中遍历所有的材料,然后从那里挑选出你想做什么事情的材料。通过这样做,它不关心你的材料编辑器使用什么设置。

代码语言:javascript
复制
for mat in scenematerials do
(
    print ("material name: " + mat.name)    
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22351548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档