You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- units.md (new, in the nav): the global setting, the typed suffixes, and the three
things a unit deliberately does NOT change - stored values, the feel of a drag, and
what your peers see
- controls.md: selecting without a keyboard (the touch cluster and the Multi-select
mode), a Duplicating section with a table of what a copy brings, and numeric fields
now covering node/shader/animation cards plus typed units
- mesh-editing.md: Shift/Ctrl-drag box select in all three element modes
- saving.md: what a restore brings back, and why a plain reload starts clean
- node-system.md + shader-graph.md: the Flows / Shaders list in the left pane
- module-sdk.md: registerPostEffect and registerPostBackend, including why post is a
separate registry from shader (an Effect is not a Material) and what a peer without
the module sees
Built with --strict.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: docs/controls.md
+45Lines changed: 45 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -18,6 +18,7 @@ How to move the camera, select and transform objects, and find every keyboard sh
18
18
-**Shift+click** adds or removes objects from a multi-selection (the last-picked object is the primary).
19
19
-**Shift+drag** on empty space draws a box-select marquee.
20
20
-**Ctrl+A** selects everything in the scene. Inside a mesh editing session it keeps its other meaning — select every face, edge or vertex — so the two never collide.
21
+
-**Ctrl+D** duplicates the selection — see [Duplicating](#duplicating) for what a copy brings with it.
21
22
- Selecting an object **locks it for other peers** (one lock per person); a locked object shows who holds it, and its right-click menu offers **Request control** to ask for a handover.
22
23
23
24
### What double-click does
@@ -33,6 +34,43 @@ An object scaled — or animated — down to almost nothing has no surface left
33
34
!!! note
34
35
At *exactly* zero scale the viewport click does not reach it yet; select it from the object list instead. That one is a known gap.
35
36
37
+
### Selecting without a keyboard
38
+
39
+
On a phone or tablet there is no <kbd>Shift</kbd> to hold and no right-click, so the same
40
+
two gestures are available as a **mode**. *Settings ▸ Interface ▸ Touch tools* puts round
41
+
**Undo**, **Redo** and **Multi-select** buttons beside the logo — on by default on phones
42
+
and narrow windows.
43
+
44
+
With **Multi-select** on:
45
+
46
+
- a **tap adds** to the selection instead of replacing it, and
47
+
- a **drag on empty space** draws the box-select marquee.
48
+
49
+
It works the same inside a mesh editing session, on vertices, edges and faces. Everything
50
+
else already has a touch path: long-press the viewport for the right-click menu, and the
51
+
**+** button opens the same create menu.
52
+
53
+
### Duplicating
54
+
55
+
**Ctrl+D** (or right-click ▸ *Duplicate*) makes a working copy. A copy is a copy of
56
+
everything that belongs to the object, not just its shape:
57
+
58
+
| Comes along ||
59
+
|---|---|
60
+
| geometry, transform, children | always |
61
+
| material and its texture slots | always, as its own detached copy |
62
+
| physics, origin, camera settings | always |
63
+
|**animation clips**| yes — the copy plays its own |
64
+
|**object flow graph**| yes, with fresh node ids |
65
+
|**shader graph**| yes — otherwise the copy would render frozen |
66
+
67
+
An embedded **Object Flow** node inside a copied graph keeps pointing at the object it
68
+
referenced. Re-aiming it at the copy is a decision only you can make, so it is left alone.
69
+
70
+
Each of the last three can be switched off in *Settings ▸ Scene ▸ Duplicate* if you would
71
+
rather a copy came out bare. An object that inherits the **scene default** shader keeps
72
+
inheriting it — it does not get a private snapshot.
73
+
36
74
### Editing a multi-selection
37
75
38
76
The properties panel edits **everything you have selected**, not just the last object you clicked. Change a colour, a material, a shadow flag or a physics setting and it applies to the whole set as a **single undo step**; a row whose objects disagree shows a dash until you set it.
@@ -67,6 +105,13 @@ The origin travels with the object: it replicates, saves, undoes, and is baked i
67
105
68
106
Every number in the app is the same control: **drag** it to scrub, or **type** into it for live updates. <kbd>↑</kbd>/<kbd>↓</kbd> step by one unit — hold <kbd>Ctrl</kbd> for ×10, <kbd>Shift</kbd> for ×100 — and <kbd>Esc</kbd> reverts what you typed.
69
107
108
+
That includes the numbers inside **node editor cards**, **shader nodes** and the
109
+
**animation window** — dragging one of those scrubs the value without dragging the card.
110
+
Scrubbing an animation key or a shader parameter is **one undo step**, not one per pixel.
111
+
112
+
Fields that hold a distance or an angle also accept a typed **unit** (`12cm`, `4in`,
113
+
`90deg`) — see [Units](units.md).
114
+
70
115
### Floating windows
71
116
72
117
The toolboxes, the Explorer, the flow and animation windows and the panels all behave the same way: drag the header to move, drag the bottom-right corner to resize. A window can never be sized past the edge of the screen — the resize corner always stays reachable — and **double-clicking** the corner resets it to its default size while leaving it where you parked it. Size and position are remembered per window.
Copy file name to clipboardExpand all lines: docs/mesh-editing.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -44,6 +44,7 @@ Each mode remembers its own selection, so you can hop between them without losin
44
44
### Selecting
45
45
46
46
-**Click** an element to select it; **Ctrl+click** adds to the selection.
47
+
-**Shift+drag** or **Ctrl+drag** draws a **box** — every vertex, edge or face inside it joins the selection. Works in all three element modes, and a box always takes whole faces (never half a quad). An empty box changes nothing, so a stray drag cannot wipe your work.
47
48
- Selection **commands** appear as words in the *Select* row — they change what is picked, never the geometry:
Copy file name to clipboardExpand all lines: docs/node-system.md
+11Lines changed: 11 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,6 +6,17 @@ The Flow editor is a visual node graph that drives scene behavior — animation,
6
6
7
7
Press <kbd>N</kbd> or use the flow icon in the bottom hud. The editor docks at the bottom (tabbed with the [Explorer](explorer.md) when both are open) and can be undocked to float.
8
8
9
+
## The Flows list
10
+
11
+
The left pane carries a collapsible **Flows** section above the node palette. It lists
12
+
**Scene** at the root, then every object that actually has a flow graph of its own — it is a way
13
+
to get *to* a graph, not a second object list, so an object with none is not in it.
14
+
15
+
Click a row to select that object and switch the editor to its graph; click **Scene** to
16
+
deselect and edit the scene-wide one. Drag the bar under the list to give it more room, and
17
+
click the section header to collapse it. An entry whose object has been deleted is shown
18
+
greyed out until the next save drops it.
19
+
9
20
## Adding nodes
10
21
11
22
-**Palette** — the left sidebar lists every node by group with a filter box; drag a node onto the canvas. The palette can be collapsed or moved to the other side with the tabs on its edge.
Copy file name to clipboardExpand all lines: docs/saving.md
+14Lines changed: 14 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,6 +4,20 @@ How to save and load your work: the recommended `.tpscene` bundle, GLTF intercha
4
4
5
5
The main menu (the logo button) has **Import** (bring 3D files into the scene), **Load** (open a saved file) and **Save**, with a format switch underneath: **GLTF | Scene** — and a **⚙** cog for export settings.
6
6
7
+
## Where you left off
8
+
9
+
Restoring a session — from the **Restore** prompt, from *auto-restore* in
10
+
*Settings ▸ Scene*, or by loading a scene file — brings back more than the objects:
11
+
12
+
- the **panels and windows** you had open, and which dock tab was in front,
13
+
- what you had **selected**, and
14
+
- an open **Edit Mesh** or **Sculpt** session, with the faces, edges or vertices you had
15
+
picked.
16
+
17
+
A **plain page reload starts clean**, with everything closed. The workspace comes back
18
+
when you ask for your scene back, not every time you refresh — and a scene whose author
19
+
had nothing open will not close the panels *you* have open.
20
+
7
21
## Starting from a template
8
22
9
23
**Menu ▸ Templates** opens a picker of ready-made scenes, in three tabs:
The scene is metres and radians underneath, always. Units change how numbers are **shown to you and typed by you** — nothing else. That makes them a **local preference**: you can work in inches while a peer works in centimetres, and you are both editing the same scene.
4
+
5
+
## Choosing your units
6
+
7
+
*Settings ▸ Scene ▸ Units*:
8
+
9
+
| Setting | Choices | Applies to |
10
+
|---|---|---|
11
+
|**Length**| m, cm, mm, in, ft | positions, the object origin, snapping steps, bevel width, merge distance |
12
+
|**Angle**| degrees, radians | rotations and the rotation snap step |
13
+
14
+
Fields that are not a distance or an angle are deliberately left alone — a roughness of 0.4, a duration in seconds, a texture pixel and a subdivision count are not measurements, and a unit picker on them would be noise.
15
+
16
+
## Typing a unit
17
+
18
+
You do not have to change the setting to enter a value in another unit. Any of these fields accepts a **suffix**, whatever is currently on display, and converts it as you type:
19
+
20
+
| You type | You get |
21
+
|---|---|
22
+
|`12cm`| 0.12 m |
23
+
|`250mm`| 0.25 m |
24
+
|`4in`| 0.1016 m |
25
+
|`1.5ft`| 0.4572 m |
26
+
|`2'`| 0.6096 m |
27
+
|`6"`| 0.1524 m |
28
+
|`90deg`| a quarter turn |
29
+
|`1.57rad`| the same quarter turn |
30
+
31
+
A **bare number** means the unit on display. So in a centimetre field, `250` is 2.5 m; in a metre field, `250` is 250 m.
32
+
33
+
## What does not change
34
+
35
+
-**Stored values.** Switching from metres to centimetres re-renders the fields and moves nothing. A box at 1.5 m reads `150` in cm and is still at 1.5 m.
36
+
-**The feel of a drag.** Scrubbing a field covers the same real distance in every unit — only the number under your cursor is written differently.
37
+
-**What your peers see.** Units are never replicated and never saved into a scene, so opening someone's file does not change your setup, and yours does not change theirs.
38
+
39
+
## Precision
40
+
41
+
The number of decimals follows the unit, so the field keeps roughly the precision it had. A position showing `1.50` m shows `150` in centimetres — the same centimetre of control, just written without a fractional part. Inches and feet keep a decimal place for the same reason: a whole inch is a coarser step than a centimetre, so the field does not round that far.
42
+
43
+
The arrow keys always step the **last visible digit**, with <kbd>Ctrl</kbd> for ten times that and <kbd>Shift</kbd> for a hundred — see [Numeric fields](controls.md#numeric-fields).
0 commit comments