digraph EnergyFlow { graph [compound = true]; subgraph cluster_resources { hilt1; hilt2; hilt3; grip1; grip2; grip3; } subgraph cluster_genicon { Size; Accessories; Colour; Type; Straightness; Roughness; } subgraph cluster_mesh { "Left Perturb Mesh"; "Right Perturb Mesh"; "Curve Mesh"; } subgraph gens { node [style=filled,shape=rect]; Curvegen; Jagg; "Accessory\nSelector"; Rasterizer; "Base Shape"; "Final Mesh"; } grip1 -> "Accessory\nSelector"; grip2 -> "Accessory\nSelector"; grip3 -> "Accessory\nSelector"; hilt1 -> "Accessory\nSelector"; hilt2 -> "Accessory\nSelector"; hilt3 -> "Accessory\nSelector"; Type -> "Base Shape"; Straightness -> Curvegen -> "Curve Mesh"; Roughness -> Jagg; Jagg -> "Left Perturb Mesh"; Jagg -> "Right Perturb Mesh"; "Accessory\nSelector" -> Accessories; Accessories -> Rasterizer; Size -> Rasterizer; Colour -> Rasterizer; "Base Shape" -> Add; "Curve Mesh" -> Add; Add -> "Final Mesh"; "Left Perturb Mesh" -> Mul; "Right Perturb Mesh" -> Mul; "Base Shape" -> Mul; Mul -> "Final Mesh"; "Final Mesh" -> Rasterizer; }