4
$\begingroup$

I understand a normal to indicate the following information:

normals are intersections which are perpendicular to the plane of your face

I understand this to be a vector. And that a shader uses this information to calculate how to render something to the screen. For instance, whether this plane would reflect light to the camera or not, which of course depends on its orientation. (Correct me if I am wrong).

Then I read that a vertex, by itself, can have normal data. This I do not understand. Maybe I completely miss the point and context, but: How can a single vertex, not being part of a line (or a plane), indicate a normal? I mean, a single vertex is dimensionless right. Would its normal not always come from the planes surrounding it? So it is more of a derived value, instead of an intrinsic value of the vertex itself?

$\endgroup$
1
  • 2
    $\begingroup$ A vertex normal is just a vectorlike entity (that has its own transform rules), the answer you accepted is the common usecase. But nothing stops you from setting the normal in another manner. This has some useful uses. $\endgroup$
    – joojaa
    May 12, 2019 at 20:48

2 Answers 2

6
$\begingroup$

The vertex normals will be the average of the adjacent faces' normals.

Look at the lower-right corner of the ear in each of the two head images showing "face" vs "vertex" normals: enter image description here

Notice that the face normals from the image on the left, about the lower-right vertex, are moved and redrawn from that vertex on the image to the right.

I am not an expert in cgi but it is safe to assume that all normal vectors are the same size. A unit vector about the vertex can be found by adding the vectors tip-to-tail and dividing by the length. This unit vector would then be scaled up by whatever display length the user selected.

$\endgroup$
8
  • 3
    $\begingroup$ Just to mention that for a Point Cloud meshes normals will be directed from Origin point $\endgroup$
    – Serge L
    May 12, 2019 at 23:00
  • 1
    $\begingroup$ "The vertex normals will be the average of the adjacent faces' normals." - that is not entirely correct. They do not need to be average. Vertex normals can point in any direction. In fact normals being averaged by default cause problems in Blender and there are plugins like Y.A.V.N.E. to set normal directions by weighing face areas. Blender 2.80 already has some native tools to deal with this. See this there are some nice illustrations there showing some possible problems with vertex normals and solutions $\endgroup$ May 13, 2019 at 14:15
  • $\begingroup$ @SergeL What is a point cloud mesh? If it is a point cloud, then it shouldn't contain any edge and face. Is there another definition of it? $\endgroup$
    – HikariTW
    May 13, 2019 at 14:17
  • $\begingroup$ @Hikariztw I meant if Blender's mesh data is a point cloud. $\endgroup$
    – Serge L
    May 13, 2019 at 15:27
  • $\begingroup$ @Martin this is a very interesting article and is more insightful than my naive answer; Weighting normals by face face area and/or other criteria changes the way light interacts with the surface. Can we assume the normals are being adjusted when we switch from "flat" to "smooth" shading? $\endgroup$ May 14, 2019 at 2:42
3
$\begingroup$

Yes, you are right about a vertex being dimensionless and it should not have a normal. But when it comes to a polygon surface that is made of vertices, edges, and faces everything can have a normal. In geometry processing vertex normal it's highly useful for solving various problems. The normal of a vertex can be calculated in many different ways. The basic way of calculating the vertex normal is by averaging the normals of the connected faces to the vertex. Another way is by finding the principal curvature directions at a vertex based on its 1-ring neighbors. In a nutshell when a mesh is purely retained as a point cloud then it's normal will not make any sense. But if the point cloud has to be operated upon to find significant feature points then one will convert the point cloud the a surface and then calculate the normals from the surface point of view.

Regards,

0K

$\endgroup$
6
  • $\begingroup$ I fail to see the logic behind a statement that a vertex is dimensionless and therefore should not have a normal. It doesn't matter what a vertex is, a normal is just a vector that is attached to it, just some additional information added same as vertex color or UV coordinates, and if it is useful in any way it should be there in any context no matter how you look at it, however even if we look at it as a point without area it can still have a surface direction - in fact every single point on any surface must have a direction. $\endgroup$ May 13, 2019 at 14:31
  • $\begingroup$ @MartinZ not logic, by definition: a vertex is a point in space, A point has no dimensions. An line (edge) has 1, a face UV (area) two, etc. In as much as IIRC can set custom vertex normals, if not they are defined by surrounding geometry, as outlined in answers here. $\endgroup$
    – batFINGER
    May 13, 2019 at 14:52
  • $\begingroup$ Dimensions are not required to have a direction, are they? It doesn't matter much here it would just be incorrect reasoning. If I talk about a point on a surface I can define the direction of the surface at that point. If I then take that point out of the surface, I can still say that it has the same direction if I decide to attach that information to it. Just one kind of information pared with another. It can be anything. I don't understand the usage of the words 'should' or 'should not' in this context. Seems like unnecessary limitation, that's all. $\endgroup$ May 13, 2019 at 19:54
  • $\begingroup$ @MartinZ I agree with this answer, and I understand the perspective you sketch as well. A normal is just a vector. And attaching vector information to a vertex is no issue. The question on my end then is: what is the purpose of having a normal vector on a vertex that is not part of a line (let alone a surface)? This is not a question to argue, but I honestly do not know what the use case of this scenario is. One thing comes to mind is a point cloud. But what use does a normal vector on a vertex have in a point cloud? $\endgroup$ May 15, 2019 at 6:54
  • $\begingroup$ @MartynasŽiemys Yes, dimensions of a vector space do have directions and they are called as basis vectors. :-) $\endgroup$ Nov 15, 2022 at 12:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.