Minor·

Natsura 0.7.0.0

Everything shipped since 0.6.0.0, collected: Rig to Assembly and the rig toolchain behind it, the assemblies pipeline, experimental simulate chaining with Natsura Stage, rigged Nanite export to Unreal, portable 2-parm mapping, and a deep cook-trigger purge.

Back to Changelog

Everything shipped since 0.6.0.0, collected: Rig to Assembly and the rig toolchain behind it, the assemblies pipeline, experimental simulate chaining with Natsura Stage, rigged Nanite export to Unreal, portable 2-parm mapping, and a deep cook-trigger purge.

About This Release

  • This collects everything shipped since 0.6.0.0. The builds from 0.6.0.1 through 0.6.3.1 went out without an announcement, so none of that work has been written up anywhere until now. It is all gathered here, and nothing from the 0.6.0.0 notes is repeated.
  • Each item is marked with the release it landed in, so if you have been updating along the way you can see what is genuinely new to you.

Highlights

  • Rig to Assembly (since 0.6.1.2) — simulate a set of branches or a whole tree, decompose it into modules, and decorate another simulate with them. Build canopies by decorating one simulated tree with another. rig_to_assembly wraps the chain — multiple branch inputs, nested assemblies, subassemblies and atoms — and assemblify packs a rigged simulate down into a mesh stream the decorators can place. The rig ops it runs on are yours to use directly too: rig_merge binds parents and children across a join, rig_collapse flattens hierarchy, rig_rebind reskins, rig_detect_used_joints and simplify_rig strip joints nothing uses, attribute_transfer_by_rig moves attributes by joint ownership, and fuse_tree_rig_and_skin grafts assemblies onto a simulation (since 0.6.3.0). This is the release's centre of gravity: it unlocks species at scale.
  • The assemblies pipeline (since 0.6.1.0) — bring a library in with import_assembly and assembly_resource, auto-rig it with build_assembly_rig (nearpoint lookup, cycle removal), tag modules with classify, and place them with assembly_decoration. Around that: identify_shared_instances and instancify pull repeated geometry out into instanced modules, partition_assemblies chunks large libraries for parallel processing, pivot_edit and assembly_edit handle pivots and per-element tweaks, create_proxy builds bounds / VDB / medial-axis proxies, and visualize_assemblies shows you motion, pivots, rigs and colours. Tested at very large library scales.
  • Chain simulates together (new in 0.7.0.0, experimental) — the new natsura::stage::1.0 node passes the output of one simulate into the next, so a tree can be grown in stages rather than in a single pass. Experimental: the contract is still settling.
  • Rigged Nanite skeletal assembly export to Unreal (since 0.6.1.0) — wired end to end (grow → fuse → skin → export → USD), with a <name>_wind.json sidecar.
  • Portable 2-parm mapping (since 0.6.1.0) — one {name} + {name}_map form across the whole toolkit, with pickers replacing the native add menus on every map / decorator / effector slot.
  • Control the frame of growth, not just the heading (since 0.6.0.5) — orbit, align and level up-vector modes, plus the ancestor effector reading vectors from parent, grandparent and further up the lineage.
  • The cook-trigger purge (since 0.6.1.0, ghost cooks since 0.6.2.0) — cook triggers removed from all outside-cook code, and the Python scripts that were interfering with live cooks are gone.

Workflow Changes

  • Workspace panel (since 0.6.1.0) combines toolbar + guide / attributes / spans tabs in a single docked layout, with tear-off floating tabs.
  • Guide (since 0.6.1.0, was the Tips Panel) is markdown-based, searchable across names and content, with prev/next navigation and multiple libraries.
  • Display toolbar (since 0.6.1.0) reorganised and context-sensitive — it shows grow / switch / split based on the graph-port count of your current selection. MMB scroll; dev tools moved to the far right and out of the main menu.
  • Natsura main menu dropdown (since 0.6.1.0) with license key, update check, support info, projects, examples and docs.
  • Recipe spawn (since 0.6.1.0) — placing a grow populates trunk preview, decorator drag slot and follow rows immediately, with no second cook.
  • Pickers replace native add menus (since 0.6.1.0) on map / decorator / effector slots, bucketed by already-on-this-grow / on-other-grows / orphan, with per-slot unlink, duplicate, jump-to and replace.
  • Native hotkeys (since 0.6.1.0), file-driven through Houdini's own loader: toggle stowbars, pause cook.
  • Preview geometry cycling (since 0.6.0.1) in the display toolbar, with trunk, monopodial and sympodial preview geometry on the assembly decorator plus viewport translate/scale gizmos.
  • New "Assemblies Workflow" example scene (since 0.6.1.2) walks the whole Rig to Assembly path end to end. Open it from the examples browser.
  • Simple Tree example (0.7.0.0) — the canopy has been opened up using the new fuzzy mask.
  • Scenes upgrade on load (since 0.6.1.2). Pre-0.6 scenes migrate automatically and the hipfile is backed up first to <name>_<old-version>_backup.hip before anything is touched. Grow 1.0 / 1.1 / 1.2 retype to Grow 2.0.

