2009-05-14 9 views
0

기본적으로 3Ds Max 9의 "Standard"재질에 몇 가지 속성을 추가하려고합니다. 실제로이 작업을 최대 스크립트를 통해 수행 할 수는 있지만 실제로 우리의 수출업자를 깨고있다.3Ds 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'이벤트를 사용하여 숨겨진 항목에 연결했습니다. 그래서 그것들은 올바르게 작동하지만, diffuse와 specular와 같은 것들에 대한 머티리얼 맵은 작동하지 않습니다 (이것이 AFAIK를 텍스처링하는 유일한 방법입니다).

자료 유형에 이러한 몇 가지 설정을 추가해야하므로 '위임자'클래스 내의 모든 데이터를 내보낼 수 있습니다 (기본 상속이 너무 많습니다).

감사

답변

0

두 possiblities :

  1. 이 수출 모든되는 ParamBlocks을 열거 하는가? 스크립트의 매개 변수가 추가 pblock으로 끝나게 될 것이라고 생각합니다. 수출업자가 문제가 될 수있는 pblock 0을 살펴 본다면

  2. 매개 변수가 스크립트와 대리인에서 동일한 이름을 사용하기 전에이 사용법을 보지 못했습니다. 난 당신이 일반적으로 스크립트에서 새로운 매개 변수를 만들고 대리인에게 적절하게, 다른 이름을 사용하여 할당해야한다고 생각합니다. 적어도, 그렇게 해왔습니다.

0

다음은 기본 확장 쉐이더입니다. 내가 가진 문제는 매개 변수에 롤아웃이 지정되어 있지 않다는 것입니다. 정의되지 않은 경우 찾을 수 없으면 찾을 수없는 경우 exporter get이 모두 버그가 있습니다.

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 
     ) 

    ) 
)