2009-05-14 25 views
0

Fondamentalement, j'essaie juste d'ajouter quelques propriétés supplémentaires au matériau "Standard" dans 3Ds Max 9. J'ai réussi à accomplir cela à travers le script max, mais il est en train de casser notre exportateur.Comment étendre un matériau 3Ds Max correctement

L'exportateur fonctionne correctement pour tout ce qui est écorché avec le matériau normal "Standard", mais la version étendue semble cacher les propriétés de la classe de base de l'exportateur.

Ce que j'est jusqu'à présent ceci:


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 
     ) 

    ) 
)

En déclarant les variables moi-même, l'exportateur peut les lire, mais cela ne fait un lien entre les valeurs étant fixées par l'interface utilisateur. Pour résoudre ce problème, j'ai utilisé les événements 'sur XXX get/set' pour créer un lien vers les éléments cachés. Donc, ceux qui fonctionnent maintenant correctement, mais les cartes matérielles pour des choses comme diffuses et spéculaires ne fonctionnent pas (ce qui est la seule façon de texturer la chose AFAIK).

Comment devrais-je ajouter ces deux paramètres à un type de matériau, afin qu'il exporte également toutes les données de la classe 'delegate' (l'héritage de base est-il trop important à demander)?

Merci

Répondre

0

Deux possiblités:

  1. Est-ce votre énumèrent exportateur tous les paramblocks? J'imagine que vos paramètres dans le script finiront dans un pblock supplémentaire. Si votre exportateur ne regarde que pblock 0, cela pourrait être votre problème.

  2. Je n'ai pas vu cette utilisation auparavant où les paramètres ont le même nom dans le script et le délégué. Je pense que vous êtes généralement censé créer de nouveaux paramètres dans le script et les assigner aux délégués de manière appropriée, en utilisant des noms différents. Au moins, c'est comme ça que je l'ai fait.

0

Voici un shader étendu de base. Je pense que le problème que vous avez est que votre déploiement n'est pas spécifié pour les paramètres. Si ce n'est pas défini, alors vous ne pouvez pas trouver alors, s'il ne peut pas les trouver, exportateur est tout bogué.

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 
     ) 

    ) 
)