Scribe
Turn a model into a DRAWING, not a screenshot. Set a camera and Scribe works out what you can actually see — visible edges, hidden edges as real dashed geometry, silhouettes — and writes an SVG in named layers that opens clean in Illustrator, sized in true millimetres. Lineweight is graded by depth automatically: near edges heavy, far edges hair, which is the hours-in-Illustrator job this deletes. Section-perspective mode puts the camera on the cut plane for the drawing that is measurable and atmospheric at once. Visibility is ray-cast against the model, so an edge is hidden because something is genuinely in front of it. Client-side; the model never leaves your machine.
Nothing is uploaded — the file is read in this browser and never leaves it.
glTF usually is; Rhino .3dm is not. If the building lies on its side, flip this.
On, a layer read as glazing is clear and you see the room through it. Off, every surface is opaque.
1.6 m is a standing adult. It also sets the eye-level line on the plate.
Level with your eye keeps verticals vertical. Raise it to tilt up, lower it to look down.
On a 36×24 mm gate — the number Rhino and every camera use.
1 SVG unit = 1 mm, so the plate prints true at 100 %. Height follows: 150 mm.
Off, lines run past the edge of the page — useful when you mean to crop in Illustrator.
How sharp a fold has to be before it counts as a line. Raise it to quieten a faceted mesh.
The outline against what is behind it — the line you would ink heaviest.
Page millimetres between visibility rays along an edge. Smaller is finer and slower; 0.6 mm is finer than a pen tip.
The weight at the nearest thing drawn.
…and at the farthest. Between them the weight ramps with eye distance, along each line.
The plate
Open a model and the sheet draws itself. Every number on this page is measured off the drawing that is on screen — nothing is withheld and nothing is estimated.
Layers
| Layer | Strokes | What it is |
|---|---|---|
| cut | — | where the section plane slices the solid |
| visible | — | edges you can see |
| hidden | — | edges behind something — dashed |
| silhouette | — | the outline against what is behind it |
| ground | — | eye level and the ground grid |
The camera
- Eye
- 13.77, 1.6, 19.66 m
- Looking at
- 0, 1.6, 0 m
- Lens
- 35 mm on 36×24 mm
- Angle of view
- 49.1° across · 37.8° down
- Cone of vision
- 59.5°
- Eye level
- 1.6 m
- Sheet
- 200 × 150 mm
- Depth drawn
- —
Sources & methods
How visibility is decided. Every feature edge is sampled along its length, and each sample asks one question: cast a ray from the eye toward that point — does it hit anything first? The scene is a bounding-volume hierarchy (BVH) built by the same code Crucible path-traces with, whose ray test is pinned against a brute-force oracle in its own selftest. So the answer is exact: no depth buffer, no page-space grid, no interpolation. That matters here specifically, because depth under perspective interpolates as 1/w, and the orthographic shortcut — averaging depth linearly along an edge — is simply wrong once the camera has a viewpoint. The ray has no such approximation in it. The ray is also stopped a hair short of its own target so an edge does not occlude itself on the faces it belongs to.
Which lines get drawn. The mesh is welded first (Rhino render meshes duplicate a vertex at every crease, and unwelded topology makes every edge look like an open boundary). Then three tests: an edge with other than two faces is a boundary; an edge whose two faces fold past the crease angle is a crease; and an edge whose two faces disagree about facing the eye is a silhouette. That last test is per triangle, against the eye position — not against one global view direction, which is the orthographic version and gets the outline of anything wide or close wrong.
Lineweight is graded by depth. Each stroke carries the eye distance at its midpoint, and weight ramps linearly from your near weight at the nearest drawn depth to your far weight at the farthest, clamped at both ends. A line that recedes is cut into several constant-weight runs, so the weight changes along it rather than being averaged over it. This is the draughtsman’s convention — the near corner of a building inked heavier than the far one — and it is the hours-in-Illustrator job this tool exists to delete.
The SVG is millimetre-true and layered. One SVG user unit is one millimetre, with width/height in mm and a matching viewBox, so the plate prints true at 100 %. The file carries real named groups — cut, visible, hidden, silhouette, ground — which is the point: it opens in Illustrator already separated. Hidden lines are real dashed geometry with the dash quoted in millimetres, not a grey. Ink is pure black on white, no greys and no opacity: lines recede by getting thinner, never fainter. The camera is written into the file’s <title> and <desc>, so a plate can always say where it was taken from.
What it does not do, honestly. Curves and surfaces are drawn as the mesh Rhino baked, so a cylinder’s silhouette walks along facet edges rather than gliding — a finer render mesh gives a finer drawing. Sampling is finite: a sliver of an edge narrower than the sample step can be missed, which the sample-step slider exists to let you push. A layer read as glazing is treated as clear glass and does not hide what is behind it (switch that off in the model group). Nothing on this page is generated by an image model, and nothing is uploaded — the file you open is read in this browser and stays there.