Автоматическое удаление лишних вертексов

Всем привет! Без долгих разъяснений - сразу к делу. Сегодня весьма неожиданно даже для меня самого решилась одна долго мучающая меня проблема. Не слишком часто, но все же иногда мне приходится в своей работе в 3ds MAX использовать такой замечательный компаунд-объект как ShapеMerge. С его помощью можно, например, быстро вырезать отверстие в поверхности. Однако, ShapeMerge имеет один досадный недостаток: после проецирования сплайна на поверхность остается большое количество лишних вертексов:

744938fae84e8754f413a60c72ec55ec.jpg

Так происходит потому что любой полигон, состоящий из любого количества вертексов и ребер на самом деле состоит из треугольников: 

124554fe9181bcd30087efcd12809fee.jpg

При проецировании сплайна, кроме вертексов, которые определяют форму будущего отверстия, создаются еще и вертексы, которые попадают на места пересечения проекции сплайна и скрытых ребер (те что отображаются пунктиром). Насколько я понимаю, процесс проецирования идет от от вертекса сплайна к вертексу,и каждый раз, когда на поверхности меша режется новое ребро, появляются и новые скрытые ребра, а значит и новые лишние точки.Как бы то ни было, меня интересует, как можно убрать все лишнее? Раньше я делал это вручную с помощью кнопки Remove в режиме вертексов. Это несложно, но только нужно следить за тем чтобы удалять именно лишние вертексы а не формообразующие. В некоторых местах, там где кривизна сплайна небольшая, сделать такое различие бывает трудно. Если сплайн сложной формы, и достаточно протяженный (например, нужно вырезать дорогу со множеством поворотов в рельефе) то такое ручное удаление лишних вертексов может занять часы. И вот сегодня нашлось автоматизированное решение такой задачи, реализованное в виде макс скрипта. Суть его состоит в том, чтобы найти вертексы, отвечающие двум условиям: 1) от них должно отходить ровно два ребра2) эти два ребра должны лежать на одной прямой. Я не очень хорошо знаю макс скрипт, поэтому я полез в справку, и что же я там нашел? Именно, я нашел практически готовое решение в одном из примеров. Странно, что об этом мало пишут на форумах. Скрипт доступен по ссылке: 

https://yadi.sk/d/Mk9DuesntibYQ 

Достаточно скопировать его в окно редактора скриптов, выделить нужный объект в сцене и нажать Ctrl+E. Не знаю, насколько это важно, но в моих примерах подопытный объект был типа Editable Poly. Вот результат его выполнения: 

dee2e8cba6464070cf1a06e4168214be.jpg

Как видно, остались только формообразующие вертексы. Вот пример посложнее(обратите внимание на прямые участки букв. Лишние вертексы засели в основном там):

7ad526013b4aab255644f1cd25f7a47a.jpg

Следует указать на одну особенность - удаление вертекса происходит не только когда его соседи с ним лежат строго на одной прямой, но и когда угол между отходящими от него ребрами незначителен (в данном случае 0,5 градуса), но не равен нулю. Это сделано для того, чтобы учесть ошибки округления при расчете. Если положить угол строго равным нулю, некоторые лишние вертексы не будут удалены. Если повысить этот порог еще выше, то можно удалить и некоторые формообразующие вертексы, и тем самым контролируемо упростить форму выреза - участки с малой кривизной станут прямыми участками. Чтобы отрегулировать этот порог, просто откройте скрипт в редакторе скриптов и исправьте значение в строчке:   

if angle < 0.5 do

Вообще-то следовало сделать формочку с кнопкой, но сейчас полвторого ночи и, как я уже говорил, я не очень силен в скриптах. На этом все, буду рад, если кому пригодится. Простите за слишком топорные картинки))

Комментарии (43)

+6
sen-say
Человечище!!!!)
+14
limonadinis
http://www.shiva3d.net/maxscripts/vertex-cleaner-maxscript/ ;]
0
sergar
давно пользуюсь, никогда не подводил!
+1
Origin
Спасибо. Этот понравился.
И как обычно в комментах много полезной информации))
0
tameplan
Спасибо, отличный скрипт!
+36
Adimus
EditPoly - Graphite Tool - Polygon modeling - Generate Topology: в меню нажимаем ScrapVerts
Вуаля!
+1
lok
Я тоже только так и пользуюсь, зачем скрипт ))) ?
+1
julija85
А как в ScrapVerts сохранить формообразующие вершины, если от них отходит только 2 ребра?
+2
Bestviz
У меня не получилось. Форма превратилась в квадрат вместо круга.
0
AzatHai
круто!
+3
grdesigner
Это конечно здорово, что автор не ноя на форуме сам нашел решение.

Тем не менее когда меня посещают мысли о том, что есть рутинные неудобства, я сразу вспоминаю, что пакету 3д макс более 20 лет. За это время уверен кого-то с навыками программирования точно раздражала такая же проблема. И с большой долей вероятности есть скрипт. А скрипты мы ищем на scriptspot'е.

