When in `Model` mode, Scotty3D provides a polygon-based 3D modeler with basic
When in `Model` mode, Scotty3D provides a polygon-based 3D modeler with basic
subdivision capabilities. The central modeling paradigm is "box modeling", i.e.,
subdivision capabilities. The central modeling paradigm is "box modeling", i.e.,
starting with a simple cube, you can add progressively more detail to produce
starting with a simple cube, you can add progressively more detail to produce
interesting 3D shapes. You can also use _subdivision_ to get smooth
interesting 3D shapes. You can also use _subdivision_ to get smooth
approximations of these shapes.
approximations of these shapes.
MeshEdit supports four basic actions on mesh elements (move, rotate, scale, and bevel),
MeshEdit supports four basic actions on mesh elements (move, rotate, scale, and bevel),
plus a collection of local and global mesh editing commands.
plus a collection of local and global mesh editing commands.
Note that MeshEdit (and more broadly, Scotty3D) will only operate on meshes that
Note that MeshEdit (and more broadly, Scotty3D) will only operate on meshes that
are _manifold_ (i.e., the union of faces containing any given vertex _v_ is a
are _manifold_ (i.e., the union of faces containing any given vertex _v_ is a
topological disk). Likewise, all mesh operations in Scotty3D will preserve the
topological disk). Likewise, all mesh operations in Scotty3D will preserve the
manifold property, i.e., manifold input will always get mapped to manifold
manifold property, i.e., manifold input will always get mapped to manifold
output. This property is key for ensuring that many algorithms in Scotty3D are
output. This property is key for ensuring that many algorithms in Scotty3D are
"well-behaved", and that it always produces nice output for other programs to
"well-behaved", and that it always produces nice output for other programs to
use. If you load a mesh that is non-manifold, you can still use it in your scene
use. If you load a mesh that is non-manifold, you can still use it in your scene
and render with it, but editing will not be supported.
and render with it, but editing will not be supported.
### Editing Mesh Elements
### Editing Mesh Elements
Before you start, you should import the model from `./media` in `Layout Mode`. (See [Layout Mode](/docs/guide/layout.md) page for more details)
Before you start, you should import the model from `./media` in `Layout Mode`. (See [Layout Mode](/docs/guide/layout.md) page for more details)
In `Model` mode you can inspect mesh elements by
In `Model` mode you can inspect mesh elements by
left-clicking on vertices, edges, faces, and halfedges. Information about these
left-clicking on vertices, edges, faces, and halfedges. Information about these
elements will be shown in the left sidebar.
elements will be shown in the left sidebar.
In this mode you can change the geometry (i.e., the shape) of the mesh by transforming mesh elements in the same way you can transform scene objects. Note
In this mode you can change the geometry (i.e., the shape) of the mesh by transforming mesh elements in the same way you can transform scene objects. Note
that the transformation widget again has three modes of operation, which you can
that the transformation widget again has three modes of operation, which you can
toggle through by pressing the `r` key.
toggle through by pressing the `r` key.
-`Move`: click and drag on the red (X), green (Y), or blue (Z) arrow to move the object along the X/Y/Z axis. Click and drag on the red (YZ), green (XZ), or blue (XY) squares to move the object in the YZ/XZ/XY plane.
-`Move`: click and drag on the red (X), green (Y), or blue (Z) arrow to move the object along the X/Y/Z axis. Click and drag on the red (YZ), green (XZ), or blue (XY) squares to move the object in the YZ/XZ/XY plane.
-`Rotate`: click and drag on the red (X), green (Y), or blue (Z) loop to rotate the object about the X/Y/Z axis. Note that these rotations are applied relative to the current pose, so they do not necessarily correspond to smooth transformations of the X/Y/Z Euler angles.
-`Rotate`: click and drag on the red (X), green (Y), or blue (Z) loop to rotate the object about the X/Y/Z axis. Note that these rotations are applied relative to the current pose, so they do not necessarily correspond to smooth transformations of the X/Y/Z Euler angles.
-`Scale`: click and drag on the red (X), green (Y), or blue(Z) block to scale the object about the X/Y/Z axis. Again note that this scale is applied relative to the current pose.
-`Scale`: click and drag on the red (X), green (Y), or blue(Z) block to scale the object about the X/Y/Z axis. Again note that this scale is applied relative to the current pose.
![selecting an edge](./model_mode/model_select.png)
![selecting an edge](./model_mode/model_select.png)
### Beveling
### Beveling
The bevel action creates a new copy of the selected element that is inset and
The bevel action creates a new copy of the selected element that is inset and
offset from the original element. Clicking and dragging on an element will
offset from the original element. Clicking and dragging on an element will
perform a bevel; the horizontal motion of the cursor controls the amount by
perform a bevel; the horizontal motion of the cursor controls the amount by
which the new element shrinks or expands relative to the original element, and
which the new element shrinks or expands relative to the original element, and
the vertical motion of the cursor controls the amount by which the new element
the vertical motion of the cursor controls the amount by which the new element
is offset (in the normal direction) from the original element. It is important
is offset (in the normal direction) from the original element. It is important
to note that a new element will be created upon click _even if no inset or
to note that a new element will be created upon click _even if no inset or
offset is applied_. Therefore, if you're not careful you may end up with
offset is applied_. Therefore, if you're not careful you may end up with
duplicate elements that are not immediately visible. (To check, you can drag one
duplicate elements that are not immediately visible. (To check, you can drag one
of the vertices mode.)
of the vertices mode.)
There are three possible types of bevels:
There are three possible types of bevels:
- Vertex Bevel: The selected vertex _v_ is replaced by a face _f_ whose
- Vertex Bevel: The selected vertex _v_ is replaced by a face _f_ whose
vertices are connected to the edges originally incident on _v_. The new face is
vertices are connected to the edges originally incident on _v_. The new face is
inset (i.e., shunken or expanded) by a user-controllable amount.
inset (i.e., shunken or expanded) by a user-controllable amount.
- Vertex Extrude: The selected vertex _v_ is beveled by a flat amount (we use 1/3 the length of the edge from the original vertex _v_ to an adjacent vertex endpoint as the tangential offset), a new vertex _v'_ is inserted into the resulting face, and _v'_ is offset in its normal direction by a user-controllable amount.
- Vertex Extrude: The selected vertex _v_ is beveled by a flat amount (we use 1/3 the length of the edge from the original vertex _v_ to an adjacent vertex endpoint as the tangential offset), a new vertex _v'_ is inserted into the resulting face, and _v'_ is offset in its normal direction by a user-controllable amount.
- Face Bevel: The selected face _f_ is replaced by a new face _g_, as well
- Face Bevel:<aname="face-bevel"></a>
as a ring of faces around _g_, such that the vertices of _g_ connect to the
The selected face _f_ is replaced by a new face _g_, as well
original vertices of _f_. The new face is inset and offset by some
as a ring of faces around _g_, such that the vertices of _g_ connect to the
user-controllable amount.
original vertices of _f_. The new face is inset and offset by some
user-controllable amount.
- Face Extrude: The selected face _f_ is replaced by a new face _g_ as in Face Bevel, and _g_ is offset only in the normal direction by some user-controllable amount.
- Face Extrude: The selected face _f_ is replaced by a new face _g_ as in Face Bevel, and _g_ is offset only in the normal direction by some user-controllable amount.
- Face Inset: The selected face _f_ is replaced by a new face _g_ as in Face Bevel, but its vertices are only offset in the tangent direction by a constant factor (we use 1/3 in the example).
- Face Inset: The selected face _f_ is replaced by a new face _g_ as in Face Bevel, but its vertices are only offset in the tangent direction by a constant factor (we use 1/3 in the example).
[Note: this method is for triangle meshes only!] The
![](./model_mode/edge_split.mp4)
selected edge _e_ is split at its midpoint, and the new vertex _v_ is connected
to the two opposite vertices (or one in the case of a surface with boundary).
- Edge Bisect: The selected edge _e_ is split at its midpoint, and the new vertex _v_ at the split is returned. Note that the new vertex _v_ is not connected to the two opposite vertices as in Edge Split.
A number of commands can be used to create a more global change in the mesh
- Edge Bisect: The selected edge _e_ is split at its midpoint, and the new vertex _v_ at the split is returned. Note that the new vertex _v_ is not connected to the two opposite vertices as in Edge Split.
(e.g., subdivision or simplification). These commands can be applied by
pressing the appropriate sidebar button with a mesh selected. Note that in scenes with multiple meshes (e.g., those used by
### Global Mesh Processing
the path tracer), this command will be applied only to the selected mesh.
A number of commands can be used to create a more global change in the mesh
- Triangulate: Each polygon is split into triangles.
(e.g., subdivision or simplification). These commands can be applied by
pressing the appropriate sidebar button with a mesh selected. Note that in scenes with multiple meshes (e.g., those used by