пятница, 12 октября 2012 г.

Unwrap UVW и Real-World Scale текстуры в 3ds max

Предисловие

В одном из последних проектов на стену которая закручивается в улитку мне нужно было наложить бесшовную текстуру мозайки с известными размерами по длине и ширине. Приминение UVW Map не давало желаемого результата, так как на изгибе появлялся шов. Я решил воспользоваться UnwrapUVW и с неким удиивлением для себя обнаружил что этот модификатор не работает с Real-World Scale текстурами. Чтож, пришлось искать выход из данной ситуации...


Решение проблемы

Ниже на рисунке выделены полигоны на которые необходимо нанести мозайку.



Для решения задачи эти полигоны необходимо временно отделить от стен в отдельный объект. Для этого в режиме Editable Poly я использовал команду detach.


Выбрав только что отсойдененную часть стены я перешел в режим Isolated Selecton (Alt+Q), так как пока я будя работать только с ней. Присвоив этому объекту материал мозайки я попробовал применить модификатор UVW Map в режиме BOX и с использованием Real-World Map Size. Как видим на изгибе, где координаты по оси X переходят в ось Y у меня образовался шов, да и сама мозайка на изгибе растягивается. Особенно хорошо это видно если к объекту присвоить текстуру типа Checker.



Удалив модификатор UVW Map, и прежде чем присвоить модификатор Unwrap UVW, я добавил с левого края полигоны, общие размыры которых соответствуют размерам моей текстуры. В моем случае это 1500мм по ширине и 2700мм по высоте. Добавить эти полигоны можно при помощи Graphite tools или двигая ребра удерживая клавишу Shift. В итоге я получил вот такой результат к которому затем присвоил модификатор Unwrap UVW.
 



Затем я сделал развертку и при помощи команд Flatten mapping и Stitch склеил полигоны в одну ленту, и затем выбрал текстуру мозайки в списке как на рисунке ниже.




Затем при помощи инструмента Freeform Mode я пропорционально отмасштабировал всю ленту из полигонов так, чтобы добавленные с левого края  полигоны с размером 1500х2700 заполнили текстуру (на рисунке ниже я специально выделил только те полигоны которые должны заполнить текстуру. При работе с Freeform была выделена вся лента полигонов, для того чтобы пропорционально ее всю отмасштабировать). Обратите внимание на то, что в редакторе материалов у текстуры отключена галочка Use Real-World Scale. 


В итоге я получил бесшовную развертку и присвоенную текстуру с реальными размерами. Дальше дело осталось за малым. Конвертировать стену с мозайкой в Editable Poly, удалить добавленные полигоны, в режиме vertex с помощью команды Remove удалить одну лишнюю вершину, присоединить эту часть с мозайкой к старой стене и объеденить вершины. 

Текстура мозайки Relicas Flax 1500x2700








5 комментариев:

  1. есть другой способ. конкретно в вашем примере. лайн-свип-реал-ворд

    ОтветитьУдалить
    Ответы
    1. Абсолютно с вами согласен, но в случаях где невозможно развернуть по сплайну, этот метод может быть кстати.

      Удалить
  2. А зачем детачить, если можно выполнить развертку только выделенных поликов?

    ОтветитьУдалить
    Ответы
    1. К отсоединеным полигонам я добавил с левого края полигоны, общие размыры которых соответствуют размерам моей текстуры по высоте и ширине. Имено эти полики я использовал для масштабирования отсоединенной части. После я их удалил и приатачил все обратно.

      Удалить
    2. UVW Xform поверх Unwrap и нет проблем ;)

      Удалить