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

Rayfire voxels

Тема в разделе "Плагины", создана пользователем xiron 147376, 10 дек 2013.

  1. xiron 147376

    xiron 147376 Пользователь сайта

    С нами с:
    23.02.2013
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    Здравствуйте. Кто уже успел поработать с этим замечательным плагином и модификатором rayfire voxels в частности. Такой вопрос: я применяю к объекту (допустим, к сфере) модификатор rayfire voxels и получаю ту же сферу из кубиков. Но мне нужна только поверхность, каркас, а не сами кубики. Как мне её получить? Конвертирование в editable mesh/poly и использованием ignore backfacing не позволяет выделять только наружние элементы - выделяются также и внутренние. Неужели каждый ненужный элемент придётся выделять и удалять вручную? Помогите решить проблему.
     
  2. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Если поверхность объекта является сферой, тогда внутренние полигоны можно легко выделить с помощью модификатора Volume Select. Stack Selection Level =Face. Selection Type=Crossing. Volume=Sphere. Активируем гизмо и уменьшаем немного масштаб-scale.
    У модификатора Volume Select есть пункт Volume=Mesh Object. Может быть он подойдет.
    У вас объект имеет сложную форму? Предоставьте картинку.
     
  3. xiron 147376

    xiron 147376 Пользователь сайта

    С нами с:
    23.02.2013
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    [​IMG]
    Не совсем сложная, но скаллирование объекта в данном случае не помогает, т.к. имеется изогнутый колпак, который смещается.
     
  4. xiron 147376

    xiron 147376 Пользователь сайта

    С нами с:
    23.02.2013
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    Как бы быстро убрать эти внутренние грани, оставив внешний каркас?
    [​IMG]
     
  5. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Если смежные полигоны кубиков имеют одинаковые координаты и если у вас есть очень мощный компьютер, тогда попробуйте такой вариант:
    Конвертируем объект из кубиков в Editable Poly. Выделяем объект Editable Poly без модификаторов.
    Запускаем скрипт. В новом окне нажимаем кнопку Apply.
    Скрипт выделит внутренние грани. Вам нужно нажать клавишу Delete, чтобы убрать их.
    Код:
    rollout test "Test" (button apply "Apply"; on apply pressed do
    (if classof $==editable_poly do
    (progressStart "Selecting double polygons"
    n=polyOp.getNumFaces $;fa=#{};acc=0; can=0;
    for i=1 to n do (for j=i to n  where i!=j do
    (
    acc+=1;
    if progressUpdate ((200.0*acc)/(n*n))==false do (can=1;exit)
    f1=polyOp.getFaceCenter $ i; f2=polyOp.getFaceCenter $ j;
    if f1==f2 do fa+=#{i,j};
    )--for j=1 to n where i!=j do
    if can==1 do exit
    )--for i=1 to n do 
    progressEnd();polyOp.setFaceSelection $ fa; redrawViews()
    max modify mode; subObjectLevel=4
    )--if classof $==editable_mesh do
    )--on apply pressed do
    ); createdialog test
    Чтобы запустить скрипт нужно:
    1. Создаем текстовый файл (NotePad) и копируем код (текст) скрипта.
    2. Сохраняем текстовый файл с названием "test.ms"
    3. В главное меню MaxScript выбираем пункт Run Script. Выбираем файл "test.ms"
     
  6. xiron 147376

    xiron 147376 Пользователь сайта

    С нами с:
    23.02.2013
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    Спасибо за скрипт. Но, к сожалению, он не смог полностью решить проблему. Вот что получилось после удаления:
    [​IMG]
    Как видно, часть полигонов ещё осталась внутри. Можно ли как-то и их убрать?
     
  7. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Может быть координаты полигонов немного отличаются.
    Добавил порог (половину длины кубика).
    Используйте скрипт на объекте из сообщения 4:
    Код:
    rollout test "Test" (button apply "Apply"; on apply pressed do
    (if classof $==editable_poly do
    (progressStart "Selecting double polygons"
    n=polyOp.getNumFaces $;fa=#{};acc=0; can=0;
    ev=polyOp.getEdgeVerts $ 1;
    v1=polyOp.getVert $ ev[1];v2=polyOp.getVert $ ev[2];
    thresh=length(v2-v1)/2.0
    for i=1 to n do (for j=i to n  where i!=j do
    (
    acc+=1;
    if progressUpdate ((200.0*acc)/(n*n))==false do (can=1;exit)
    f1=polyOp.getFaceCenter $ i; f2=polyOp.getFaceCenter $ j;
    if (length(f1-f2)<=thresh) do fa+=#{i,j};
    )--for j=1 to n where i!=j do
    if can==1 do exit
    )--for i=1 to n do 
    progressEnd();polyOp.setFaceSelection $ fa; redrawViews()
    max modify mode; subObjectLevel=4
    )--if classof $==editable_mesh do
    )--on apply pressed do
    ); createdialog test
     
  8. xiron 147376

    xiron 147376 Пользователь сайта

    С нами с:
    23.02.2013
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    Видимо, проблема не в этом. Да, дублированные полигоны пропали, но внутренние остались. Обратите внимание на выделенные полигоны, которые не убираются скриптом:
    [​IMG]
    Иными словами, мне нужен исключительно внешний каркас модели, внутренние полигоны мешают.
     
  9. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Я думал, что все внутренние полигоны являются дублированными. Тогда будет очень сложно объяснить скрипту, что означаяет внутрений и внешний полигон.
     
  10. xiron 147376

    xiron 147376 Пользователь сайта

    С нами с:
    23.02.2013
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    2
    Тем не менее, модель, обработанную этим скриптом, гораздо легче почистить, нежели первоначальную. К сожалению, всё также не удаётся использовать ignore backfacing, grow selection. Может быть, есть ещё какие-нибудь способы? Быть может, зря я использовал столь продвинутый плагин для таких простых целей? Нет ли других бесплатных утилит, позволяющих получать воксельные каркасы из полигональных моделей?
     

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