New Nodes

Growth & Simulation

NodeSinceDescription
natsura::stage::1.00.7.0.0Pass the output of one simulate into the next, chaining simulates into stages (experimental)

Assemblies

NodeSinceDescription
natsura::rig_to_assembly::1.00.6.1.0Convert a simulated rig into an assembly for decorating another simulate
natsura::assemblify::1.00.6.3.0Packs a rigged simulate down into a single mesh stream for decorators
natsura::assembly_edit::1.00.6.1.0Pivot and per-element tweaks
natsura::assembly_pack::1.00.6.1.0Pack assemblies into instanced output
natsura::import_assembly::1.00.6.1.0Bring assemblies in from external sources
natsura::partition_assemblies::1.00.6.1.0Split large datasets into chunks for parallel processing
natsura::visualize_assemblies::1.00.6.1.0Inspect motion, pivots, rigs and colours
natsura::pivot_edit::1.00.6.1.0Pivot adjustment of assemblies
natsura::identify_shared_instances::1.00.6.1.0Flat instanced structure for duplicated geometry
natsura::build_assembly_rig::1.00.6.1.0Nearpoint-lookup autorigging with cycle removal
natsura::create_proxy::1.00.6.1.0Outputs bounds / VDB / medial axis / particles, with optional leaf removal
natsura::instancify::1.00.6.2.0Pull repeated geometry out into instanced modules, fixing up rig and skin
natsura::order_branches::1.00.6.2.0Orders branches for traversal

Rig Utilities

NodeSinceDescription
natsura::fuse_tree_rig_and_skin::1.00.6.1.0Grafts tree skeletons; grafts assemblies onto simulation
natsura::rig_merge::1.00.6.3.0Merges two rigs into one, binding parents and children across the join
natsura::rig_rename::1.00.6.3.0Renames rig joints as a discrete op
natsura::rig_delete::1.00.6.3.0Deletes rig joints as a discrete op
natsura::rig_collapse::1.00.6.3.0Collapses rig hierarchy
natsura::rig_rebind::1.00.6.3.0Rebinds skin weights to a rig
natsura::rig_detect_used_joints::1.00.6.3.0Flags which joints are actually used; feeds simplify / collapse
natsura::attribute_transfer_by_rig::1.00.6.3.0Transfers attributes by rig ownership
natsura::rewire_tree::1.00.6.3.0Rewires tree topology
natsura::skeletonize::1.00.6.3.0Skeleton extraction

Effectors

NodeSinceDescription
natsura::ancestor_effector::1.00.6.0.5Reads vectors from parent, grandparent and further up the lineage
natsura::direction_effector::1.00.6.1.0Uniform direction
natsura::autocode_effector::1.00.6.1.0Prepares effectors inside decorations
natsura::effector_template::1.00.6.1.0Template for ingesting effectors inside decorations

Decoration & Pruning

NodeSinceDescription
natsura::adaptive_part_removal::1.00.6.3.0Removes parts adaptively
natsura::prune_wizard::1.00.6.3.0Wizard-style pruning entry point

Deprecated & Archived

NodeSinceUse instead
natsura::grow::1.0, ::1.1, ::1.20.6.1.0natsura::grow::2.0 — pre-0.6 scenes retype automatically on load
natsura::switch::1.00.6.1.0natsura::switch::1.1
natsura::mappable_parms::1.00.6.1.0Redundant under 2-parm mapping
natsura::clusters_decoration0.6.1.0natsura::assembly_decoration for module placement

Node Updates