Дополнительно желательно читать новости из мира 3д графики, на том же евермоушене проскальзывает реклама скриптов. Debris Maker оттуда взял, несколько раз пригодился. И т.д.

+ Graphite Modeling Tools
+ Rappatools
0
ice_juice
26 лет
0
Skap
Комментарий удален
+1
reightar
blender x, l =)
+1
Romaneus
Автор, любой скрипт основывается на внутреннем инструментарии (на уже имеющихся возможностях) программы.
Думаю для большинства Америку Вы не открыли)
А то, что это самое повальное большинство до сих пор удаляет лишние вершины в ручную, это проблемы большинства))).
Я на днях в одной из веток блогов уже высказывался, что ручное удаление подобных подобъектов, это моветон. https://s32.postimg.org/g5yqzjl8l/454545454545.jpg 
+4
Maketer
На вашей картинке видно, что будут удалены формообразующие вертексы, которые на изломах. Автор же нашёл решение их оставлять, удалять только те, которые лежат на прямой. И замечание про скрипты - это чтобы народ скриптами не пользовался?))
+3
Maketer
Прежде чем комментировать и предлагать всякие scrapVerts рекомендую прочитать внимательно условия, которые автор написал:" найти вертексы, отвечающие двум условиям: 1) от них должно отходить ровно два ребра 2) эти два ребра должны лежать на одной прямой."
Особенно 2-е условие, также посмотрите внимательно картинки.
Автор большой молодец, что откопал такой скрипт!)
Я тоже раньше задавался этой проблемой, находил способ без скрипта, но скриптом думаю быстрее будет http://3ddd.ru/forum/thread/show/al_tiernativa_shapemerge/2#post712321 
0
Adimus
Скрипт работает на ура, Автор молодец.
0
Герыч
Автор - молодец.
0
d_zetta
Спасибо тебе, милый человек!!
Очень полезная вещь, экономит уйму времени и нервов. Давно искал
0
Sult
Автор молодец, спасибо! ;) Извиняюсь, промахнулся и поставил 4 звезды вместо 5ти.
0
Densigner
Большое спасибо!
+1
MastaMan
Пробовал разные способы, но без скрипта такое либо получается не сразу, либо нужно потом вручную немного править.
Scrap Verts помогает от части, так же выделение верши в Graphite Tools - > Selection аналогично не всегда выручает.

Спасибо автору что поделился скриптом.

Но на будущее, сделайте скрипт как кнопку в интерфейсе, так будет удобней ну и добавьте его в раздел скрипты на сайте, что бы не потерять его ;)
+3
beard02
макс тоже умеет удалять. Модификатор Turn to Poly с включенной галкой Remove Mid-Edge Vertices
+1
aaaantares
Не знал о таком, спасибо что подсказали. Но только у меня почему то не все ненужные вертексы убрались. Но в любом случае, их стало гораздо меньше))
0
N_Voit
не смогла разобраться как запустить скрипт...просто победитель по жизни...open script = ноль на массу. run script - вылетает ошибка. что я делаю не так?
0
aaaantares
Убедитесь что объект именно Editable Poly (после собственно ShapeMErge нужно нажать Convert To Editable Poly), и что этот объект выделен, потом пробуйте запустить. Если все равно будут вылетать ошибки, напишите мне в личку.
+1
N_Voit
да, вся загвоздка была в том, что объект был не Editable Poly. Edit Poly после ShapеMerge в стеке не прокатывает
Спасибо!
0
duckk75
Это реально полезная штука!
0
Lecturer
Очень нужная вещь, благодарю! +5
Вот блин, хотел 5 поставить, а промахнулся, извени(
Под конец рабочего дня уже руки не слушаются)))
Спасибо.
+1
CESHURIK
в максе все это делается при помощи простого модификатора Turn to poly
Алгоритм такой:
1. Конвертим в Editable mesh
2. применяем Turn to poly с настройками по умолчанию
3 и о чудо все вылечилось )))
0
Adimus
Ни Turn to poly, ни ScrapVerts не помогли, а скрипт реально помог...
+1
StunModeler
Спасибо! )
Кстати, его не нужно даже копировать в окно редактора скриптов, можно закрытый файл прямо с рабочего стола перетянуть курсором на объект во вьюпорте макса и происходит чудо! ;)
0
YuriiB
Да, тоже просто перенёс на объект и получилось) Спасибо, пригодится в работе)
0
pavel-voly
Если обьект разделен на треугольники
То как убрать диагональные линии все сразу
напишите порядок действия куда что нажимать ?
0
gidraaa
Slazzo Select Useless Vertices... бесплатный, простой, удобный
0
Roshka
urok super sposibo Avtoru ya to je mucelsya etimi vertecsami
+1
AN.Dr
VGSelectBadVertices - 2008 год, но автору респект все равно! мега полезная штука
0
DmitriyKuchmar
Спасибо автору!
0
ruban_nina
Комментарий удален
0
mrichk
спасибо! работает -тока как в кнопочку добавить? где в какой группе в тулбарсе его искать?
+1
Ganzzz
0
Thomas01
Не знаю, как и благодарить автора!))) Спасибо огромное!