Thursday, 1 May 2025

force multiple curves to have same Normal

If you have a bunch of curves and then polyextrude them, sometimes the normals will get funky and some will be facing the wrong way. A POLYPATH sop added before the extrude can usually fix the resulting normals - I think it kinda fuses the curves into one object, something like that.

Tuesday, 29 April 2025

delete faces but keep edges

 say you got a 10x10 grid and you just want the borders...

use a divide sop with "remove shared faces" right?

Yes, but... the shape will remain filled. So how do you get rid of that face, but keep the edges?

Use the "Ends" SOP. and set the closeU parameter to "Unroll with shared points"

Woop.

Monday, 7 April 2025

getting areas of pieces and removing them. Eg object is being divided somehow.

 


Say you want to blast the large lower shape to just get the caps, but this shape is evolving and moving (and therefore the parts you want to delete are changing in size & number/point count etc!)....
You gotta measure the area of each "connected" piece, then kill them based on a threshold. It's easy when you say that, but actually there's a bit of other stuff involved.
   

This is the rough setup.
So make a For Each block & set it to Primitives. Do a Measure - select Area. This only gives us the area per FACE. We want the whole piece's area. Sooo, we promote it to Detail level & use the SUM promotion method. ie - it adds all the area attribs on a piece together. 


Once this has been done I promote the attribute back to Point level (using average as the promotion method).

Outside of the loop we can write a little wrangle to delete the pieces based on area-

Just a simple removepoint expression. I use a float channel slider so that the value can be tuned for the animation. it might not be necessary for you.

Shoutout to Felix for helping out with the attribute promoting bits!








Thursday, 23 January 2025

Karma per light aov

per light AOV stuff with Karma.

In your light, in the Karma tab, add a name to the LPE Tag. Here I've typed "A".

On the right hand side of all the AOV bits, you can tick Split per LPE Tag - ON EVERYTHING




Wednesday, 22 January 2025

skinned geo as agent layers for crowds/fbx

A brief how-to-add-proper-skinned-geo to a crowd agent..
Get the Rest Pose (T pose) of the agent. (You can just use a skeleton if you have one, and then use "Agent From Rig" to turn it into an agent.)
Put your desired geometry (the red trouser leg in the screenshot) into position.
Joint Capture Biharmonic it! This is how you skin stuff with kinefx.
You can preview the deformation with a RigPose and Bone Deform sop.

Give the skinned geo a name attribute (string on primitive).
Add it as a shape on an agent layer as you do with props. Note that the skinned stuff should not be packed. I don't know why, but you can merge it along with the packed rigid props & the Agent Layer node will pick up the name attribs.

crowds in solaris/karma

 Bring in crowd from obj using SOP Crowd Import node (here it's still packed agents). Create Instanced SkelRoots is preferred I think


Stylesheets don't work with Karma/Solaris (as far as I know!) To target props/shapes in a crowd you're best off using Collections. Here we're making collections of the hammer prop. 
It's important to tick Allow Instance Proxies in Collection!
The syntax is %reference:/path
In the example it's %reference:/crowd/agentdefinitions/ball/shapelibrary/l_hammer


Here's the stage scene outliner thing

Assign the materials to the collection by typing in the name. Eg. %hammer

Be sure to expand the Material Binding and tick Include Descendant Primitives in Collection
You might have to change the Strength to Stronger or Weaker than Descendants too.


I couldn't see a good way to access point attributes (eg. per agent float/int values) but Material X does read them - so I guess use switch RGB and stuff like that?
This seems to be the user data equivalent-

This seems to be the best switch RGB equivalent-

Just plug em in like this - just like Arnold

And ta da...attributes and collections targeting different bits of a crowd!