7
$\begingroup$

There are some geometry nodes like the Sample Index Node that permit the Domain Attribute to be Face Corner.

What exactly is the face corner? Is this term specific to geometry node (never heard of it outside the geo node context)? How is the face corner different than a vertex (after all vertex is at the face corner)?

I learn that UV Unwrap always requires the domain to be set to Face Corner. Why is it so?

According to the Blender Documentation:

Face Corner domain attributes are associated with the corners of the faces of the mesh. An example is a UV map attribute.

But this doesn't seem to answer these questions. So asking here.

$\endgroup$

4 Answers 4

11
$\begingroup$

A face corner is a per-vertex, per-face attribute. The traditional examples of this are split normals, face-corner vertex color, and UV.

enter image description here

Here, I'm demonstrating face-corner vertex color. The top face is red, but the other faces are black. Each corner has its own vertex color: the top face's corners are red, while the other corners are black.

What about if this vertex color's domain was vertex (point) rather than face color? Our vertex color would interpolate over the other faces, because rather than there being 3 different face-corner vertex colors for each vertex, there would only be a single vertex color for all of that vertex's face corners:

enter image description here

The vertex data here interpolates across all the faces, rather than just the top face, because the data doesn't know about faces like face-corner data does.

Split custom normals are similar, because there is a different normal for each vertex, for each face of that vertex. Likewise, UV is often similar, because of seams: one face-corner can have one UV coordinate, while a different face-corner, that is still owned by the same vertex, can have a different coordinate.

enter image description here

The selected vertex here has two different UV coordinates, one for each corner. Each UV coordinate will be interpolated across its respective face, but the other face won't know or care about this face's UV.

Of course, in geometry nodes, face-corners don't have to be any of these three, common examples of face-corner data; they can represent any kind of data you'd like. Any time you want data to interpolate across a face but be discontinuous across an edge, you're looking for face-corner data.

$\endgroup$
7
$\begingroup$

I'll expand a bit on the other answer which is already quite complete to add a slightly different point of view.

A face corner associates a vertex and a face :

  • A vertex has as many corners as it has faces associated with it.
  • A face has as many corners as it has vertices associated with it.

Let's say you have a cube and want to color the top, right and forward face in different colors using vertex colors. Using the face corners domain, you can associate 3 different colors to a single vertex.

On the image below you can see

  • $V$ the vertex
  • $F1, F2, F3$ the three faces
  • $Fc1, Fc2, Fc3$ the three face corners associating the three faces and the vertex.

enter image description here

$\endgroup$
4
$\begingroup$

Create two color attributes, one in Vertex domain, and one in Face Corner domain:

Then go to Vertex Paint mode, and color two triangles for both attributes this way:

(red numbers are vertex indices, green numbers are face indices, and white numbers are corner indices)