Growth & Simulation

  • grow 2.0 (0.6.1.0) Unified effector_list multiparm, absorbing graph_operation_count; fixed-size 32 slots shared with assembly decoration
  • grow 2.0 (0.6.0.5) Orbit / align / level up-vector modes; static multiparms replace dynamic ones for cook-trigger stability
  • grow 2.0 (0.6.1.0) Custom right-click menu replaces the native one; tab menu spawns a recipe
  • grow 2.0 (0.6.1.0) Menuscript-driven live parm update, without OnInputChanged proliferation
  • grow 2.0 (0.6.3.0) Internal surface-decoration preview-mode fix; uses component_name == opfullpath("") instead of serializing and group-hunting
  • grow 2.0 (0.6.1.0) Trunk decoration skeleton fix; pack/unpack workaround for the single-point-remaining decoration bug
  • grow 2.0 (0.7.0.0) Eye-catching labels on the effector and trait rows
  • core_grow (0.6.1.0) opexist guard before object merge; stamps the Natsura version on the node for upgrade tooling
  • simulate (0.6.1.0) Skeleton split out post-cook; bypass switch when no APEX graph is present
  • simulate (0.6.3.0) Timeshifts for slider dragging; robust fullpath-vs-name colouring; locked core simulate with embedded simplify-tree-rig-and-skin
  • treeparameterize (0.6.3.0) New "use existing prims" mode; keep-source-prims and split-by-attribute modes; seam group and seam attrib splitting strands at UV discontinuity; exports id_strand, id_parentstrand, id_sourceprimids, order_strand
  • execute_logic (0.6.1.0) parent_idid_parent across the schema; dynamic invoke setup

Assemblies

  • assembly_decoration (0.6.1.0) Effector support via the shared list; random part selection removed, distribution is mapping-only; mapping default range auto-picks
  • assembly_decoration (0.6.2.0) Parent mapping for effectors on assemblies
  • assembly_decoration (0.6.1.1) Fixed-size (N=8) trait picker pulling from the internal TRAIT list (mappable) and dependency-graph/skeleton float attributes (not mappable)
  • assembly_decoration (0.6.1.1) Per-row actions menu: Edit on Geometry / Replace With… / Remove Trait
  • assembly_decoration (0.6.1.0) Flipping fix — face-gravity correction plus unified rotation across opposing whorl elements; sub-component rig support in classify
  • assembly_decoration (0.6.3.0) Working preview mode; passes name / localname / parentname / assembly_name through; smarter rig reconstruction after joint deletion
  • assembly_decoration (0.7.0.0) Fuzzy masking replaces binary masking — modules fall off gradually across a mask edge instead of switching on or off
  • assembly_decoration (0.7.0.0) Eye-catching labels on the trait and effector rows
  • rig_to_assembly (0.6.3.0) Multiple branch inputs, nested assemblies, extract subassemblies + atoms; "absorb instances" toggle
  • rig_to_assembly (0.7.0.0) Class handling fixed
  • rig_to_assembly (0.7.0.0) Clearer parameter labels, and the output parms moved out of the modularize settings they were buried in
  • instancify (0.6.3.0) Pulls out subassemblies and transfers prim attributes; collapse-unused-parts now deletes fully-unused joints rather than reparenting
  • assembly_resource (0.6.3.0) Correctly identifies instances inside USD files; partition logic moved out of import
  • identify_shared_instances (0.6.3.0) Sorts by size, preserves rigging, no longer unpacks leaves
  • simplify_rig (0.6.3.0) More accurate "was this joint used" removal; dropped the cluster-based approach
  • pivot_edit (0.6.3.0) Convex hull instead of decomposition for a robust inside/outside test
  • classify (0.6.1.0) Viewport-based attribute + group assignment; refreshes the assembly_decoration multiparm on change

Decoration

  • surface_decoration (0.6.1.0) 2-parm mapping shape; gather_controls thread-pool parms exposed
  • surface_decoration (0.6.3.0) Working preview mode, strands mode, minimum-width control
  • surface_decoration (0.6.3.1) Roughness slider
  • surface_decoration (0.7.0.0) Mappable smoothing, smooth width, and version info on the node
  • core_decoration (0.6.3.0) Was failing to pass the full skeleton — fixed

Effectors

  • deflection_effector (0.6.0.5) Max search distance and max points
  • magnet_effector (0.6.3.0) Healthier defaults
  • wrangle (0.6.0.5) Embedded signals use the full path as name to avoid collisions; /_ so paths work as names
  • effector (0.6.1.0) Same effector assignable to one node multiple times, each with its own response and map, for layered behaviours

Mapping

  • map, map_if, map_blend (0.6.1.0) 2-parm portable form: {name} + {name}_map, with a shared map button handling promote, unlink and replace from either parm
  • map_blend (0.6.1.0) Redundant map_if branch removed
  • mapping (0.6.1.2) The map picker gains a Level picker
  • switch 1.1 (0.6.1.0) Map-driven gates respect the 2-parm shape
  • ingest_mappings (0.6.1.0) Standardised parm refs; broken expressions cleaned by the upgrade pass
  • rebuild_primitive_attributes (0.6.3.0) Uses uvdist instead of xyzdist

