Notifications
Clear all

[Closed] Autodesk.max Hair modifier

 MZ1

Anybody know’s how we can access Hair and Fur modifier and it’s properties by using c# and Autodesk.max assembly?

7 Replies

I guess like other World-Space modifiers…
Hair & Fur class ID is #(148282010, 473681766).
But I never have tryed it (just done some Object-Space modifiers tests).

3 Replies
 MZ1
(@mz1)
Joined: 1 year ago

Posts: 0

I searched the entire SDK and Autodesk.max, The only thing that I found (Max 2018 and above) is:
(C++) maxsdk\include\Scene\IHairModifier.h
(C#) Autodesk.Max.MaxSDK.IHairModifier
But it seems this class only return some basic info and is not a solution to set-get all data.
You mean something like this?


            IGlobal global = GlobalInterface.Instance;
            IInterface coreInterface = global.COREInterface;
            IINode selectedNode = coreInterface.GetSelNode(0);
            IObject objRef = selectedNode.ObjectRef;
            IIDerivedObject derObj = (IIDerivedObject)objRef;
            IModifier mod = derObj.Modifiers[0];
            IIHairModifier hair = (IIHairModifier)mod;
            // ?? ...

(@aaandres)
Joined: 1 year ago

Posts: 0

I’m not an expert at all, but I think that with ‘ObjectRef’ you only get the OSModifiers.
To get the WSModifiers, you have to use ‘WSMDerivedObject’:


IIDerivedObject derObj = selectedNode.WSMDerivedObject;

This derived object will hold all the WSModifiers applied to the node.
For Hair&Fur I get 87 parameters, 61 of which are animatable.
Hope it helps.

 MZ1
(@mz1)
Joined: 1 year ago

Posts: 0

So complete code would be like this?


            IGlobal global = GlobalInterface.Instance;
            IInterface coreInterface = global.COREInterface;
            IINode selectedNode = coreInterface.GetSelNode(0);
            IObject objRef = selectedNode.ObjectRef;
            IIDerivedObject derObj = selectedNode.WSMDerivedObject;
            derObj.

Can you tell some of does parameters that are belong to the Hair?
The parameter that I’m trying to find and change (I hope exist) is the number of segments when I apply hair to the spline.

You have to get the IIDerivedObject modifier corresponding to Hair&Fur

IModifier tMod = derObj.GetModifier(i);

, get its IIParamBlock2

IIParamBlock2 param = tMod.GetParamBlock(0);

and then go through the parameters or subanims of the IIParamBlock2.
What I get is:


WSModifiers NumModifiers: 1
DerivedObject SubAnim[0] Name= Hair and Fur
Modifier[0]= Hair and Fur
------SHOW CLASS--------
IObject:Hair and Fur
ClassID = [148282010,473681766]
ClassName = Hair and Fur
Type = Autodesk.Max.Wrappers.Modifier
SuperClass = Wsm ; 2080
------------------
Modifier[0] Number of ParamBlocks2= 1
ParamBlock[0]: NumParams= 88
ParamBlock[0]: numSubs= 62

Param[0] localName= Count; paramType= Int (HashCode= 1); Value= 10000
Param[1] localName= Segments; paramType= Int (HashCode= 1); Value= 5
Param[2] localName= Passes; paramType= Int (HashCode= 1); Value= 1
Param[3] localName= Cut Length; paramType= Float (HashCode= 0); Value= 45
Param[4] localName= Density; paramType= Float (HashCode= 0); Value= 45
Param[5] localName= Scale; paramType= Float (HashCode= 0); Value= 45
Param[6] localName= Random Scale; paramType= Float (HashCode= 0); Value= 45
Param[7] localName= Root Thickness; paramType= Float (HashCode= 0); Value= 45
Param[8] localName= Tip Thickness; paramType= Float (HashCode= 0); Value= 45
Param[9] localName= Hair Interpolate Guides; paramType= Bool2 (HashCode= 4); Value= 1
Param[10] localName= ; paramType= Unspecified (HashCode= 255); Value= 
Param[11] localName= Self Shadow; paramType= Float (HashCode= 0); Value= 45
Param[12] localName= Geom Shadow; paramType= Float (HashCode= 0); Value= 45
Param[13] localName= Specular; paramType= Float (HashCode= 0); Value= 45
Param[14] localName= Gloss; paramType= Float (HashCode= 0); Value= 45
Param[15] localName= Ambient/Diffuse; paramType= Float (HashCode= 0); Value= 45
Param[16] localName= Tip Color; paramType= Rgba (HashCode= 2); Value= 
Param[17] localName= Hue Variation; paramType= Float (HashCode= 0); Value= 45
Param[18] localName= Value Variation; paramType= Float (HashCode= 0); Value= 45
Param[19] localName= Root Color; paramType= Rgba (HashCode= 2); Value= 
Param[20] localName= Mutant Color; paramType= Rgba (HashCode= 2); Value= 
Param[21] localName= Mutant Percent; paramType= Float (HashCode= 0); Value= 45
Param[22] localName= Frizz Root; paramType= Float (HashCode= 0); Value= 45
Param[23] localName= Frizz Tip; paramType= Float (HashCode= 0); Value= 45
Param[24] localName= Frizz Freq X; paramType= Float (HashCode= 0); Value= 45
Param[25] localName= Frizz Freq Y; paramType= Float (HashCode= 0); Value= 45
Param[26] localName= Frizz Freq Z; paramType= Float (HashCode= 0); Value= 45
Param[27] localName= Frizz Anim; paramType= Float (HashCode= 0); Value= 45
Param[28] localName= Frizz Anim Speed; paramType= Float (HashCode= 0); Value= 45
Param[29] localName= Frizz Anim Dir; paramType= Point3 (HashCode= 3); Value= 
Param[30] localName= Kink Root; paramType= Float (HashCode= 0); Value= 45
Param[31] localName= Kink Tip; paramType= Float (HashCode= 0); Value= 45
Param[32] localName= Kink Freq X; paramType= Float (HashCode= 0); Value= 45
Param[33] localName= Kink Freq Y; paramType= Float (HashCode= 0); Value= 45
Param[34] localName= Kink Freq Z; paramType= Float (HashCode= 0); Value= 45
Param[35] localName= Multi Strand Count; paramType= Int (HashCode= 1); Value= 0
Param[36] localName= Root Splay; paramType= Float (HashCode= 0); Value= 45
Param[37] localName= Multi Strand Tip Splay; paramType= Float (HashCode= 0); Value= 45
Param[38] localName= Multi Strand Random; paramType= Float (HashCode= 0); Value= 45
Param[39] localName= Dynamics Mode; paramType= Int (HashCode= 1); Value= 0
Param[40] localName= ; paramType= Unspecified (HashCode= 255); Value= 
Param[41] localName= Simulation Start; paramType= Int (HashCode= 1); Value= 0
Param[42] localName= Simulation End; paramType= Int (HashCode= 1); Value= 100
Param[43] localName= ; paramType= Unspecified (HashCode= 255); Value= 
Param[44] localName= ; paramType= Unspecified (HashCode= 255); Value= 
Param[45] localName= Stiffness; paramType= Float (HashCode= 0); Value= 45
Param[46] localName= Root Hold; paramType= Float (HashCode= 0); Value= 45
Param[47] localName= Dampen; paramType= Float (HashCode= 0); Value= 45
Param[48] localName= ; paramType= Unspecified (HashCode= 255); Value= 
Param[49] localName= ; paramType= Unspecified (HashCode= 255); Value= 
Param[50] localName= Collision Nodes; paramType= InodeTab (HashCode= 2065); Value= 
Param[51] localName= Maps; paramType= TexmapTab (HashCode= 2063); Value= 
Param[52] localName= Maps Enable; paramType= BoolTab (HashCode= 2052); Value= 
Param[53] localName= ; paramType= Unspecified (HashCode= 255); Value= 
Param[54] localName= Display Show Guides; paramType= Bool2 (HashCode= 4); Value= 0
Param[55] localName= Guide Color; paramType= Rgba (HashCode= 2); Value= 
Param[56] localName= Display Show Hairs; paramType= Bool2 (HashCode= 4); Value= 1
Param[57] localName= Hair Color; paramType= Rgba (HashCode= 2); Value= 
Param[58] localName= Hair Percentage; paramType= Float (HashCode= 0); Value= 45
Param[59] localName= Max Display Hairs; paramType= Int (HashCode= 1); Value= 10000
Param[60] localName= Autocollision; paramType= Bool2 (HashCode= 4); Value= 1
Param[61] localName= Force Fields; paramType= InodeTab (HashCode= 2065); Value= 
Param[62] localName= Displacement; paramType= Float (HashCode= 0); Value= 45
Param[63] localName= Gravity; paramType= Float (HashCode= 0); Value= 45
Param[64] localName= ; paramType= Unspecified (HashCode= 255); Value= 
Param[65] localName= Display Hairs As Geometry; paramType= Bool2 (HashCode= 4); Value= 0
Param[66] localName= By Vertex; paramType= Bool2 (HashCode= 4); Value= 0
Param[67] localName= Ignore Backfacing; paramType= Bool2 (HashCode= 4); Value= 0
Param[68] localName= Collision Method; paramType= Int (HashCode= 1); Value= 0
Param[69] localName= Merge Instance Material; paramType= Bool2 (HashCode= 4); Value= 1
Param[70] localName= Geom Mtl ID; paramType= Int (HashCode= 1); Value= 1
Param[71] localName= Apply MR Shader; paramType= Bool2 (HashCode= 4); Value= 0
Param[72] localName= mr Shader; paramType= Mtl (HashCode= 14); Value= 
Param[73] localName= Tip Fade; paramType= Bool2 (HashCode= 4); Value= 1
Param[74] localName= Specular Tint; paramType= Rgba (HashCode= 2); Value= 
Param[75] localName= ; paramType= Unspecified (HashCode= 255); Value= 
Param[76] localName= ; paramType= Unspecified (HashCode= 255); Value= 
Param[77] localName= Override Hair Color; paramType= Bool2 (HashCode= 4); Value= 0
Param[78] localName= Instanced Geometry Name; paramType= String (HashCode= 8); Value= 
Param[79] localName= SubMtl Indices to Replace; paramType= IntTab (HashCode= 2049); Value= 
Param[80] localName= Spline Lock Node Param; paramType= Inode (HashCode= 17); Value= ***
Param[81] localName= Multistrand Twist; paramType= Float (HashCode= 0); Value= 45
Param[82] localName= Multistrand Offset; paramType= Float (HashCode= 0); Value= 45
Param[83] localName= Multistrand Aspect; paramType= Float (HashCode= 0); Value= 45
Param[84] localName= Flyaway Percent Param; paramType= Int (HashCode= 1); Value= 0
Param[85] localName= Flyaway Strength Param; paramType= Float (HashCode= 0); Value= 45
Param[86] localName= Flyaway Mess Strength Param; paramType= Float (HashCode= 0); Value= 45
Param[87] localName= Number of Clumps Param; paramType= Int (HashCode= 1); Value= 0

ParamAnim[0] SubanimName= Count; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[1] SubanimName= Segments; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[2] SubanimName= Passes; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[3] SubanimName= Density; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[4] SubanimName= Scale; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[5] SubanimName= Cut Length; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[6] SubanimName= Random Scale; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[7] SubanimName= Root Thickness; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[8] SubanimName= Tip Thickness; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[9] SubanimName= Displacement; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[10] SubanimName= Self Shadow; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[11] SubanimName= Geom Shadow; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[12] SubanimName= Specular; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[13] SubanimName= Specular Tint; Controller type: CtrlPoint3(SuperClass= 36869)
ParamAnim[14] SubanimName= Gloss; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[15] SubanimName= Ambient/Diffuse; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[16] SubanimName= Tip Color; Controller type: CtrlPoint3(SuperClass= 36869)
ParamAnim[17] SubanimName= Hue Variation; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[18] SubanimName= Value Variation; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[19] SubanimName= Root Color; Controller type: CtrlPoint3(SuperClass= 36869)
ParamAnim[20] SubanimName= Mutant Color; Controller type: CtrlPoint3(SuperClass= 36869)
ParamAnim[21] SubanimName= Mutant Percent; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[22] SubanimName= Specular Tint2 Param; Controller type: CtrlPoint3(SuperClass= 36869)
ParamAnim[23] SubanimName= Flyaway Percent Param; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[24] SubanimName= Flyaway Strength Param; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[25] SubanimName= Flyaway Mess Strength Param; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[26] SubanimName= Number of Clumps Param; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[27] SubanimName= Clumps Strength Param; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[28] SubanimName= Clumps Scruffle Param; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[29] SubanimName= Clumps Rotation Param; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[30] SubanimName= Clumps Offset Param; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[31] SubanimName= Clumps Colors Param; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[32] SubanimName= Clumps Randomization Param; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[33] SubanimName= Clump Flatness Param; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[34] SubanimName= Frizz Root; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[35] SubanimName= Frizz Tip; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[36] SubanimName= Frizz Freq X; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[37] SubanimName= Frizz Freq Y; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[38] SubanimName= Frizz Freq Z; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[39] SubanimName= Frizz Anim; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[40] SubanimName= Frizz Anim Speed; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[41] SubanimName= Kink Root; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[42] SubanimName= Kink Tip; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[43] SubanimName= Kink Freq X; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[44] SubanimName= Kink Freq Y; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[45] SubanimName= Kink Freq Z; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[46] SubanimName= Multi Strand Count; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[47] SubanimName= Root Splay; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[48] SubanimName= Multi Strand Tip Splay; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[49] SubanimName= Multi Strand Random; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[50] SubanimName= Multistrand Twist; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[51] SubanimName= Multistrand Offset; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[52] SubanimName= Multistrand Aspect; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[53] SubanimName= Stiffness; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[54] SubanimName= Root Hold; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[55] SubanimName= Dampen; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[56] SubanimName= Gravity; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[57] SubanimName= Guide Color; Controller type: CtrlPoint3(SuperClass= 36869)
ParamAnim[58] SubanimName= Hair Color; Controller type: CtrlPoint3(SuperClass= 36869)
ParamAnim[59] SubanimName= Hair Percentage; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[60] SubanimName= Max Display Hairs; Controller type: CtrlFloat(SuperClass= 36867)
ParamAnim[61] SubanimName= Random Seed Param; Controller type: CtrlFloat(SuperClass= 36867)


2 Replies
 MZ1
(@mz1)
Joined: 1 year ago

Posts: 0

Wow, Thank You!
I should test some of them to see which one is the parameter that I was looking for.
I’m just curious how you get (printed) this info. Do you have any utility for this?

(@aaandres)
Joined: 1 year ago

Posts: 0

No, I just did a quick for-loop test inside a more complex development.