Feature·
Natsura 0.6.1.0
Unified effector and mapping shape, assemblies workflow 1.0, picker UI, cook trigger purge, rigged Nanite export
Back to ChangelogUnified effector and mapping shape, assemblies workflow 1.0, picker UI, cook trigger purge, rigged Nanite export
- title: Natsura 0.6.1.0
- description: "Unified effector and mapping shape, assemblies workflow 1.0, picker UI, cook trigger purge, rigged Nanite export"
- date: "2026-05-20"
- badge: "v0.7.0.0"
- houdini: "20.5, 21.0"
- previous: "0.6.0.5"
- Effectors: unified multiparm shape shared with assembly decoration; picker UI for effector slots; up-vector control (orbit, align, flatten); same effector assignable multiple times to one node with different responses and maps.
- Assemblies: workflow finalised at 1.0 (import → rig → classify → decorate); rigged Nanite skeletal assembly export to Unreal wired end-to-end; random part selection retired, distribution is mapping-only; tested at very large library scales.
- Performance: cook triggers removed from outside-cook code; spans panel 4Hz → 1Hz heartbeat; toolbar redraw churn reduced; toolbar actions no longer write prefs. Stale channel refs are the next active bug class.
- UI: 2-parm portable mapping form across the toolkit; picker UI replaces native add menus on map / decorator / effector slots; Natsura main menu + dev dropdown; display toolbar reorganised and context-sensitive; recipe spawn (no second cook on placement); native hotkeys; workspace panel with tear-off tabs; Guide replaces Tips Panel.
- Grow 1.x, switch 1.0 and mappable_parms archived; existing hipfiles migrate on load.
natsura::direction_effector::1.0— uniform direction effectornatsura::autocode_effector::1.0— utility for preparing effectors inside decorationsnatsura::effector_template::1.0— template for ingesting effectors inside decorationsnatsura::assembly_edit::1.0— pivot and per-element tweaks, utility inside assembly resourcenatsura::assembly_pack::1.0— pack assemblies into instanced output, utility inside assembly resourcenatsura::partition_assemblies::1.0— split large datasets into chunks for parallel processing, utility inside assembly resourcenatsura::visualize_assemblies::1.0— inspection (motion, pivots, rigs, colours), utility inside assembly resourcenatsura::pivot_edit::1.0— pivot adjustment of assemblies, utility inside assembly resourcenatsura::import_assembly::1.0— bring assemblies in from external sources, internal utility of resourcenatsura::rig_to_assembly::1.0— convert a rig to an assembly representation, experimental. go from simulation to assembly decoration.natsura::fuse_tree_rig_and_skin::1.0— utility for grafting tree skeletons, useful for grafting assemblies onto simulationnatsura::grow::1.0,natsura::grow::1.1,natsura::grow::1.2— use 2.0; pre-0.6 scenes migrate on loadnatsura::switch::1.0— use 1.1natsura::mappable_parms::1.0— redundant under 2-parm mapping- grow 2.0 unified effector_list multiparm (absorbed graph_operation_count)
- grow 2.0 recipe spawn populates trunk preview, decorator drag slot, follow rows on placement (no second cook)
- grow 2.0 custom right-click menu replaces native
- grow 2.0 orbit / align / flatten (up) modes on effectors
- grow 2.0 tab menu spawns recipe
- grow 2.0 menuscript-driven live parm update; no OnInputChanged proliferation
- grow 2.0 trunk decoration skeleton fix
- grow 2.0 pack/unpack workaround for single-point-remaining decoration bug
- core_grow opexist guard before object merge (no invalid-path spam)
- core_grow removed invalid
string newparm ref - core_grow stamps Natsura version on node for upgrade tooling
- simulate display settings + colour restored
- simulate skeleton split out post-cook
- simulate bypass switch when no APEX graph present (no empty-cook errors)
- simulate POSTPROCESS chain (attribwrangle, edgetransport, color)
- simulate source_radius copy-to-points fix
- core_simulate object-merge stack subnet
- core_simulate profile outputs added
- core_simulate cache-if removed where misfiring
- execute_logic parent_id → id_parent across schema
- execute_logic dynamic invoke setup
- execute_logic illegal-graph handling restored (regressed in 1068)
- All effectors prefixed
experimental_in tab menu while contract settles - Up-vector control: orbit, align, flatten — control the frame of growth, not just the heading
- Ancestor effector reads vectors from parent, grandparent and further up the lineage
- Same effector assignable to one node multiple times, each with own response and map (for layered behaviours)
- Signal names collision-resistant;
/→_so paths work as names - Rename tracked via channel ref to parm (was Python, brittle)
- Menus cached (too many to update live)
- Multiparm: fixed-size 32 slots across grow + assembly decoration
- assembly_decoration effector support via shared list
- assembly_decoration flipping fix: face-gravity correction + unified rotation across opposing whorl elements
- assembly_decoration sub-component rig support in classify
- assembly_decoration random part selection removed; distribution is mapping-only
- assembly_decoration mapping default range auto-picks
- surface_decoration 2-parm mapping shape
- surface_decoration gather_controls thread-pool parms exposed
- surface_decoration removed stale OUT_decorate_package ref
- surface_decoration defensive hscript on map_blend
- clusters_decoration deprecated this release; use assembly_decoration for module placement
- trunk_decoration, core_decorate, core_decoration 2-parm mapping shape
- 2-parm portable form:
{name}+{name}_map, shared execute_mapbutton action (handles promote, unlink, replace from either parm) - All map expression links on float parms removed; the map value drives the parm directly
- map, map_if, map_blend 2-parm shape
- map_blend redundant map_if branch removed
- ingest_mappings standardised parm refs
- ingest_mappings broken expressions cleaned by upgrade pass
- switch 1.1 map-driven gates respect 2-parm shape
- wrangle signal-naming pass
- core_fetch invalid
string newparm ref removed - Pickers replace
menureplaceadd menus on map / decorator / effector slots - Picker bucketing: already on this grow / on other grows / orphan
- Preview decorators (trunk_preview, leaf_preview) and intrinsic vectors in their own columns
- Per-slot menus: unlink, duplicate, jump-to, replace
- ~1,100 LOC Python + comparable DialogScript removed
- classify sub-component rig support
- classify viewport-based attribute + group assignment
- classify refreshes assembly_decoration multiparm on change
- assembly_resource template + editing updates
- build_assembly_rig nearpoint-lookup autorigging with cycle removal
- create_proxy outputs bounds / VDB / medial axis / particles; optional leaf removal
- identify_shared_instances flat instanced structure for duplicates
- Pipeline tested at very large library scales
- scan_to_parts nearpt method replaces VDB (VDB kept breaking)
- scan_profiles scatter-based rebuild
- scan_extend_profiles multitrunk extension
- import_highpoly SOP input from graph
- bake supersampling + seam handling
- surface_wizard internal cleanup
- sopcreatenaniteassembly rigged Nanite export wired end-to-end (grow → fuse → skin → export → USD)
- export_unreal_nanite_assembly wired through fuse + skin chain
- Wind sidecar:
<name>_wind.jsonalongside USD - Wind tools experimental; not a runtime match for Unreal wind, just enough to see where the wind layers are while setting up the rig
- Natsura main menu dropdown + dev dropdown (dev tools out of the main menu)
- Display toolbar: reorganised, MMB scroll, dev moved to far right
- Display toolbar: context-sensitive grow / switch / split by graph-port count on current selection
- Toolbar dropdown: license key, update check, support info, projects, examples, docs
- Recipe spawn: trunk preview + empty decoration / effector slots + follow rows on placement; no second cook
- Native hotkeys (file-driven via Houdini's loader): toggle stowbars, pause cook
- Grow uses action button scripts instead of menu callbacks (faster, less script churn)
- Workspace panel: toolbar + guide / attributes / spans tabs, tear-off floating
- Python panels in folder structure; dev panels moved to separate dev project
- Guide (was Tips Panel): markdown format, search across names + content, prev/next, multiple libraries
- Multiparm right-click batch-set channel expressions
- Panel scene tracking moved to background service (Qt signals); spans and simulate-selector still poll for scoped state the service doesn't cover
- upgrade/v0_6/grow_nodes.py runs on load: migrates pre-0.6 effector slots, realigns follow rows, cleans orphan channel refs
- migrate_unified_effector_list: moves misaligned follow snapshots; clears obsolete effector_text_fields
- afterscenesave.py stamps hip with Natsura version
- Back-compat: pre-unification hipfiles load (graph_operation_count silently ignored, effector_list loads normally, per-row instance parms migrate)
- Cook triggers removed from outside-cook code (UI, menus, graph layer)
- No node.geometry() or cook-dependent parm.eval() outside cook
- Declarative state: parm rawValue / type metadata / userData; readers read declarations
- APEX-auto-from-sops: ad-hoc groups (groups not guaranteed to exist at that stage)
- Spans panel: 4Hz → 1Hz heartbeat (cheap signature check; full driver sweep only on change)
- Toolbar capability-fade + category-aware fade reduce redraw churn on prefs changes
- Toolbar actions no longer write prefs (was rebuilding toolbar on every prefsChanged, killing open dropdowns)
- Effector rename no longer breaks attribfromparms refs
- Auto-merge enable condition
#-1→# - Surface decorator map refs cleaned via upgrade
- clear_stale_follow_depths widened (unified + legacy multiparm names)
- Trunk decoration skeleton on grow
- Decorator multiparm sorting
- Simulate display settings + colour
- source_radius copy-to-points
- parent_id → id_parent applied across core_grow.preview_code, assembly_decoration.editgraph1, simulate.POSTPROCESS, execute_logic.graph_process_main (all-or-nothing; partial application breaks the schema)
- Stale
start = -0.041666666666666664channel keyframes stripped - Stale channel refs is the active bug class right now. Symptoms: parameters not updating after 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 remaining ones 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 for a later release.
- Flatten + phyllotaxy controls are sensitive on perfectly upright branches — getting 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 imported to Unreal can appear to have instances at the root in the skeletal mesh editor. Fix in-engine by switching preserve-area to voxelise; the issue also goes away if you spawn the tree as an instanced skinned mesh. Unclear if it's a Natsura-side or Unreal-side issue; continuing to investigate.
- Effectors prefixed
experimental_until contract settles across grow + assembly decoration - Wind tools experimental; not a runtime match for Unreal wind
- Analytics opt-in, off by default
- Houdini 20.5 and 21.0