Scan, Mesh & Bake

  • bake (0.6.0.3) Supersampling and MikkT tangent space baking
  • bake (0.6.0.4) Seam stitching, improved performance and reduced memory, better UV coverage, island boundary smoothing, small island removal, distortion removal
  • scan_to_parts (0.6.0.3) Polyreduce added to Graft Mesh for scan extension density
  • scan_to_parts (0.6.1.0) Nearpt method replaces VDB, which kept breaking
  • scan_profiles (0.6.1.0) Scatter-based rebuild
  • scan_extend_profiles (0.6.1.0) Multitrunk extension
  • import_highpoly (0.6.1.0) SOP input from graph; the redundant Import Highpoly shelf tool was removed in 0.6.0.3

Unreal Export & Wind

  • export_unreal_nanite_assembly (0.6.0.1) Nanite schemas re-included, fixing broken export
  • export_unreal_nanite_assembly (0.6.1.0) Wired through the fuse + skin chain
  • export_unreal_nanite_assembly (0.6.3.0) Warns if there are too many instances or joints; adds a root to fix Unreal auto-root generation
  • sopcreatenaniteassembly (0.6.1.0) Rigged Nanite export wired end to end (grow → fuse → skin → export → USD); wind sidecar <name>_wind.json written alongside the USD
  • wind_previs (0.6.3.0) Colour copying removed

Performance

  • Assembly decoration at high joint counts (0.6.3.0): ~100× faster
  • Spans panel heartbeat (0.6.1.0): 4Hz → 1Hz — cheap signature check, full driver sweep only on change
  • OpenCL solver (0.6.2.0) had been mistakenly switched on and regressed solve times — switched back off
  • rig_rebind (0.6.3.0) remade from scratch; the previous implementation was very slow
  • rig_merge (0.6.3.0) speed-optimized after the initial implementation
  • create_proxy (0.6.3.0) optimized
  • Cook triggers removed from outside-cook code (0.6.1.0) — no node.geometry() or cook-dependent parm.eval() outside cook
  • Attribute panel (0.6.1.2) no longer forces a recook on node selection
  • Toolbar capability-fade and category-aware fade (0.6.1.0) cut redraw churn; toolbar actions no longer write prefs
  • Node placement and simulation evaluation (0.6.3.0) both substantially faster across the board

Bug Fixes

Growth & Simulation

  • Longstanding bug with 2 and 3 growth steps (0.6.3.1) fixed
  • Cook triggers (0.6.1.0) no longer fire 2–3 times redundantly on most graphs
  • Cook-trigger issues from dynamic multiparms (0.6.0.5) fixed — mapping feels considerably more stable
  • simulate (0.6.3.1) Skeleton output is now the skeleton, not the rig
  • simulate (0.6.1.0) Display settings and colour restored; source_radius copy-to-points fixed
  • simulate (0.6.3.0) Removed output-attributes control that broke scene upgrades; cleans up the temp __captblock attrib
  • execute_logic (0.6.3.0) No longer discards source attributes; carries a valid per-tree/per-branch class
  • execute_logic (0.6.1.0) Illegal-graph handling restored

Assemblies

  • assembly_decoration (0.6.1.1) Trait list no longer crashes Houdini past ~10 entries — the dynamic-resize auto-sync that rebuilt the multiparm on every cook is gone
  • assembly_decoration (0.6.1.1) Traits stranded at slots 9–10 compact down on scene open; already-saved scenes self-repair
  • assembly_decoration (0.6.0.1) No longer errors with the default setup
  • assembly_decoration (0.6.3.0) Invalid default parm fixed — the result now shows on first placement
  • assembly_decoration (0.6.0.2) Absolute path fixed
  • assembly_decoration (0.6.2.0) Effector menu no longer crashes; trait selection and the trait picker behave correctly
  • assembly_decoration (0.6.2.0) Trait attribute popup no longer breaks on accidental capitalisation
  • classify (0.6.2.0) Works again with assembly decorations
  • attribute_transfer_by_rig (0.6.3.0) Now functional — primsplit on input plus edge transport picks the correct prim per joint
  • visualize_assemblies (0.6.3.0) "Instances" colour mode fixed
  • instancify (0.6.3.0) Broken "detect unused modules" check fixed

Effectors

  • effector (0.6.1.2) Intrinsic effectors no longer trigger infinite recursion that could hang or crash Houdini
  • effector (0.6.0.5) Renaming an effector now updates the grow interface automatically
  • effector (0.6.1.0) Renaming no longer creates a duplicate parameter or breaks attribfromparms refs
  • noise_effector, split, wrangle (0.6.2.0) Now respond to simulate preview

