Создает ли УФ-картирование для некоторых точек 3D-модели несколько точек в 2D-проекции?

8

Предположим, что моя 3D-модель представляет собой пирамиду с прямоугольным основанием, и я исчисляю четыре угла основания с помощью 1, 2, 3, 4 и даю 5 верхней точке. Если я спроецирую эту пирамиду на 2D-объект в форме звезды, не будут ли все четыре внешние точки звезды связаны с точкой № 5 в 3D-модели?

Ручной обращается изображение квадратного основания пирамиды и его звездной формы 2D сети

Абдул Аль Хазред
источник
Кажется, вы думаете, что «спроектировать эту пирамиду в 2D-объект в форме звезды» - это определенная операция. Это не так, пока вы не сделаете это.
Джесси
2
Для того, чтобы отобразить UV таким образом, вы должны думать о (5) как о четырех разных вершинах, которые имеют одинаковые координаты XYZ.
Рассел Борогове

Ответы:

10

Как это обычно определяется, каждая вершина в сетке соответствует UV-координате, и в каждой вершине должна быть ровно одна такая координата, потому что именно так рендер будет извлекать тексели. Таким образом, невозможно иметь несколько UV-координат для одной вершины, если у вас нет нескольких параметризаций для вашей сетки.

Однако сетки часто разбиваются во время параметризации, и одни и те же вершины могут оказаться в нескольких местах, как в вашем примере. Чаще всего эти вершины просто реплицируются при загрузке / рендеринге, поэтому отображение вершин в uv остается 1-к-1 или многими-к-1. Таким образом, рендер будет интерпретировать ваш пример следующим образом (v5 разделен на 4):

введите описание изображения здесь

ap_
источник
4

Мне просто нужно добавить немного к ответу ap_.
Конечно, вы можете иметь несколько UV для одной вершины, это называется UV-слоями. Именно так двигатели отображали карты освещения и карты альбедо одновременно с появлением карт освещения. (возможно, движок землетрясения в 1996 году?)
Вы можете иметь больше УФ-слоев, если хотите сделать мультитекстурирование, например, для ландшафта, карты освещения, большого альбедо, детали альбедо, карты нормалей ...

К сожалению, растеризатор никогда не выберет УФ-слой в зависимости от примитива, который он рендерит. Такой рендерер мог бы быть сделан с дополнительным индексным буфером (примитивом к буферу отображения UV-слоя), но никакие графические карты и никакой графический API не поддерживают это. В любом случае, это ненужное нарушение KISS.

Таким образом, в этом случае нужно разделить вершину пирамиды на 4 отдельные вершины во время разработки. Во всяком случае, первая причина этого - не распаковка ультрафиолета, а в основном нормальное определение Если вам нужны острые края, вам нужно нарушить затенение, поэтому вам нужно иметь разные нормали, они тоже, как и UV, обычно определяются 1-1 в потоке вершин.

Последнее предложение, может быть, вы действительно не хотите использовать эту распаковку, я бы предпочел это:

введите описание изображения здесь

Таким образом, у вас есть бесшовная непрерывность для фильтрации и выглядит по краям и на вершине.

v.oddou
источник