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 ChangelogEverything 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_assemblywraps the chain — multiple branch inputs, nested assemblies, subassemblies and atoms — andassemblifypacks 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_mergebinds parents and children across a join,rig_collapseflattens hierarchy,rig_rebindreskins,rig_detect_used_jointsandsimplify_rigstrip joints nothing uses,attribute_transfer_by_rigmoves attributes by joint ownership, andfuse_tree_rig_and_skingrafts 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_assemblyandassembly_resource, auto-rig it withbuild_assembly_rig(nearpoint lookup, cycle removal), tag modules withclassify, and place them withassembly_decoration. Around that:identify_shared_instancesandinstancifypull repeated geometry out into instanced modules,partition_assemblieschunks large libraries for parallel processing,pivot_editandassembly_edithandle pivots and per-element tweaks,create_proxybuilds bounds / VDB / medial-axis proxies, andvisualize_assembliesshows 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.0node 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.jsonsidecar. - Portable 2-parm mapping (since 0.6.1.0) — one
{name}+{name}_mapform 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.hipbefore anything is touched. Grow 1.0 / 1.1 / 1.2 retype to Grow 2.0.
New Nodes
Growth & Simulation
| Node | Since | Description |
|---|---|---|
natsura::stage::1.0 | 0.7.0.0 | Pass the output of one simulate into the next, chaining simulates into stages (experimental) |
Assemblies
| Node | Since | Description |
|---|---|---|
natsura::rig_to_assembly::1.0 | 0.6.1.0 | Convert a simulated rig into an assembly for decorating another simulate |
natsura::assemblify::1.0 | 0.6.3.0 | Packs a rigged simulate down into a single mesh stream for decorators |
natsura::assembly_edit::1.0 | 0.6.1.0 | Pivot and per-element tweaks |
natsura::assembly_pack::1.0 | 0.6.1.0 | Pack assemblies into instanced output |
natsura::import_assembly::1.0 | 0.6.1.0 | Bring assemblies in from external sources |
natsura::partition_assemblies::1.0 | 0.6.1.0 | Split large datasets into chunks for parallel processing |
natsura::visualize_assemblies::1.0 | 0.6.1.0 | Inspect motion, pivots, rigs and colours |
natsura::pivot_edit::1.0 | 0.6.1.0 | Pivot adjustment of assemblies |
natsura::identify_shared_instances::1.0 | 0.6.1.0 | Flat instanced structure for duplicated geometry |
natsura::build_assembly_rig::1.0 | 0.6.1.0 | Nearpoint-lookup autorigging with cycle removal |
natsura::create_proxy::1.0 | 0.6.1.0 | Outputs bounds / VDB / medial axis / particles, with optional leaf removal |
natsura::instancify::1.0 | 0.6.2.0 | Pull repeated geometry out into instanced modules, fixing up rig and skin |
natsura::order_branches::1.0 | 0.6.2.0 | Orders branches for traversal |
Rig Utilities
| Node | Since | Description |
|---|---|---|
natsura::fuse_tree_rig_and_skin::1.0 | 0.6.1.0 | Grafts tree skeletons; grafts assemblies onto simulation |
natsura::rig_merge::1.0 | 0.6.3.0 | Merges two rigs into one, binding parents and children across the join |
natsura::rig_rename::1.0 | 0.6.3.0 | Renames rig joints as a discrete op |
natsura::rig_delete::1.0 | 0.6.3.0 | Deletes rig joints as a discrete op |
natsura::rig_collapse::1.0 | 0.6.3.0 | Collapses rig hierarchy |
natsura::rig_rebind::1.0 | 0.6.3.0 | Rebinds skin weights to a rig |
natsura::rig_detect_used_joints::1.0 | 0.6.3.0 | Flags which joints are actually used; feeds simplify / collapse |
natsura::attribute_transfer_by_rig::1.0 | 0.6.3.0 | Transfers attributes by rig ownership |
natsura::rewire_tree::1.0 | 0.6.3.0 | Rewires tree topology |
natsura::skeletonize::1.0 | 0.6.3.0 | Skeleton extraction |
Effectors
| Node | Since | Description |
|---|---|---|
natsura::ancestor_effector::1.0 | 0.6.0.5 | Reads vectors from parent, grandparent and further up the lineage |
natsura::direction_effector::1.0 | 0.6.1.0 | Uniform direction |
natsura::autocode_effector::1.0 | 0.6.1.0 | Prepares effectors inside decorations |
natsura::effector_template::1.0 | 0.6.1.0 | Template for ingesting effectors inside decorations |
Decoration & Pruning
| Node | Since | Description |
|---|---|---|
natsura::adaptive_part_removal::1.0 | 0.6.3.0 | Removes parts adaptively |
natsura::prune_wizard::1.0 | 0.6.3.0 | Wizard-style pruning entry point |
Deprecated & Archived
| Node | Since | Use instead |
|---|---|---|
natsura::grow::1.0, ::1.1, ::1.2 | 0.6.1.0 | natsura::grow::2.0 — pre-0.6 scenes retype automatically on load |
natsura::switch::1.0 | 0.6.1.0 | natsura::switch::1.1 |
natsura::mappable_parms::1.0 | 0.6.1.0 | Redundant under 2-parm mapping |
natsura::clusters_decoration | 0.6.1.0 | natsura::assembly_decoration for module placement |
Node Updates
Growth & Simulation
- grow 2.0 (0.6.1.0) Unified
effector_listmultiparm, absorbinggraph_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
OnInputChangedproliferation - 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)
opexistguard 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_id→id_parentacross 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
TRAITlist (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_controlsthread-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
uvdistinstead ofxyzdist
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.jsonwritten 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 slowrig_merge(0.6.3.0) speed-optimized after the initial implementationcreate_proxy(0.6.3.0) optimized- Cook triggers removed from outside-cook code (0.6.1.0) — no
node.geometry()or cook-dependentparm.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_radiuscopy-to-points fixed - simulate (0.6.3.0) Removed output-attributes control that broke scene upgrades; cleans up the temp
__captblockattrib - execute_logic (0.6.3.0) No longer discards
sourceattributes; 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)
sourceprimuvbugfixes - 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_branchesneeds more thinking — it computesdistrather 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
selectandbudscore nodes, assembly decorator yaw controls, more postprocessing tools (pruning, posing), and more effectors (curve follow).