8
$\begingroup$

Assume my 3D model is a pyramid with a rectangular base and I numerate four corners of the base with 1, 2, 3, 4 and give 5 to the top point. If I project this pyramid into a 2D star-shaped object, would not all four outer points of the star be associated with the point number 5 in the 3D model?

Hand drawn image of a square base pyramid and its star shaped 2D net

$\endgroup$
  • $\begingroup$ It seems that you think "project this pyramid into a 2D star-shaped object" is a defined operation. It is not, until you do so. $\endgroup$ – Jessy Sep 13 '15 at 16:47
  • 2
    $\begingroup$ In order to UV map in that way, you must think of (5) as four different vertices that happen to have the same XYZ coordinates. $\endgroup$ – Russell Borogove Sep 13 '15 at 23:43
10
$\begingroup$

The way it is usually defined, every vertex in a mesh corresponds to a UV-coordinate, and there must be exactly one such coordinate per vertex, because that is how a renderer would fetch texels. So it is impossible to have multiple UV coordinates for a single vertex unless you have multiple parameterizations for your mesh.

However, meshes often get split up during parameterizations and the same vertices can end up in multiple locations, just like in your example. Most often, those vertices are simply replicated while loading/rendering so the vertex-to-uv mapping remains 1-to-1 or many-to-1. So a renderer will likely interpret your example as the following (v5 is split into 4):

enter image description here

$\endgroup$
4
$\begingroup$

I just need to add a bit to ap_'s answer.
Of course you can have multiple UV for one vertex, this is called UV layers. This is how engines have displayed lightmaps and albedo maps on the same time, since the advent of lightmaps. (quake engine in 1996 maybe ?)
You can have more UV layers, if you want to do multitexturing like for terrains, lightmap, albedo large, albedo detail, normal map...

Unfortunately, the rasterizer will never chose a UV layer depending on the primitive it is rendering. Such a renderer could be done with a supplementary index buffer (primitive to UV layer mapping buffer) but no graphic cards and no graphics API supports this. This is an unnecessary violation to KISS anyway.

So, what one would do in this case is to separate your pyramid apex into 4 distinct vertices during design time. Anyway the first reason for this, not being UV unwrapping but mostly normal definition. If you want sharp edges, you need to break the shading, therefore you need to have different normals, they too, like UV, are usually defined 1-1 in the vertex stream.

Final suggestion, maybe you dont really want to use this unwrapping, I would rather suggest this:

enter image description here

This way you have seamless continuity for filtering and looks on the edges and on the apex.

$\endgroup$

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.