3ddy
Autodesk 3D Studio Max / 11 jaar geleden
Maxscript: Extend Standard Materiaal Ik ben afgelopen week gedoken in het extenden van materialen en maps van 3ds max. Hiermee maak je gebruik van een bestaand materiaal, maar kun je functies en dergelijke toevoegen en het materiaal qua interface en het gedrag ervan opnieuw opbouwen.

Wat nu alleen het probleem is, is dat met de komst van Hardware Shading en Nitrous en Mental Ray de extend niet werkt zoals men zegt dat het zou moeten werken. Voor het mental ray stukje heb ik al een workaround gescript, maar ik kom er niet uit hoe ik de Hardware Shading aan krijg als ik een standaard materiaal extend.

Iemand ervaring mee?
 Like
Volg
 Reageer
Nog 2 reacties weergeven
Pgabriel
Daar kan ik wel weer mee helpen. 😉
zal morgen eens meevoelen. Heb nog wel idee waar ik zoiets kan gebruiken.
 11 jaar geleden
Ralf
Geen ervaring, maar wel benieuwd naar je code.
 11 jaar geleden
3ddy
Dit is de code. Waarom er blije smilies staan is denk ik nog een klein volgorde bugje, als je er een sluitende haak "😄" van maakt zal het leesbaarder zijn.

De mrBugFix functie zorgt ervoor dat nadat het materiaal gemaakt is (doormiddel van een callback) de settings voor het materiaal ook gezet worden zodat de extended materiaal ook gerenderd kan worden in mental ray.


plugin material eddyMaterial
name:"3ddy"
classID:#(0x50e34e1c, 0x75a8bca2)
extends:Standard
replaceUI:true
version:1
(
parameters main rollout:params
(
    s_gloss type:#float default:0.1 ui:s_gloss
   s_spec type:#float default:0.0 ui:s_spec
   s_bump type:#float default:1.0 ui:s_bump
   
    eddy_color type:#textureMap ui:choosemap_di
   eddy_bump type:#textureMap ui:choosemap_bump
   eddy_specularMask type:#textureMap ui:choosemap_specularLevel
   eddy_reflection type:#textureMap ui:choosemap_reflection
   
   on s_gloss set val do
   (
      delegate.Glossiness = val * 100
   😄
   
   on s_spec set val do
   (
      delegate.specularLevel = val * 100
   😄
   
   on s_bump set val do
   (
      delegate.bumpMapAmount = val * 100
   😄
   
   on eddy_color set val do
   (
      delegate.diffuseMap = val
   😄

   on eddy_bump set val do
   (
      delegate.bumpMap = val
      delegate.bumpMapAmount = 100
   😄
   
   on eddy_specularMask set val do
   (
      delegate.specularLevelMap = val
   😄
   
   on eddy_reflection set val do
   (
      delegate.reflectionMap = val
   😄
)
rollout params "eddy Parameters"
(
    spinner s_spec "Specular Level: " fieldwidth:45 offset:[0,0] align:#right range:[0,1,0.0]
   spinner s_gloss "Glossiness: " fieldwidth:45 offset:[0,0] align:#right range:[0,1,0.1]
    spinner s_bump "Bump Amount: " fieldwidth:45 offset:[0,0] align:#right range:[0,10,1.0]   
    --colorpicker col "Base color: " align:#center
   label diffusemapName "Diffusemap: " across:2 align:#left
   mapbutton choosemap_di "None" tooltip:"Select Diffuse Map" width:150 height:16

   label bumpmapName "Bumpmap: " across:2 align:#left
   mapbutton choosemap_bump "None" tooltip:"Select Bump Map" width:150 height:16

   label specularLevelmapName "Specularmap: " across:2 align:#left
   mapbutton choosemap_specularLevel "None" tooltip:"Select Diffuse Map" width:150 height:16

   label reflectionName "Reflection: " across:2 align:#left
   mapbutton choosemap_reflection "None" tooltip:"Select Reflection Map" width:150 height:16

)
on create do
(   

   manager = dxshadermanager.getViewportManager this
   if (manager==null) then manager = DXShaderManager.addViewportManager this
    )
)

fn mrBugFix a =
(   
   if a.classID[1] == 0x50e34e1c AND a.classID[2] == 0x75a8bca2 then
   (
      try
      a.mental_ray__material_custom_attribute.SurfaceLockShow = true
      catch()      
      try
      a.mental_ray__material_custom_attribute.ShadowLockShow = true
      catch()
      try
      a.mental_ray__material_custom_attribute.PhotonLockShow = true
      catch()
      try
      a.mental_ray__material_custom_attribute.DisplacementLockShow = true
      catch()
   😄
)

callbacks.removeScripts id:#relion_material
callbacks.addScript #mtlRefAdded "mrBugFix(callbacks.notificationParam())" id:#relion_material

 11 jaar geleden
Ralf
Ik heb er nog geen studie van gemaakt, maar tot zover:

-- Error occurred in anonymous codeblock; filename: ; position: 19; line: 1
-- Compile error: Bad number or time syntax
-- In line: plugin material 3dd

hence; de roll-out wordt niet ge-create. Het lijkt allemaal een beetje mis te gaan op de lettercombinatie "3ddy" :p
 11 jaar geleden
3ddy
Dat krijg je van hernoemen... er stond natuurlijk een bedrijfsnaam...

Ik heb hem nu even voor de zekerheid getest.
 11 jaar geleden