Panel-driven stylization for the WorldLabs / aras-p Gaussian Splatting renderer. Open it from Window → Splat Stylizer.
- Splat Object dropdown — switch between splats in the scene; every setting below is
stored per-splat (on a
SplatStylizeControlleradded automatically). - Style Mode — Off / Painterly / Comic. Off = stock rendering + grading only.
- Analyze / Regenerate — reads splat positions+colours from the GPU and computes colour groups, object ids, and the luminance histogram. Run once per splat (and again after changing group count / loading objects).
Run nigelhartman/splat_analyzer on the
source .ply/.spz (Python: pip install -r requirements.txt, then point it at the file
with a prompt like "chair, table, plant"). Load the resulting interactions.json here.
- Objects appear as a selectable list (label + splat count).
- Selecting one highlights its splats in the scene (others dim), draws its box, and frames it in the Scene view.
- In painterly mode, Edge Stop keeps paint from smearing across strong colour boundaries — object boxes refine this by grouping each object's splats.
K-means (Oklab colour space + optional spatial adjacency) over the splat's own colours.
- Group Count = the adjustable minimum number of groups (2–32); Regenerate re-runs.
- Each group shows a swatch + splat count; selecting one highlights exactly those splats in the scene so you can see the group's extent/outline.
- The palette feeds comic dots, acrylic palette-snap, and watercolor edges.
- Dot art — every splat becomes a hard dot; dot sizes randomize per colour group (Re-roll changes the pattern), colours flatten toward the group palette.
- RGB offset — two tinted ghosts (pick both colours) offset by distance + angle.
- Black shading — ink fills the darkest X% of the scene, where X uses the splat's own luminance histogram (run Analyze), not a blind threshold.
Three presets — Oil / Watercolor / Acrylic — each sets a distinct recipe, then every parameter stays editable:
- Watercolor: small smear, strong Edge Strength (pigment pooling at colour edges), granulation + paper wash, soft strokes.
- Acrylic: big smear + strong Palette Snap = flat, defined colour groups.
- Oil: long bristled strokes; assign a Stroke Texture whose alpha channel shapes each stroke (alpha preview shown in the panel).
Full chain: white balance → exposure → contrast → hue → saturation/vibrance → lift/gamma/gain → split toning. Applies in every mode, including Off.
Add Painterly Render Feature to your URP Renderer asset (Project Settings → Graphics → URP asset → Renderer → Add Renderer Feature). Without it, only splat-level styling (brush strokes / dots) shows; with it you get smear, comic post, and grading.
- The window drives ONE splat at a time (the dropdown selection = "active"); other splats render with the stock look. Post/grading follows the active splat's profile.
- Keep URP Compatibility Mode (non-Render-Graph) — same requirement as the splat renderer itself.
- Analysis allocates a transient GPU buffer of ~248 B/splat (2M splats ≈ 500 MB) for one frame during Analyze — fine on desktop GPUs, avoid on 500k+ mobile targets.
- Object separation in paint is approximate (edge-stopped smear), not a hard per-object mask; a per-pixel object-ID pass is the natural next step if you need strict borders.