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 supports installing from a package archive:
- Download
.zip
version from Gumroad. - Run Houdini and open the Package Browser pane, found under
Inspectors > Package Browser
. - Go to
File > Install Package Archive...
.- Set Archive to the path of the
bsystem<version>.zip
file. - Set Install to to the
$HOUDINI_PACKAGE_DIR
, this defaults to~/Documents/houdini<version>/packages
on Windows, and~/houdini<version>
on Linux and MacOS.
- Set Archive to the path of the
NOTE: If you install to another directory you need to set the
BSYSTEM
variable in thebsystem<version>.json
package file to the correct install directory.
The
BSYSTEM
environment variable is required by the plugin, don't set the"hpath"
directly.
{
"enable": true,
"env": [
{
"BSYSTEM": "$HOUDINI_USER_PREF_DIR/bsystem<version>"
}
],
"path": "$BSYSTEM"
}
For details on nodes and node parameters see the node help cards in Houdini.
Use the B-System Configure Basic
for a quick basic setup.
- 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.
For the Houdini
20.0
version 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.