Skip to content

UnityEQ Pivot Painter Lab

Release notes

Versioning is semver.

The first public release.

  • RGS-PA skeleton-first solver. Rebuilt element grouping and hierarchy on a reduced graph with k-nearest-neighbour connectivity, a Prim spanning skeleton and heap Dijkstra, replacing the old 1-NN graph and index-order bridging.
  • Hard pre-bake validation gate. EQPivotPainterBakeValidator runs before any mesh or texture is written and refuses the bake outright on multi-owned triangles, coverage below 98%, self/invalid parents, hierarchy cycles, non-monotonic depth, chains over the shader’s 3-hop budget, or more than 30,000 elements. Refusal reports the offending elements.
  • Scale invariance. Detection, attachment scoring and repair thresholds now derive from the mesh diagonal, so a model imported at 0.01x, 1x or 100x partitions identically.
  • Real-meters pivots and extents. Extent is the signed maximum forward projection from the pivot (the physical swing arm, PP2 semantics), the pivot ladder resolves through attachment points and welded contacts instead of AABB anchors, and forward/up axes come from a PCA eigensolver.
  • Depth/bucket split. Parent-chain depth and the semantic wind bucket are separate fields; the bucket is what reaches the shader’s Level 1-4 controls.
  • Determinism. Byte-identical re-bakes, guarded by golden hashes over the pivot texture, axis texture and lookup UVs.
  • Bake Doctor window: a visual pre-flight that reports the same verdict as the hard gate, with structured offender counts and jump-to-element navigation.
  • Wind Bucket Painter: hand-assign wind feel per element; painted overrides survive re-detection and clear back to automatic.
  • Branch Group authoring and manual hierarchy repair with locked parents and locked buckets that survive bake and repair passes.
  • Intelligent texture resolver: classifies albedo / normal / packed / data maps by name and species token and binds them automatically, with a per-slot review and override UI.
  • Packed-mask layouts: ORM, ORT and AO/Rough/Height read their real channels instead of being forced through Unity’s MaskMap order; an ORM packer builds a packed map from separate AO/Roughness/Metallic sources.
  • Octahedral impostors: hemi-octahedral capture rig, impostor card shaders for all three pipelines, and automatic assembly as a far LOD in an LODGroup alongside a graduated LOD chain built from the source LODs.
  • Hero Foliage Lit shaders for Built-In, URP and HDRP over one shared portable wind cascade, so the deformation has a single source of truth.
  • Wind polish pack: three-octave fractal gust, leeward shelter, downwind lean, and per-instance gust fronts so gusts travel across a forest instead of every tree gusting in unison.
  • Wind interactors: characters and objects push foliage aside, with wood resisting and leaves yielding.
  • Runtime wind control: a global wind controller and per-renderer wind variation (phase offset and strength multiplier).
  • URP hero foliage now writes a DepthNormals pass. Without it URP SSAO in Depth Normals mode, decal normal blending and any normals-prepass consumer skipped the foliage entirely, so baked trees rendered un-occluded and un-decaled next to correctly shaded geometry.
  • Normal maps are sampled in URP and HDRP. _NormalMap, _NormalScale and the detail normal were exposed but never read outside Built-In, so assigning a normal map did nothing and foliage read flat. _NormalMap_ST and _DetailAlbedo_ST tiling now applies in all three pipelines as well.
  • HDRP hero foliage responds to the scene’s directional light — direction, colour and intensity — and receives cascade shadows, instead of being lit only by a spherical-harmonics approximation with no shadowing. Scenes with no directional light fall back to the previous SH behaviour.
  • URP impostor cards cast shadows. They had no ShadowCaster pass, so a tree’s shadow disappeared the moment its LODGroup switched to the impostor.
  • The HDRP workbench preview renders. It was a UsePass wrapper around a Built-In pass tagged SRPDefaultUnlit, which HDRP does not draw and does not route to the error shader either, so the wind-hierarchy visualiser showed nothing in HDRP projects. All three preview shaders now share one portable cascade and use the same real-meters bend model as the hero shaders.
  • Hero URP and HDRP are SRP Batcher compatible. About 35 per-material wind uniforms sat outside UnityPerMaterial, which alone disqualified the shaders from batching — a real per-draw CPU cost on bulk-drawn foliage.
  • A forward-axis override pointing back toward its own pivot no longer collapses the element’s extent to the floor value, which had left it with almost no wind amplitude and a bend mask measured in millimetres.
  • Connection tolerance no longer applies a flat 2 cm floor to very small assets, where it was a fifth of the whole model and welded a small plant’s leaves into a single element.
  • The RGS-PA spatial hash no longer forces a 1 cm cell on sub-0.2 m meshes, which collapsed every patch into one bucket and made neighbour queries quadratic.
  • Glue-statics get an explicit wind bucket instead of inheriting their chain depth through a fallback.
  • The Built-In impostor card used a project-absolute include path and turned pink if the tool folder was moved.
  • The release packager now refuses to build a package that would contain dev bake output or the test assembly, instead of silently including them.
  • HDRP hero foliage is lit by the scene’s main directional light plus spherical-harmonics environment. Additional punctual and area lights do not reach it. Built-In and URP use their pipeline’s full lighting.
  • HDRP hero foliage writes zero motion vectors, so wind motion is not represented to TAA (whole-object motion is unaffected). Representing the cascade’s per-vertex motion needs a second deform evaluated at the previous frame’s time, which is deliberately deferred rather than approximated.
  • Neither URP nor HDRP hero foliage has a Meta pass, so foliage albedo does not contribute bounce light to baked GI. Foliage is lightmapped in its rest pose regardless, so the effect is small.
  • Baked meshes carry a per-element material family in vertex colour alpha; there is no option to preserve the source mesh’s vertex colours.
Report an issue with this tool

Opens our feedback form in a new tab with the tool name pre-filled.