B-System is a instance editing plugin for SideFX Houdini, you can get it on Gumroad.
B-System uses the package format for Houdini plugins, it requires a bsystem.json
file in the $HOUDINI_USER_PREF_DIR/packages
folder to load the plugin.
- Download
.zip
version from the Gumroad product page. - Unzip the content and ...
- Copy the
bsystem
folder to$HOUDINI_USER_PREF_DIR
. - Copy the
bsystem.json
file to$HOUDINI_USER_PREF_DIR/packages
.
- Copy the
$HOUDINI_USER_PREF_DIR
is the houdini settings folder, on Windows it is found atDocuments/houdini<version>
. On Linux and macOS it is the~/houdini<version>
directory.
This installs the plugin at the default location, if you keep your packages elsewhere you can set the path with the BSYSTEM
variable in bsystem.json
to the desired directory.
{
"env": [
{
"BSYSTEM": "$HOUDINI_USER_PREF_DIR/bsystem<version>"
}
],
"path": "$BSYSTEM"
}
the
BSYSTEM
environment variable is required by the plugin, don't set the"path"
directly.
For details on nodes and node parameters see the node help cards in Houdini.
- Viewport, handles and editing
- Node usage, palette and assemblies
- Geometry, attributes and groups
- Examples and use cases
The geometry used in the B-System Edit SOP follows a simple convention that defines the instances and their transform, the hierarchy between them and the direction of this hierarchy. Be aware that the hierarchy can't contain loops, loops will be broken up when merged into a B-System Edit SOP.
vex | class | type | description | |
---|---|---|---|---|
name | s@name |
point | string | Instance name |
transform | 3@transform |
point | rotation matrix | Instance rotation and scale |
roots | i@group_roots |
point | group | Origin and direction of hierarchy |
assembly | s@assembly |
point | string | Defines assembly |
The s@name
point attributes stores the instance name, this works the same way as named instancing works on the Copy to Points SOP
. Instances must be packed primitives and have a corresponding s@name
attribute. All packed primitive types are supported.
The 3@transform
point attribute stores the instance rotation and scale. The rotation matrix is in world space. It works the same way as KineFX bone transforms.
Note that p@orient
, @N
, @up
, @scale
and @pscale
is not used for setting the rotation and scale, these attributes are ignored. Check out the vex functions maketransform()
and scale()
for ways to quickly convert these attributes to a rotation matrix.
// N and up to Matrix3
3@transform = maketransform(@N, @up);
scale(3@transform, set(@pscale, @pscale, @pscale));
// Quaternion to Matrix3
3@transform = qconvert(p@orient);
scale(3@transform, set(@pscale, @pscale, @pscale));
Instances on a B-System are connected in a branching hierarchy, the roots
point group defines the origin and direction of this hierarchy. A set of connected instances can only have a single root point. Multiple connected sets will have a root for each set. Single unconnected instances are also roots.
Using a point to define the direction of the hierarchy is simpler than using vertex order, since vertex order is tricky to visualize, edit and debug in Houdini.
Assemblies are labeled sets of instances, they are defined by the s@assembly
point attribute. An assembly does not have to be fully connected, from any combination of connected and unconnected instances. Apart from the s@assembly
attribute the definition of an assembly is identical to regular bsystem geometry.
See the viewer state info panel for hotkeys.
As per Houdini
20.0
certain keys and inputs remain unavailable for python viewer states. Among others these includes theWERT
keys, thectrl
key while dragging, andRMB
if using aContext Menu
. For this reason certain operations map to less intuitive keys such asa
for rotation instead ofr
, andshift
to snap instead ofctrl
. This will change as soon as SideFX frees the keys.