Render.ru

Rayfire voxels

xiron 147376

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

igorznag

Мастер
Рейтинг
103
#2
Если поверхность объекта является сферой, тогда внутренние полигоны можно легко выделить с помощью модификатора Volume Select. Stack Selection Level =Face. Selection Type=Crossing. Volume=Sphere. Активируем гизмо и уменьшаем немного масштаб-scale.
У модификатора Volume Select есть пункт Volume=Mesh Object. Может быть он подойдет.
У вас объект имеет сложную форму? Предоставьте картинку.
 

xiron 147376

Пользователь сайта
Рейтинг
2
#3
У модификатора Volume Select есть пункт Volume=Mesh Object. Может быть он подойдет.
У вас объект имеет сложную форму? Предоставьте картинку.

Не совсем сложная, но скаллирование объекта в данном случае не помогает, т.к. имеется изогнутый колпак, который смещается.
 

igorznag

Мастер
Рейтинг
103
#5
Как бы быстро убрать эти внутренние грани, оставив внешний каркас?
Если смежные полигоны кубиков имеют одинаковые координаты и если у вас есть очень мощный компьютер, тогда попробуйте такой вариант:
Конвертируем объект из кубиков в 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"
 

xiron 147376

Пользователь сайта
Рейтинг
2
#6
Скрипт выделит внутренние грани. Вам нужно нажать клавишу Delete, чтобы убрать их.
Спасибо за скрипт. Но, к сожалению, он не смог полностью решить проблему. Вот что получилось после удаления:

Как видно, часть полигонов ещё осталась внутри. Можно ли как-то и их убрать?
 

igorznag

Мастер
Рейтинг
103
#7
Может быть координаты полигонов немного отличаются.
Добавил порог (половину длины кубика).
Используйте скрипт на объекте из сообщения 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
 

xiron 147376

Пользователь сайта
Рейтинг
2
#8
Может быть координаты полигонов немного отличаются.
Видимо, проблема не в этом. Да, дублированные полигоны пропали, но внутренние остались. Обратите внимание на выделенные полигоны, которые не убираются скриптом:

Иными словами, мне нужен исключительно внешний каркас модели, внутренние полигоны мешают.
 

igorznag

Мастер
Рейтинг
103
#9
Да, дублированные полигоны пропали, но внутренние остались.
Я думал, что все внутренние полигоны являются дублированными. Тогда будет очень сложно объяснить скрипту, что означаяет внутрений и внешний полигон.
 

xiron 147376

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