Mapping

  • mapping (0.6.1.2) Map visualisation colours display correctly again — display-to-simulate resolution was matching the wrong simulate for map nodes
  • mapping (0.6.1.2) Promoting a parameter to a map keeps the value it already had instead of resetting to 1
  • mapping (0.6.2.0) Parent mapping for effectors on assemblies now works

Decoration

  • More than 3 decorations (0.6.2.0) can now be applied
  • surface_decoration (0.6.3.1) Sweep end caps face the correct direction
  • clusters_decoration (0.6.3.1) Individual instanced meshes placed with the cluster decorator work with assemblies
  • clusters_decoration (0.6.3.0) sourceprimuv bugfixes
  • cluster_wizard (0.6.3.0) Undefined source point fixed
  • surface_wizard (0.6.3.0) "Reverse" toggle no longer breaks rig transfer

Scan, Mesh & Bake

  • scan_to_mesh (0.6.0.3) Holes in scan data no longer result in missing geometry, mesh gaps or missing attributes

UI & Panels

  • Ghost cooks (0.6.2.0, further work 0.6.3.0) triggered by Python panels removed — scripts were interfering with nodes during live cooks, producing errors and warnings
  • Hub (0.6.1.2) Update-available notifications work again — the check followed a redirect it couldn't handle and failed silently
  • Splash screen error on H21 (0.6.0.2) removed
  • Toolbar panel widgets (0.6.0.3) scale correctly and have consistent hover behaviour

Scene Upgrades

  • Loading and upgrading pre-2.0 scenes (0.6.2.0) no longer crashes
  • Migrated effectors (0.6.1.2) no longer load switched off; gravitropism / ancestor follow-row weights survive the upgrade
  • assembly_decoration (0.6.1.2) Old 0.5 force values migrate instead of vanishing — unroll → Align Up, flatten → Flatten, deflect → Repel, with weights and maps preserved
  • Stale channel keyframes and stale channel refs (0.6.1.0) cleaned by the upgrade pass

Internals

  • Declarative state (since 0.6.1.0) — nodes declare through parm rawValue, type metadata and userData, and readers read those declarations rather than cooking to find out. This is what made the cook-trigger purge possible.
  • Display flags run through the background service (since 0.6.1.2) rather than per-node scripts — one consistent mechanism instead of a script duplicated on every node.
  • Dead menuscript code removed (since 0.6.2.0) — many Python modules cleaned of code left over from the old menuscript approach.

Known Issues

  • Stale channel refs are the active bug class. Symptoms: parameters not updating after an edit, slot values detached from their source, defaults reasserting unexpectedly. Sending us the scene is the fastest path to a fix.
  • Residual double / triple cooks on some scenes. Most cases were resolved by the cook-trigger purge; the remainder show up as duplicate cook markers in the editor log on what should be a single-cook edit. Root cause not yet isolated.
  • Forking controls on grow are limited — current parms don't cover all the branching cases artists want. Wider controls planned.
  • Flatten + phyllotaxy are sensitive on perfectly upright branches. A flat layout of secondary branches off a near-vertical leader can produce unstable rotations. Perturbing the leader slightly off vertical works around it.
  • Maps plugged into decorations don't surface their attributes on the decorator parm UI. The map drives the value correctly downstream; only the parm-side attribute list is wrong.
  • Nanite skeletal assemblies in Unreal can appear to have instances at the root in the skeletal mesh editor. Fix in-engine by switching preserve-area to voxelise; it also goes away if you spawn the tree as an instanced skinned mesh. Unclear whether it's Natsura-side or Unreal-side; still investigating.
  • Effectors are prefixed experimental_ in the tab menu while the contract settles across grow and assembly decoration.
  • Wind tools are experimental — not a runtime match for Unreal wind, just enough to see where the wind layers are while setting up the rig.
  • Batch/hython jobs loading a pre-2.0 Grow scene will error until the scene is upgraded interactively once.
  • order_branches needs more thinking — it computes dist rather than assuming width, but the ordering model isn't settled.
  • Custom panels may behave oddly depending on panel configuration. Please tell us if you hit this — we can only test on a limited number of devices.

Looking Ahead

  • Surface and cluster decorator enhancements including the trait system for material and part selection, a more realistic width model with additional width controls, new select and buds core nodes, assembly decorator yaw controls, more postprocessing tools (pruning, posing), and more effectors (curve follow).