Предположим, что моя 3D-модель представляет собой пирамиду с прямоугольным основанием, и я исчисляю четыре угла основания с помощью 1, 2, 3, 4 и даю 5 верхней точке. Если я спроецирую эту пирамиду на 2D-объект в форме звезды, не будут ли все четыре внешние точки звезды связаны с точкой № 5 в 3D-модели?
uv-mapping
Абдул Аль Хазред
источник
источник
Ответы:
Как это обычно определяется, каждая вершина в сетке соответствует UV-координате, и в каждой вершине должна быть ровно одна такая координата, потому что именно так рендер будет извлекать тексели. Таким образом, невозможно иметь несколько UV-координат для одной вершины, если у вас нет нескольких параметризаций для вашей сетки.
Однако сетки часто разбиваются во время параметризации, и одни и те же вершины могут оказаться в нескольких местах, как в вашем примере. Чаще всего эти вершины просто реплицируются при загрузке / рендеринге, поэтому отображение вершин в uv остается 1-к-1 или многими-к-1. Таким образом, рендер будет интерпретировать ваш пример следующим образом (v5 разделен на 4):
источник
Мне просто нужно добавить немного к ответу ap_.
Конечно, вы можете иметь несколько UV для одной вершины, это называется UV-слоями. Именно так двигатели отображали карты освещения и карты альбедо одновременно с появлением карт освещения. (возможно, движок землетрясения в 1996 году?)
Вы можете иметь больше УФ-слоев, если хотите сделать мультитекстурирование, например, для ландшафта, карты освещения, большого альбедо, детали альбедо, карты нормалей ...
К сожалению, растеризатор никогда не выберет УФ-слой в зависимости от примитива, который он рендерит. Такой рендерер мог бы быть сделан с дополнительным индексным буфером (примитивом к буферу отображения UV-слоя), но никакие графические карты и никакой графический API не поддерживают это. В любом случае, это ненужное нарушение KISS.
Таким образом, в этом случае нужно разделить вершину пирамиды на 4 отдельные вершины во время разработки. Во всяком случае, первая причина этого - не распаковка ультрафиолета, а в основном нормальное определение Если вам нужны острые края, вам нужно нарушить затенение, поэтому вам нужно иметь разные нормали, они тоже, как и UV, обычно определяются 1-1 в потоке вершин.
Последнее предложение, может быть, вы действительно не хотите использовать эту распаковку, я бы предпочел это:
Таким образом, у вас есть бесшовная непрерывность для фильтрации и выглядит по краям и на вершине.
источник