ICE – Here’s how to remove specific elements from an array of integers, without using any Repeat loops.
This trick works only for integer arrays.
I really should just take the time to learn how to write custom ICE nodes for this kinda stuff…
ICE – Here’s how to remove specific elements from an array of integers, without using any Repeat loops.
This trick works only for integer arrays.
I really should just take the time to learn how to write custom ICE nodes for this kinda stuff…
Creating polygon islands with Disconnect Components
by iamVFX
Raycast weightmap
by Thomas Volkmann
Create Symmetry
by Inisheer
Curve U value UV to location
by Peter Agg
Tag points by volume mesh
by Fabricio Chamon
Camera Space Normals
by Steven Caron
A Python snippet that uses FindObjects2 to find all ICETree operators in a scene.
from siutils import si # Application from siutils import log # LogMessage from siutils import C # win32com.client.constants # Run this, open the explorer, and press F oICETrees = si.FindObjects2( C.siICETreeID ) Application.SelectObj( oICETrees )
It now goes by the name “Autodesk Softimage”, but before that it was “Softimage XSI”, and before that, during development and beta, it was code named “Sumatra”. So where did the name XSI come from?
Originally, XSI was the name of a file format used to SOFTIMAGE|3D scene data. The file format was based on the Microsoft DirectX .X file format, so we used the file extension .XSI (“X” + “SI” for Softimage), and that’s where “dotXSI” came from too. The XSI File Format was part of the SOFTIMAGE|GDK; here’s a page from the documentation (which I wrote, btw):
From a 2002 xsibase interview with Michael Sheasby, then the Softimage Business Dev Manager:
What does “XSI” stand for?
When Microsoft owned Softimage, the directX “.X” format was extended with modern templates such as IK, enveloping, and constraints. This enhanced version was labelled the dotXSI format, which stood for .X – Softimage. The name was clean enough to adopt for the product itself, to reflect the central nature of data pipelines to 3D software.
Here’s some of the suggested product names that didn’t make the cut when we were looking for a product name to replace the code name “Sumatra”. These suggestions came from both internal and external people…
Here’s a custom filter for selecting objects with ICE trees: psCustomFilters.xsiaddon. The filter appears as Obj_w_ICETree in the filter list of the Select panel in the MCP:
You can use this filter in the MCP Select panel (choose the filter and then press Ctrl+A to select all objects with an ICE tree).
Or you could make a toolbar button with these snippets:
// JScript SelectAllUsingFilter("Obj_w_ICETree", siCheckComponentVisibility, null, null);
#Python from siutils import C # win32com.client.constants Application.SelectAllUsingFilter("Obj_w_ICETree", C.siCheckComponentVisibility, "", "")
In this video, I take a look at how to use Search for type to find objects based on their type. For example, you can find all models by searching for “#model”, or all polygon meshes by searching for “polymsh”.
I also show how to use the Scene Explorer to find the type of an object.
Note: You can’t use the “ICETree” type to find all ICETree operators, that was a disappointment.
This question came up last weekend (on si-community and xsibase): how do I copy a polygon attribute to a point attribute?
As Chris_TC and gray pointed out, a point can be associated with multiple polygons. So you use VertexToPolygons to either build a per-point array of polygon attribute values, or you do something like average the polygon attribute values and store that as a point attribute value.
Another building block for using arrays instead of Repeat loops: an array that looks like [0,0,0,0, 1,1,1,1, 2,2,2,2, …].
Again, the trick is to use this array as the indices for Select in Array.
Here’s how to build this kind of array:
Here’s a simple example. I get the positions of the objects in a group, and then use those positions to add points in a point cloud. Basically, I have a group of objects, and an array of vectors (the interpolated array). When I add a point, I take an object position and add a vector to it to get the point position.
In pseudo-code:
For each object in group for each vector in array Add Point Point Position = vector + object position
If that ICE tree is hard to follow, then it may help to use some attributes to store intermediate values(arrays). That way you can separate out some branches of the tree: