Scripting 如何正确扩展3Ds Max材质
基本上,我只是尝试向3Ds Max 9中的“标准”材质添加更多属性。实际上,我已经通过max脚本实现了这一点,但它正在破坏我们的导出程序 导出器适用于使用普通“标准”材质进行蒙皮的任何对象,但扩展版本似乎对导出器隐藏了基类的属性 到目前为止,我得到的是:Scripting 如何正确扩展3Ds Max材质,scripting,3dsmax,maxscript,3ds,Scripting,3dsmax,Maxscript,3ds,基本上,我只是尝试向3Ds Max 9中的“标准”材质添加更多属性。实际上,我已经通过max脚本实现了这一点,但它正在破坏我们的导出程序 导出器适用于使用普通“标准”材质进行蒙皮的任何对象,但扩展版本似乎对导出器隐藏了基类的属性 到目前为止,我得到的是: plugin material Standard_WithOutlines name:"Standard & Outlines" classID:#(0x73212413, 0x1ca9e3e6) extends:Standard repla
plugin material Standard_WithOutlines
name:"Standard & Outlines"
classID:#(0x73212413, 0x1ca9e3e6)
extends:Standard replaceUI:false version:1
(
parameters shaderParameters
(
diffuse type:#color
glossiness type:#float
specular type:#color
specularLevel type:#float
selfIllumColor type:#color
selfIllumAmount type:#float
opacity type:#float
on diffuse get val do delegate.diffuse
on glossiness get val do delegate.glossiness / 100.0
on specular get val do delegate.specular
on specularLevel get val do delegate.specularLevel
on selfIllumColor get val do delegate.selfIllumColor
on selfIllumAmount get val do delegate.selfIllumAmount
on opacity get val do delegate.opacity / 100.0
on diffuse set val do delegate.diffuse = val
on glossiness set val do delegate.glossiness = val * 100.0
on specular set val do delegate.specular = val
on specularLevel set val do delegate.specularLevel = val
on selfIllumColor set val do delegate.selfIllumColor = val
on selfIllumAmount set val do delegate.selfIllumAmount = val
on opacity set val do delegate.opacity = val * 100.0
)
parameters MainParams rollout:ExtendedMatRollout
(
ShowOutlining type:#boolean animatable:false default:false ui:outline_Enabled
OutlineColour type:#color animatable:false default:(color 0 0 0) ui:outline_Colour
OutlineThickness type:#float animatable:false default:5 ui:outline_Thickness
)
rollout ExtendedMatRollout "Extended Parameters"
(
groupBox outlinegrp "Outlining" pos:[8,0] width:312 height:62
checkbox outline_Enabled "Enabled" pos:[18,16] width:128 height:16
colorPicker outline_Colour "Colour:" pos:[160,34] width:56 height:20 enabled:ShowOutlining
spinner outline_Thickness "Thickness:" pos:[50,36] width:80 height:16 enabled:ShowOutlining range:[0,100,0]
on outline_Enabled changed state do
(
outline_Colour.enabled = state
outline_Thickness.enabled = state
)
)
)
通过自己声明变量,导出器可以读取变量,但实际上并没有链接到UI设置的值。为了解决这个问题,我使用“on XXX get/set”事件链接到隐藏项。因此,这些现在可以正常工作,但漫反射和镜面反射之类的材质贴图不起作用(这是唯一一种对对象进行纹理处理的方法)
我应该如何将这两个设置添加到材质类型中,以便它也导出“delegate”类中的所有数据(基本继承是否要求太多)
谢谢有两种可能:
这是一个基本的扩展着色器。 我认为您的问题是没有为参数指定卷展栏。 如果它没有定义,那么你就找不到,如果它找不到它们,那么exporter get就全是bug
plugin material Matte name:"Matte" classID:#(0x61108483, 0x4d218a72) extends:Standard replaceUI:true version:1
(
parameters main rollout:params
(
kdColor type:#color default:[90,90,90] ui:mkdColor
on kdColor set val do delegate.diffuse_color = val
)
rollout params "Matte Parameters"
(
-- Basic matte parameters
group "Basic Parameters" (
colorpicker mkdColor "Diffuse: " across:2
)
)
)