0

基本的に、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
        )

    )
)

変数を自分で宣言することで、エクスポーターはそれらを読み取ることができましたが、これは実際にはUIによって設定されている値にリンクしていませんでした。これを解決するために、「on XXX get / set」イベントを使用して、非表示のアイテムにリンクしました。そのため、これらは正しく機能するようになりましたが、拡散反射光や鏡面反射光などのマテリアルマップは機能しません(これが、AFAIKをテクスチャリングする唯一の方法です)。

これらのいくつかの設定をマテリアルタイプに追加して、「デリゲート」クラス内のすべてのデータもエクスポートするようにするにはどうすればよいですか(基本的な継承は要求するには多すぎます)?

ありがとう

4

2 に答える 2

0

これが基本的な拡張シェーダーです。問題は、ロールアウトがパラメーターに指定されていないことだと思います。定義されていない場合は見つけることができません。見つからない場合は、エクスポーターがすべてバグになります。

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
        )

    )
)
于 2010-10-25T08:43:07.873 に答える
0

2 つの可能性:

  1. エクスポータはすべての paramblock を列挙していますか? スクリプト内のパラメーターが追加の pblock になると思います。エクスポータが pblock 0 だけを見る場合、それが問題である可能性があります。

  2. スクリプトとデリゲートでパラメーターが同じ名前を持つこの使用法は見たことがありません。通常、スクリプトで新しいパラメーターを作成し、別の名前を使用してデリゲートに適切に割り当てる必要があると思います。少なくとも、私はそうしてきました。

于 2009-11-26T12:53:31.760 に答える