1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Массовое совмещение полигонов в unwrap

Тема в разделе "Моделирование", создана пользователем Олег Верушкин, 4 дек 2014.

Модераторы: He77ga, Артер
  1. Олег Верушкин

    Олег Верушкин Активный участник

    С нами с:
    03.03.2013
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    5
    Бывают такие ситуации, когда в unwrap работаешь над мелкими конструкциями, для которых предполагается нанести потом одну и ту же текстуру. Пример на картинке. [​IMG]
    Здесь требуется совместить все полигоны в одну точку, чтоб он выглядел просто как один единственный прямоугольник. Это ещё часть изображения. Там таких ещё десятки! Возможно ли это как-то сделать быстро? Потому что совмещать их вручную, да ещё чтоб было точно - просто ад.
     
  2. ^_^

    ^_^ Знаток

    С нами с:
    07.01.2014
    Сообщения:
    524
    Симпатии:
    44
    Баллы:
    46
    в таких случаях проще делать наоборот - создаёшь модель, делаешь юви, и размножаешь модели (юви будут совпадать)

    В проге UVLayout есть возможность, в 3д максе по моему нет.

    Ну почему, быстренько подвинул все в одно место, чтоб приблизительно совпадало (с небольшой погрешностью), потом делаешь для каждой точки align verticaly и align horizontaly в quick transform в едиторе. В случае прямоугольных деталей (как у тебя) можно выделять несколько горизонтальных точек жать сравнять по вертикале и наоборот.
     
  3. diwian diwian

    diwian diwian Мастер

    С нами с:
    05.06.2010
    Сообщения:
    4.742
    Симпатии:
    74
    Баллы:
    83
    Если я правильно понял, необходим "Normal Mapping" -например "Box Mapping" или "Diamond Mapping"(или другой) в зависимости от требуемого результата.
     

    Вложения:

    • Image 1.JPEG
      Image 1.JPEG
      Размер файла:
      1,1 МБ
      Просмотров:
      154
    • Image 2.JPEG
      Image 2.JPEG
      Размер файла:
      701,4 КБ
      Просмотров:
      144
  4. Олег Верушкин

    Олег Верушкин Активный участник

    С нами с:
    03.03.2013
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    5
    Попробую!
     
  5. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Объясните подробнее как вы вручную делаете совмещение полигонов.
    Попробуйте такой вариант. Пример:
    Выделяем один объект с модификатором Unwrap UVW и в окне Edit UVWs выделяем нужные полигоны.
    Запускаем скрипт. В новом окне нажимаем кнопку Align.

    Код:
    rollout test "Align"
    (
        radiobuttons rb_size "Size" labels:#("First", "Normalize") pos: [5,5]
        radiobuttons rb_pos "Position" labels:#("Selection center", "Editor center") pos:[5,55]
        button btn_align "Align"
        on btn_align pressed do
        (
            undo on
            (
                m=modpanel.getcurrentobject()
                if classof m==Unwrap_UVW then
                    (
                        m.edit();
                        m.setTVSubObjectMode 3
                        m.selectElement()
                        sf_ba=m.getSelectedFaces();
                        sf_ba_init=m.getSelectedFaces();
                        uv_size_x=1; uv_size_y=1; cluster_first=1; uv_pos=m.getSelCenter()
                        for i=1 to 100 do
                            (
                                minx=1e9;miny=1e9;maxx=-1e9;maxy=-1e9
                                if sf_ba.numberset>0 then
                                    (
                                        sf_a=sf_ba as array
                                        m.selectFaces #{sf_a[1]}
                                        m.setTVSubObjectMode 3; m.selectElement()
                                        sf_temp=m.getSelectedFaces()
                                        m.setTVSubObjectMode 1; m.GetSelectionFromFace()
                                        sv=m.getSelectedVertices() as array
                                        for v in sv do
                                            (
                                                c=m.getVertexPosition slidertime v
                                                if c[1]<minx then minx=c[1]; if c[1]>maxx then maxx=c[1]
                                                if c[2]<miny then miny=c[2]; if c[2]>maxy then maxy=c[2]
                                            )
                                        cluster_size_x=maxx-minx; cluster_size_y=maxy-miny
                                        if cluster_first==1 and rb_size.state==1 then
                                            (uv_size_x=cluster_size_x; uv_size_y=cluster_size_y;cluster_first=0)
                                        m.scaleSelectedXY (1.0*uv_size_x/cluster_size_x) (1.0*uv_size_y/cluster_size_y) [0,0,0]
                                        if rb_pos.state==2 then uv_pos=0.5
                                        m.moveSelected (-m.getSelCenter()+uv_pos)
                                        sf_ba-=sf_temp
                                    )--if sf_ba.numberset>0 then
                            )--or i=1 to 100 do
                        m.setTVSubObjectMode 3; m.selectFaces sf_ba_init
                    )
            )--undo on
        )--    on btn_align pressed do
    ); createdialog test 110 135 style:#(#style_minimizebox,#style_titlebar,#style_sysmenu)
    Чтобы запустить скрипт нужно:
    1. Создаем текстовый файл (NotePad) и копируем код (текст) скрипта.
    2. Сохраняем текстовый файл с названием "test.ms"
    3. В главное меню MaxScript выбираем пункт Run Script. Выбираем файл "test.ms"
     
    Sinopsys и ^_^ нравится это.
  6. INCUS

    INCUS Знаток

    С нами с:
    03.08.2010
    Сообщения:
    857
    Симпатии:
    30
    Баллы:
    29
    С разрешения автора темы, напишу здесь, потому как сейчас буду заниматься развёрткой похожих объектов. Хочу поговорить про Stitch. Как известно это работает только с одним выделенным ребром.Если выделить сразу несколько, то Stitсh всё равно притянет нужный кластер только к одному из рёбер. Так вот вопрос, можно ли как-то реализовать в Максе массовый Stitch ?
    Например, есть цветок ромашка. Все лепестки в редакторе развёртки расположены по отдельности от круглой сердцевины. Возможно ли, что бы я выделив Border кластера сердцевины(я уже нашёл возможность такой команды, клавиша 8), и нажать "СуперПупер Stitch", который притянет к выделенным рёбрам сразу все лепестки ромашки?
     
  7. Олег Верушкин

    Олег Верушкин Активный участник

    С нами с:
    03.03.2013
    Сообщения:
    50
    Симпатии:
    0
    Баллы:
    5
    igorznag
    Спасибо, то, что надо!
     
  8. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Можно выделить полигоны-face вместо Border кластера сердцевины?
    Если да, тогда "общие" ребра-edge сердцевины и лепестков имеют одинаковую длину?
    Если да, тогда попробуйте такой вариант. Пример:
    Выделяем один объект с модификатором Unwrap UVW.
    В окне Edit UVWs выделяем полигоны сердцевины.
    Запускаем скрипт. В новом окне нажимаем кнопку Stitch.

    Код:
    try(destroyDialog igorznag_stitch)catch()
    rollout igorznag_stitch "Stitch"
    (
    button btn_stitch "Stitch"; width:70 on btn_stitch pressed do
    (
    if subobjectlevel==3 then
    (
    co=modpanel.getCurrentObject()
    if classof co==Unwrap_UVW then
    (
    subobjectlevel=1; co.faceToVertSelect()
    for i=1 to ((co.getSelectedVertices()).numberset) do
    (co.faceToVertSelect(); co.stitchVerts true 0)
    subobjectlevel=3
    )--if classof co==Unwrap_UVW then
    )--if subobjectlevel==3 then
    )-- on btn_stitch pressed do
    ); createdialog igorznag_stitch 80 30
     
    Sinopsys нравится это.
  9. INCUS

    INCUS Знаток

    С нами с:
    03.08.2010
    Сообщения:
    857
    Симпатии:
    30
    Баллы:
    29
    Игорь.
    Очень даже не плохо работает.
    Спасибо.
    1) Если ещё допилишь Undo, что бы не нужно было быть таким настойчивым для полной отмены операции.
    2) Если каждый притягиваемый "лепесток" автоматом будет масштабироваться соответственно ребру, выделенного полигона, которое притягивает лепесток.
    3) То !!! Закину денег. Кошелёк я твой знаю, от меня не спрячешься)))
     
  10. ^_^

    ^_^ Знаток

    С нами с:
    07.01.2014
    Сообщения:
    524
    Симпатии:
    44
    Баллы:
    46
    ух ты какая движуха пошла!
     
  11. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Теперь Undo работает. Добавил Scale. Время вычислений увеличилось.
    Хотел добавить другие возможности, но Unwrap как всегда тормозит.

    Если работает неплохо, тогда попробуйте очередной вариант скрипта:
    Выделяем один объект с модификатором Unwrap UVW.
    В окне Edit UVWs выделяем Edge-Border сердцевины.
    Запускаем скрипт. В новом окне нажимаем кнопку Stitch.
    Для вас не подходит Multi Stitch в скрипте PolyUnwrapper или опять проблемы с процедурой покупки?
     

    Вложения:

    • stitch.ms.txt
      Размер файла:
      11,2 КБ
      Просмотров:
      104
  12. INCUS

    INCUS Знаток

    С нами с:
    03.08.2010
    Сообщения:
    857
    Симпатии:
    30
    Баллы:
    29
    Работает нормально. Теперь у меня более гибкий инструмент. Спасибо.
    Проблем с процедурами тоже нет.
    Только что отправил деньго. Ура.
     
  13. ^_^

    ^_^ Знаток

    С нами с:
    07.01.2014
    Сообщения:
    524
    Симпатии:
    44
    Баллы:
    46
    Сколько денег если не секрет?
    Интересно как цениться написание скриптов.
     
Модераторы: He77ga, Артер

Поделиться этой страницей