Как правильно расширить материал 3Ds Max

По сути, я просто пытаюсь добавить еще несколько свойств к «Стандартному» материалу в 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).

Как мне добавить эту пару настроек к типу материала, чтобы он также экспортировал все данные в классе «делегат» (неужели базовое наследование слишком много, чтобы о нем просить)?

Спасибо


person Grant Peters    schedule 14.05.2009    source источник


Ответы (2)


Две возможности:

  1. Перечисляет ли ваш экспортер все парамблоки? Я предполагаю, что ваши параметры в скрипте попадут в дополнительный pblock. Если ваш экспортер просто смотрит на pblock 0, это может быть вашей проблемой.

  2. Я раньше не встречал такого использования, когда параметры имеют одно и то же имя в скрипте и делегате. Я думаю, что вы обычно должны создавать новые параметры в сценарии и соответствующим образом назначать их делегатам, используя другие имена. По крайней мере, так я и сделал.

person cmaughan    schedule 26.11.2009

Вот базовый расширенный шейдер. Думаю, проблема в том, что в параметрах не указаны параметры. Если он не определен, тогда вы не можете их найти, если он не может их найти, то у экспортера все глючит.

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
        )

    )
)
person IAmNoone    schedule 25.10.2010