RBD fracture objects in Houdini



RBD fracture objects

summary

This workflow creates several random cuts and also cuts the largest pieces in a second step. for stones, concrete

add base geo

add grid node rows: 100 columns: 100 add mountain node add extrudevolume node add null object name it geo_out

simple voronoi fracture

add object merge node select geo_out add vdb from polygons node uncheck distance VDB check Fos VDB add scatter node uncheck relax interations check force total count: 100 add voronoi fracture node feed base geo into first input and scatter points into second

getting color preview of fractured pieces

click white icon next to piece prefix to get color preview of the different pieces add exploded view node

node graph

object merge ┬─┬ │ └────────────┐ │ │ │ VDB-from-polygons │ ┬ │ │ │ scatter │ ┬ │ │ │ │ │ │ └────┐ ┌─────┘ ┴───┴ voronoi_fracture

boolean fracture

add object merge node select geo_out add vdb from polygons node uncheck distance VDB check Fos VDB add scatter node uncheck relax interations check force total count: 100 (use global seed for variations)

for random cuts on 3 axes

add attribute randomize node attribute name: N distribution: inside sphere

for random vertical cuts (on 2 axes)

(instead of the attribute randomize node) add attribute vop node and dive inside add parameter node label: dir type: 3 float (vector) plug parm it into N of output add random node (connect ptnum with pos) signature: 1D integer input, 3D vector add fit range node (connect rand with val) destination min: -1 -1 -1 add multiply node (connect shift with input1) add constant node (feed into 2nd input of multiply) constant type: 3float (vector) 3float default: 1 0 1 add normalize node (feed multiply node, plug into input of bind) add bind export node (connect shift with input) name: up type: 3 floats (vector) go up one level dir: 0 1 0 add grid node size: 30 30 (3x larger than objectmerge) rows: 100 columns: 100 add mountain node add copy to points node feed mountain in first input feed attributerandomize into second add boolean fracture node feed objectmerge in first input feed copytopoints into second add exploded view node to see inside

adding UVs

add uv texture node (after the object merge) add uv flatten node (after the grid before copytopoints) (add uv transform node afterwards and adjust scale) in boolean fracture node: ouput attributes -> check copy cutting surface attributes vertex attributes: uv

adding a second plane close to existing one

after grid node (cut plane) add copy and transform total number: 2 (or more) add connectivity node (each plane gets a value, in the attribute "class") in mountain node -> noise pattern check use VEXpression offset = @class*5;

further fracturing of single pieces

manually

select a piece

add assemble node (after booleanfracture and normal node) uncheck create name attribute check create packed primitive select one piece, press del in blast node, check delete non selected

fracture piece

add unpack node add scatter node force total count: 3 add voronoi fracture node (feed unpack and scatter) name attribute: append piece prefix: -

merge newly fractured piece with the other pieces

copy the blast node, uncheck delete non selected add unpack node

automatically

select pieces based on their size

add measure node (after booleanfracture and normal node) accumulate: per piece piece attribute: name (this generates an "area" attribute) add split node right click on node -> parameter and channels edit parameter interface add a Float from left side label: threshold click Accept on the node -> right click on threshold copy parameter Group: @area> `chs("newparameter")` (paste relative ref.) add 2 null nodes name them: big pieces and small pieces plug them into out of split node

randomly selected pieces

i.e. 25% of pieces fractured (see video in src)

selection based on distance of input geo

(see video in src)

fracture with foreach loop

add for each named primitive node foreach_end -> check single pass add scatter node force total count: 3 add voronoi fracture node (feed unpack and scatter) name attribute: append piece prefix: - in for each named primitive node foreach_end -> uncheck single pass

src

https://www.youtube.com/watch?v=0vqRqKpI-LY



Published: January, 2024