По сути, я просто пытаюсь добавить еще несколько свойств к «Стандартному» материалу в 3Ds Max 9. Мне действительно удалось добиться этого с помощью сценария max, но это нарушает работу нашего экспортера.
Экспортер отлично работает для всего, что покрыто обычным «стандартным» материалом, но расширенная версия, кажется, скрывает свойства базового класса от экспортера.
На данный момент у меня есть следующее:
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
)
)
)
Объявляя переменные самостоятельно, экспортер мог их читать, но на самом деле это не связывалось со значениями, устанавливаемыми пользовательским интерфейсом. Чтобы решить эту проблему, я использовал события «on XXX get / set» для ссылки на скрытые элементы. Теперь они работают правильно, но карты материалов для таких вещей, как диффузный и зеркальный, не работают (это единственный способ текстурировать вещь, AFAIK).
Как мне добавить эту пару настроек к типу материала, чтобы он также экспортировал все данные в классе «делегат» (неужели базовое наследование слишком много, чтобы о нем просить)?
Спасибо