Three Mesh
The node that actually puts your object in the scene
- geometry
- material
- object
Every other node in the Three family is an ingredient. Geometry nodes hand you a shape, material nodes hand you a surface, lights hand you photons. None of that is in the scene until a Three Mesh wraps one geometry and one material together into a drawable object. It's the node that turns "I have a sphere and a color" into "there is a red ball sitting in front of my camera."
What it does
Straightforward on paper: take a THREE_GEOMETRY from any Three geometry node (sphere, plane, torus, a loaded model's pieces) and a THREE_MATERIAL from any Three material node, and it produces an object you wire into a Three Group, Three Transform Object, or straight into Three Scene's root. The name field is a label carried into the scene graph - "floor," "hero," whatever - which matters more than it looks, because custom code (from Three Script Module or Three Custom Update) finds objects by name.
The inputs that matter
- geometry and material - the two ingredients above.
- name - the label in the scene graph.
- cast_shadow - whether it throws a shadow. Needs shadows on in Three App and on the light.
- receive_shadow - whether shadows can land on it. Set this false for a glowing sign or a skybox that shouldn't go dark.
The mechanism worth knowing
Here's the detail that explains a lot of this pack's design: the graph doesn't render anything itself. Every Three node emits a small JSON descriptor describing what it wants, and the browser builds real three.js objects from those descriptors when the scene runs. Because each descriptor gets an id hashed from its contents, two identical descriptors share one browser-side resource.
What that means in practice is on the Mesh node's own tooltip: a geometry and a material can each feed several meshes, and the browser builds one copy of each - so a hundred meshes sharing a material cost one material. You can tile a floor with one plane geometry and one material across many Three Mesh nodes and the render cost barely moves. Don't duplicate work when you can fan it out.
Typical wiring
Sphere geometry + Three Standard Material → Three Mesh → Three Group, with a Three Light alongside it in the same group, group into Three Scene root, scene plus a camera into Three App, and Three App into Three Render. If your object doesn't show up, walk that chain - nine times out of ten a mesh is invisible because its material is black (no light), because it's not actually wired into the scene root, or because the camera is pointing elsewhere.
Install
Three Mesh ships with WAS Node Suite v3. In ComfyUI Manager, search WAS Node Suite v3 and install, or:
cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/was-node-suite-comfyui.git
Restart after. Requires ComfyUI 0.14.0+ and Python 3.10+, no extra packages for this family. If the Three nodes aren't in the Add Node menu, set features.threejs: true in <ComfyUI user dir>/was-node-suite/config.yaml and restart - it defaults on in current releases, but older configs can have it off.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| geometry | THREE_GEOMETRY | The shape to draw, from any of the Three geometry nodes. | |
| material | THREE_MATERIAL | The surface to draw it with, from any of the Three material nodes. | |
| name | STRING | Mesh | Label carried into the scene graph, such as 'floor' or 'hero'. Custom code finds an object by it. |
| cast_shadow | BOOLEAN | true | `true` throws a shadow, `false` does not. Needs shadows on in Three App and on the light too. |
| receive_shadow | BOOLEAN | true | `true` lets shadows land on this mesh; `false` keeps it unshadowed, as for a glowing sign or a skybox. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| object | THREE_OBJECT | The mesh, for Three Group, Three Transform Object or Three Scene. |