Index Col1 (Vertex) Col2 (Face Corner)
0 $\bbox[#FFFF00, 7px]{\color{#555500}{\text{yellow}}}$ $\bbox[#FFFF00, 7px]{\color{#555500}{\text{yellow}}}$
1 $\bbox[#FF0000, 7px]{\color{#440000}{\text{red}}}$ $\bbox[#FF0000, 7px]{\color{#440000}{\text{red}}}$
2 $\bbox[#FF0000, 7px]{\color{#440000}{\text{red}}}$ $\bbox[#FF0000, 7px]{\color{#440000}{\text{red}}}$
3 $\bbox[#00FFFF, 7px]{\color{#005555}{\text{cyan}}}$ $\bbox[#00FFFF, 7px]{\color{#005555}{\text{cyan}}}$
4 $\bbox[#3333FF, 7px]{\color{#000066}{\text{blue}}}$ $\bbox[#3333FF, 7px]{\color{#000066}{\text{blue}}}$
5 $\bbox[#3333FF, 7px]{\color{#000066}{\text{blue}}}$ $\bbox[#3333FF, 7px]{\color{#000066}{\text{blue}}}$

You can also see how each vertex is related to exactly one face (only one face is built using this vertex), and each face corner is related to exactly one face. Also vertices and corners relate one-to-one.

Now â­¾ Tab in Edit Mode, select vertices 0 & 3, M, A merge them to one, to create an hourglass shape, two triangles sharing a vertex:

Col1 – vertex domain:

Col2 – face corner domain:

Even though you merged 2 vertices into 1, and so there's 5 vertices now, there's still 6 face corners. The vertex 0 is now related to two faces (two faces are built using this vertex), but face corner 0 is still only related to face 0, and face corner 3 is still only related to face 1. This is because a face corner is always related to only one vertex and only one face. In Python terms, you could think of face corners as (face_i, vert_i) tuples, except face corners actually have separate indexing (which I show by numbering them on the pictures).

Since there's only room for one color under the 0 position, on merging, the vertex has to choose one color, either yellow or cyan – and it chooses yellow. However since there's still two face corners, no color information was lost in the face corner domain.

This makes vertex domain good for storing smooth gradients going across faces, and face corner domain good for storing sudden changes of color on face boundaries.

Index Col1 (Vertex) Col2 (Face Corner)
0 $\bbox[#FFFF00, 7px]{\color{#555500}{\text{yellow}}}$ $\bbox[#FFFF00, 7px]{\color{#555500}{\text{yellow}}}$
1 $\bbox[#FF0000, 7px]{\color{#440000}{\text{red}}}$ $\bbox[#FF0000, 7px]{\color{#440000}{\text{red}}}$
2 $\bbox[#FF0000, 7px]{\color{#440000}{\text{red}}}$ $\bbox[#FF0000, 7px]{\color{#440000}{\text{red}}}$
3 $\bbox[#3333FF, 7px]{\color{#000066}{\text{blue}}}$ $\bbox[#00FFFF, 7px]{\color{#005555}{\text{cyan}}}$
4 $\bbox[#3333FF, 7px]{\color{#000066}{\text{blue}}}$ $\bbox[#3333FF, 7px]{\color{#000066}{\text{blue}}}$
5 💀 this vertex no longer exists $\bbox[#3333FF, 7px]{\color{#000066}{\text{blue}}}$
$\endgroup$
1
$\begingroup$

The Corners are vertex to faces.
When we say a single rectangular face, it has 4 corners and 4 vertices, and they are in the same XYZ location respectively.
But when we say a poly-meshes like a cube, it has 8 vertices, but 24 corners. Even though every face has 4 vertex (corners), all the vertex in the same locations are merged into one vertice.

The vertex in Blender are the points in Houdini.
The Face Corners in Blender are vertex in Houdini.

Please correct me if I am wrong.

$\endgroup$
2
  • 1
    $\begingroup$ Semantically at least from a bit of gathering on my search engine, a point is an infinitesimally small object defined by a single location in 3D or 2D space (think a vector like $1,1,1$), so it isn't tied to a singular form of geometry. According to the most sources, a vertex is "a point where two or more line segments meet". Here there is a possible interpretation. If you consider that a vertex is a point where exactly two segements meet, then Houdini is right, it is a corner. If you consider, like Blender, that a vertex is a point where 0, 1 or more segments meet, then Blender is right. $\endgroup$
    – Gorgious
    Jan 17, 2023 at 15:24
  • 1
    $\begingroup$ TLDR : Yes, your understanding is right (AFAIK since I don't use Houdini), and the seemingly weird difference between the two notations is because of a possible interpretation of the definition of a point and a vertex. But I have to admit that Houdini's interpretation is closer to the definition of a vertex. Citing Wikipedia, where this definition's sources are quoted "As a consequence of this definition, the point where two lines meet to form an angle and the corners of polygons and polyhedra are vertices". $\endgroup$
    – Gorgious
    Jan 17, 2023 at 15:27

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .