Skip to content

Commit 8c00f14

Browse files
authored
Merge pull request #36 from theprototype-app/docs-51-int
1.43: Scatter page, terrain paint Detail, Distant scatter setting, What's new 1.43
2 parents 4f9f9bb + f8893a6 commit 8c00f14

7 files changed

Lines changed: 132 additions & 7 deletions

File tree

‎docs/img/scatter/add-scatter.png‎

101 KB
Loading

‎docs/img/scatter/select-tool.png‎

82.3 KB
Loading

‎docs/index.md‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,15 @@ with a contributing guide and an `llms.txt` for coding agents.
2424

2525
## What's new
2626

27+
**1.43 — scatter everywhere.** [Scatter](scatter.md) works on [any object](scatter.md#add-scatter-to-an-object) now,
28+
not just terrains — moss on a rock, barnacles on a ship — and moves with it. A set can
29+
[fill](scatter.md#fill-and-masks) by count or density with a minimum spacing and slope, height or painted-layer masks,
30+
[mix models](scatter.md#mix-tint-and-sink) by weight with tint and sink, and draw pack items, prefabs (their look) or
31+
any object you pick. [Edit instances](scatter.md#edit-instances) with Rotate, Scale, Relax and a Select tool with a
32+
gizmo, and [convert both ways](scatter.md#convert-both-ways) — a prefab comes back with its logic. Everyone gets the
33+
same layout from a seed + your edits, while [far scatter thins](scatter.md#distant-scatter-each-device) to each
34+
device's budget.
35+
2736
**1.42 — together and anywhere.** Open the same code as someone in your session and you
2837
[type into one text together](code-workspace.md#editing-together): two people in one line both keep their typing,
2938
everyone's cursor and selection show in their colour, an **Editing with you** strip names who is where, a late joiner

‎docs/scatter.md‎

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
# Scatter
2+
3+
*New in 1.43.* Scatter places many copies of a model — rocks, trees, grass, crates, barnacles — over a surface and
4+
draws them all together, so thousands cost about as much as a handful of objects. It works on a
5+
[Terrain](terrain.md#scatter) and, since 1.43, on **any object**.
6+
7+
A scatter set is **its settings + a seed + your hand edits**. Every computer in your session builds the same instances
8+
from those, and so does every reload — a set of thousands of instances travels as a few hundred bytes.
9+
10+
## Add scatter to an object
11+
12+
Select any mesh or placed model ▸ **Properties ▸ Scatter** (right after the Water section's *Add bubble emitter* /
13+
*Add pour emitter*) ▸ **Add scatter**. 200 instances of the brush's current model fill the whole surface. The instances
14+
belong to the object: move, turn or scale it and they come along, for everyone in the session.
15+
16+
![Properties ▸ Scatter on a sphere: 200 cones fill it, with the Fill rows below](img/scatter/add-scatter.png)
17+
18+
On a Terrain the Scatter section stays where it was (after Terrain paint) with the same rows. **Add fill** adds another
19+
set; **Paint scatter…** (or **Scatter…** on a terrain) opens the scatter brush to paint by hand.
20+
21+
## Fill and masks
22+
23+
Each set's **Fill** block places instances over the whole surface instead of by hand:
24+
25+
| Row | What it does |
26+
|---|---|
27+
| **Count / Density** | Exactly N instances over the surface, or N per square metre. |
28+
| **Spacing** | The minimum distance between two instances (0 = off) — nothing closer, nothing overlapping. When the surface is full, Count places what fits and stops. |
29+
| **Slope** | Only where the surface is between two angles from "up": 0° flat ground, 90° a wall, 180° an overhang. 0–30° keeps instances on the flat top of a rock. |
30+
| **Height** | Only between two heights, in metres, measured in the object's own frame. |
31+
| **On paint** | (Terrains) only where a painted layer covers the ground, above a Coverage threshold. Repaint and the fill follows. |
32+
| **Re-roll** | A new seed: a fresh layout with the same settings. Every instance you edited by hand is kept. |
33+
| **Remove fill** | The fill goes; instances painted by hand stay. |
34+
35+
**Align** stands each instance on the surface (on by default on objects); switch it off to keep them upright. Masks and
36+
density are measured before the object's scale, so moving or scaling the object never reshuffles a fill.
37+
38+
## What you can scatter
39+
40+
- **Primitives** and **Library models**.
41+
- **Pack items** — a kit piece such as a Nature Kit rock, picked in the model list. Everyone fetches it from the pack
42+
server, so nothing extra travels.
43+
- **Prefabs** — a prefab scatters as its **look only** (model and materials); its logic, physics and scripts are not
44+
copied, and the model's row says so. [To objects](#convert-both-ways) brings the real prefab back, logic and all.
45+
- **Use as scatter source** — right-click any object ▸ **Physics & effects ▸ Use as scatter source**, then paint it. A kit piece you have not
46+
edited scatters as its pack item; anything else scatters as its look.
47+
48+
### Mix, tint and sink
49+
50+
- **Add a model to the mix** turns a set into a weighted mix — three rocks at 50/30/20. Drag a model's **w** to change
51+
how often it is picked; ✕ removes a model and the instances painted with it.
52+
- **Tint** varies each instance's colour a little (0 = all alike).
53+
- **Sink** pushes each instance into the ground, in metres at scale 1 (bigger instances sink deeper); a negative value
54+
lifts them.
55+
56+
## Edit instances
57+
58+
On a terrain, the scatter brush in the Sculpt toolbox has a row of **tools**:
59+
60+
| Tool | What it does |
61+
|---|---|
62+
| **Paint** | Paints instances of the model picked above. |
63+
| **Erase** | Removes instances under the brush. |
64+
| **Rotate** | Turns the instances under the brush (*Turn the other way* reverses). |
65+
| **Scale** | Grows them (*Shrink* to shrink). |
66+
| **Relax** | Evens out the spacing under the brush — clumps spread, nothing leaves the brush. |
67+
| **Select** | Pick instances and edit them directly. |
68+
69+
**Affects** (every tool but Paint) limits a tool to one model of a mix — erase only the boxes, turn only the trees.
70+
71+
![The Select tool: seven instances picked, the gizmo on them and the selection commands in the toolbox](img/scatter/select-tool.png)
72+
73+
**Select**: click an instance; <kbd>Shift</kbd>/<kbd>Ctrl</kbd>+click adds or removes; drag a box to select everything
74+
inside it; <kbd>Ctrl</kbd>+<kbd>A</kbd> selects every instance of the Affects model. The gizmo's **Move** slides the
75+
selection over the ground, **Turn** rotates it about up, **Size** scales it — one drag is one undo step. The toolbox adds
76+
**Turn left / Turn right** (15°), **Bigger / Smaller** (10 %), **Re-roll** (a new random turn and size), **Delete** (or
77+
the <kbd>Delete</kbd> key — it deletes instances, never the terrain) and **To objects**. <kbd>Esc</kbd> drops the
78+
selection; a second <kbd>Esc</kbd> leaves sculpting.
79+
80+
!!! note "On an object"
81+
On a mesh or a model (not a terrain) the scatter brush has **Paint** and **Erase**; the other tools are
82+
terrain-only for now.
83+
84+
## Convert both ways
85+
86+
- **Instances → objects**: *To objects* in the Select tool (the selection) or on a model's row in Properties ▸ Scatter
87+
(every instance of it). Each instance becomes a real object exactly where it stood — on the ground, turned, tilted
88+
and sized the same. A prefab's look becomes the **real prefab with its logic** (when that prefab is in your
89+
library); a pack item becomes the pack piece. More than 500 asks first. One undo turns them back into instances.
90+
- **Copies → scatter**: select several copies of one primitive or one Library model standing on a Terrain,
91+
right-click ▸ **Make scatter**. They become instances of that model's scatter on the terrain (position, turn and size
92+
kept) and the objects go. One undo turns them back.
93+
94+
## Distant scatter (each device)
95+
96+
Far scattered models fade out so each device stays inside its budget — about half of its triangle line in the
97+
[budget meter](performance.md#the-budget-chip-will-it-fit-on-a-quest) (Quest 150k, phone 250k, desktop 2M). The layout
98+
is the same everywhere: instances within 30 m of you, and every [collider](terrain.md#scatter-collider), are never
99+
thinned, so a ball hits the same rock on a phone and on a desktop.
100+
101+
**Settings ▸ Scene ▸ Performance ▸ Distant scatter**: **Auto** (reads the device) / **Headset** / **Phone** / **Desktop**
102+
/ **All** (draws everything). This device only.
103+
104+
!!! note "Limits"
105+
Up to 8 scatter sets and 8,000 instances per object or terrain (painted and filled together). Filling 5,000
106+
instances on a 100,000-triangle model takes about 10 ms on a desktop (25–55 ms with spacing and a slope mask).
107+
Everything replicates, undoes in one step per stroke, drag or command, and saves with the scene.

‎docs/settings.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ photo decoder (libheif-js) is LGPL-3.0: it ships unmodified as its own file, loa
103103
| Sticky panel headers | new in 1.33 | **Interface ▸ Windows & chrome ▸ Sticky panel headers** — keeps the Properties and Configure Scene headers on top while you scroll, or lets them scroll away; both panels at once (mixed while they differ), this device only. See [Panel headers](interface.md#panel-headers) |
104104
| Lift corner buttons above docked panels | new in 1.33 | **Interface ▸ Windows & chrome ▸ Lift corner buttons above docked panels** — off by default, beside *Lift toolbar above docked panels*; this device only. See [The toolbar](controls.md#the-toolbar) |
105105
| Selection toolbar · Dock tab row · Grab handle | new in 1.33 | **Interface** — the phone's Show switches, all on by default, this device only; also at the bottom of **More** on a phone. See [The phone bar and More](interface.md#the-phone-bar-and-more) |
106+
| Distant scatter | new in 1.43 | **Scene ▸ Performance ▸ Distant scatter** — **Auto** / **Headset** / **Phone** / **Desktop** / **All**, this device only: far scattered models fade out to stay inside the device's budget; nearby instances and colliders never thin. See [Distant scatter](scatter.md#distant-scatter-each-device) |
106107
| GPU fluid | new in 1.40 | **Scene ▸ Performance ▸ GPU fluid** — **Auto** / **Off**, this device only; Auto runs fluid tanks on the graphics card only where a one-time measurement says it is clearly faster, with **Measure again**. See [GPU fluid](simulation.md#gpu-fluid) |
107108
| Quality preset | new in 1.33 | **Scene ▸ Performance ▸ Quality preset** — **Auto** / **High** / **Medium** / **Low**, this device only; the same as **Configure Scene ▸ Quality ▸ Preset**. See [The Quality preset](performance.md#the-quality-preset) |
108109
| Reset tips | new in 1.34 | **Interface ▸ Reset tips** — brings back tips that have gone away — on a phone, the *Hold and drag items to or from the bar* line at the bottom of More, which hides itself once you have arranged the bar. See [The phone bar and More](interface.md#the-phone-bar-and-more) |

‎docs/terrain.md‎

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -96,38 +96,45 @@ Inspector ▸ **Terrain paint ▸ Paint…**) and pick the **Paint** brush after
9696
give it a colour or texture (*Use the material for layer 1* goes back), so the first stroke on a fresh terrain only
9797
changes where you paint.
9898
- The coverage line shows how much of the terrain each layer covers; **Clear paint** removes all of it.
99+
- *New in 1.43:* **Detail** sets this terrain's paint resolution, 64 × 64 to 512 × 512 (default 128). What is painted
100+
is resampled (edges get sharper or softer) and the next strokes paint at that detail; a bigger map costs more to send
101+
while you paint.
99102
- One drag = **one undo step**. Peers see the stroke while you paint and exactly your result when you let go; the
100103
paint is saved with the scene.
101104

102105
![The Inspector's Terrain paint section](img/terrain/inspector-paint.png)
103106

104107
## Scatter
105108

106-
The **Scatter** brush paints instances of a **primitive or any 3D model in your Library** — trees, rocks, grass
107-
tufts — onto the terrain.
109+
The **Scatter** brush paints instances of a primitive, a Library model, a pack item or a prefab's look — trees, rocks,
110+
grass tufts — onto the terrain. Since 1.43 a set can also **fill** the terrain by count or density with slope, height
111+
and painted-layer masks, mix several models, and be edited instance by instance: see [Scatter](scatter.md), which also
112+
covers scatter on any other object.
108113

109114
![The Scatter brush in the Sculpt toolbox, with cones scattered over a painted terrain](img/terrain/scatter-toolbox.png)
110115

111116
| Control | What it does |
112117
|---|---|
113-
| **Source** | A primitive, or any model in your Library. |
114-
| **Paint / erase** | Paint adds instances; the eraser removes *that model's* instances under the brush. |
118+
| **Source** | A primitive, a Library model, a pack item or a prefab ([what you can scatter](scatter.md#what-you-can-scatter)). |
119+
| **Tools** | Paint, Erase, Rotate, Scale, Relax and Select ([Edit instances](scatter.md#edit-instances)). |
115120
| **Density** | Instances per m² — painting over a patch fills it up to that density and never past it. |
116121
| **Scale min – max** | A random size per instance. |
117122
| **Random rotation** | Turns each instance around its vertical axis. |
118123
| **Align to slope** | Tilts instances to the ground. |
119124

120125
Instances follow the ground — sculpting the terrain later moves them with it. Inspector ▸ **Scatter** lists each
121-
scattered model with its count, an Align toggle and **Remove**. Scatter is counted by the
126+
scattered model with its count, an Align toggle and **Remove**, plus the Fill, mix, Tint and Sink rows
127+
([Scatter](scatter.md)). Scatter is counted by the
122128
[budget chip](performance.md#the-budget-chip-will-it-fit-on-a-quest) on the terrain's row, and a dense model (300
123129
triangles or more) switches to lighter [levels of detail](lod.md) with distance — instances far away draw fewer
124130
triangles.
125131

126132
!!! note "Limits"
127133
Up to 8,000 instances and 8 scattered models per terrain. For a Quest, keep it near 2,000 instances of a low-poly
128134
model (≤ 150 triangles each): each scattered model is one draw call (a dense one, a few — it is drawn in patches so
129-
its levels of detail can switch), plus one per shadow-casting light. Instances cannot be selected one by one, and
130-
are solid only when their model has a [Collider](#scatter-collider). Older versions open a painted or scattered terrain as the plain terrain.
135+
its levels of detail can switch), plus one per shadow-casting light; far instances
136+
[thin out per device](scatter.md#distant-scatter-each-device). Instances are solid only when their model has a
137+
[Collider](#scatter-collider). Older versions open a painted or scattered terrain as the plain terrain.
131138

132139
### Scatter ▸ Collider
133140

‎mkdocs.yml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ nav:
4141
- Fluid Tank & Jiggle: simulation.md
4242
- "Fluids: Emitters & Flow Paths": fluids.md
4343
- Terrain & Sculpting: terrain.md
44+
- Scatter: scatter.md
4445
- Saving & Sessions: saving.md
4546
- Checkpoints: checkpoints.md
4647
- Loading Placeholders: loading.md

0 commit comments

Comments
 (0)