Форум 2D Аниматор


Вернуться   Форум 2D Аниматор > "Moho" (Anime Studio) > Общая Дискуссия > Скрипты

Важная информация

Скрипты Здесь все о скриптах Lua для программы Anime Studio Pro (Moho)

Ответ
 
Опции темы
Старый 04.10.2018, 01:35   #1
Egorgan
Местный
 
Регистрация: 06.09.2008
Адрес: Киргизия
Сообщений: 119
Сказал(а) спасибо: 33
Поблагодарили 80 раз(а) в 31 сообщениях
Egorgan на пути к лучшему
По умолчанию Triangulate 2d mesh

Друзья, подскажите пожалуйста есть ли скрипт аналог опции Triangulate 2d mesh. который бы более корректно разбивал на треугольники? в данный момент вшитая функция убивает уже имеющийся шейп между двумя точками и создает другие шейпы к третей точке. это очень неудобно. даже если в ручную всю сетку сделать треугольной при конвертации функция все равно делает как ей удобно. и если сильно хочется правильную сетку то придется и залить каждый треугольник в ручную.
может подобный скрипт написать можно если нет такого еще?
__________________
https://www.youtube.com/channel/UCagU_eSjAsVwi_8Wkbjpa7Q?view_as=public
Egorgan вне форума   Ответить с цитированием
Старый 05.10.2018, 15:21   #2
А.Евсеева
Супер-модератор
 
Регистрация: 29.09.2013
Адрес: Москва
Сообщений: 251
Сказал(а) спасибо: 103
Поблагодарили 429 раз(а) в 103 сообщениях
А.Евсеева на пути к лучшему
По умолчанию

Боюсь, что в скриптовом API вообще нет функций для обращения с этими сетками.

Stan, сетки же вроде в 12.2 добавились? Что-то добавилось тогда в API в связи с этим?
А.Евсеева на форуме   Ответить с цитированием
Старый 05.10.2018, 18:45   #3
Egorgan
Местный
 
Регистрация: 06.09.2008
Адрес: Киргизия
Сообщений: 119
Сказал(а) спасибо: 33
Поблагодарили 80 раз(а) в 31 сообщениях
Egorgan на пути к лучшему
По умолчанию

Цитата:
Сообщение от А.Евсеева Посмотреть сообщение
Боюсь, что в скриптовом API вообще нет функций для обращения с этими сетками.
ну вообще эти сетки это обычный векторный слой. в котором все формы замкнуты 3мя точками тоесть треугольники, и они залиты шейпом. мэш сетку можно сделать полностью в ручную. мне казалось (не утверждаю потомучто в скриптинге не разбираюсь) что на уровне скрипта возможно реализовать атоматическую дорисовку дополнительных сплайнов чтобы разбить форму на треугольники (при этом оставляя уже имеющиеся сплайны). ну и нужна функция авто заливки каждой формы.

Stan мне скидывал ссылку на скрипт [Только зарегистрированные пользователи могут видеть ссылки. Нажмите Здесь для Регистрации]
но эта иструмент предлгает на выбор настрайваемые фигуры и сетки. но что я заметил при использовании заливка происходит после создания сетки (когда отпускаеш кнопку мыши). тоесть блок кода автозаливки вероятно отдельно описан. может можно отуда взять автозаливку..
__________________
https://www.youtube.com/channel/UCagU_eSjAsVwi_8Wkbjpa7Q?view_as=public
Egorgan вне форума   Ответить с цитированием
Старый 05.10.2018, 18:56   #4
Stan
Администратор
 
Аватар для Stan
 
Регистрация: 29.12.2007
Адрес: MA
Сообщений: 1,605
Сказал(а) спасибо: 1,167
Поблагодарили 3,369 раз(а) в 761 сообщениях
Stan скоро придёт к известностиStan скоро придёт к известности
По умолчанию

Скриптинг не имеет доступа в роцесс конвертации векторного слоя в warp'овый (триангуляцию). Но я так понял, что здесь речь идет о некоей промежуточной операции превращения векторных форм в треугольники, но с другим алгоритмом. То есть принудительная триангуляция, которая устроила бы и пользователя и команду Triangulate 2D Mesh.


Типа такого:
[Только зарегистрированные пользователи могут видеть ссылки. Нажмите Здесь для Регистрации]
Stan вне форума   Ответить с цитированием
Старый 05.10.2018, 19:40   #5
Egorgan
Местный
 
Регистрация: 06.09.2008
Адрес: Киргизия
Сообщений: 119
Сказал(а) спасибо: 33
Поблагодарили 80 раз(а) в 31 сообщениях
Egorgan на пути к лучшему
По умолчанию

приведу грубый пример.
допустим мне нужна подобная форма. для управления растром. рис 1


и еще для правельного поведения растра мне нужны именно такие два сплайна.. которые уже бют форму на треугольникки. рис 2


я применяю стандартную функцию. и она полностью убивает так необходимые мне сплайны с предыдущей картинки. рис 3


я отменяю конвертацию и разбиваю на треугольники самостоятельно. рис 4


затем я применяю заливку к кадому треугольнику. рис 5. в данном примере я залил лиш половину формы но обратите внимание программа сама автоматически обозначила слой как мэш слой в панеле слоев.


собственно меня интересует возможноли скриптом реализовать автоматическую дорисовку сплайнов разбивающих на треугольник не треугольные формы как на рисунке 4. сплайн помеченый стрелкой. и далее чтобы применялась автозаливка к каждй фоме...
надеюсь смог правельно донести проблымму.

---------- Добавлено в 17:40 ---------- Предыдущее сообщение было написано в 17:34 ----------

поправлюсь.. дорисованый сплан не обязательно должен быть именно таким как на рисунке 4. просто рандомный сплайн... главное чтобы созданный в ручную сплайны оставлись на месте
__________________
https://www.youtube.com/channel/UCagU_eSjAsVwi_8Wkbjpa7Q?view_as=public
Egorgan вне форума   Ответить с цитированием
Старый 06.10.2018, 22:19   #6
А.Евсеева
Супер-модератор
 
Регистрация: 29.09.2013
Адрес: Москва
Сообщений: 251
Сказал(а) спасибо: 103
Поблагодарили 429 раз(а) в 103 сообщениях
А.Евсеева на пути к лучшему
По умолчанию

Триангуляция -- дело сложное. Если делать ее способом, дающим оптимальные треугольники с коротенькими сторонами, то алгоритм будет очень сложный. Если делать самым простым алгоритмом, то стороны треугольников (те, что будут достроены вдобавок к существующим уже ребрам) будут местами очень длинными, а треугольники очень узкими. В общем, после такой операции захочется некоторые ребра перевернуть.
Отсюда идея. Что если доверить таки триангуляцию встроенной команде, но иметь инструмент для ее последующего исправления -- переворачивалку ребер?
Переворачивалку ребер определенно легче будет написать, чем триангуляцию с нуля (этим врядли кто-то займется, подозреваю)
Суть переворачивалки такая: кликаем на ребре, и оно переворачивается. Т.е., любое ребро в уже разбитой на треугольники сетке является границей между двумя треугольниками (кроме ребер на внешних границах, но мы их не будем кликать). Два треугольника -- это четырехугольник, а это ребро -- его диагональ. Эту диагональ инструмент убивает, и вместо нее строит вторую диагональ того же самого четырехугольника.
Ы?
А.Евсеева на форуме   Ответить с цитированием
Старый 06.10.2018, 23:00   #7
Egorgan
Местный
 
Регистрация: 06.09.2008
Адрес: Киргизия
Сообщений: 119
Сказал(а) спасибо: 33
Поблагодарили 80 раз(а) в 31 сообщениях
Egorgan на пути к лучшему
По умолчанию

идея интсрумента хороша конечно. такой инструмент был бы полезен как в 3D программах. но врядли он спасет от тех багов с которыми я сталкиваюсь. мне нравится идея номер 2 с простым алгоритмом. если он будет сокранять имеющиеся ребра это решит все проблеммы.. даже если он будет делать некоторые места не оптимальными их можно будет проставить в ручную.
ниже пример почему инструмент переворачивания не поможет.

синей линией отмечены ребра на которые стоит обратить внимание.


смотрим что получилось после конвертации..

сетка настолько переделана что там никакое переворачивание не спасет.

---------- Добавлено в 21:00 ---------- Предыдущее сообщение было написано в 20:58 ----------

в итоге у меня при микроповороте головы тянет бровь и лоб. а при подьеме брови тянет глаз.
__________________
https://www.youtube.com/channel/UCagU_eSjAsVwi_8Wkbjpa7Q?view_as=public
Egorgan вне форума   Ответить с цитированием
Старый 06.10.2018, 23:04   #8
А.Евсеева
Супер-модератор
 
Регистрация: 29.09.2013
Адрес: Москва
Сообщений: 251
Сказал(а) спасибо: 103
Поблагодарили 429 раз(а) в 103 сообщениях
А.Евсеева на пути к лучшему
По умолчанию

Мда, тут спасут только два и более переворачиваний, но это, конечно, не фонтан.

Ну тогда методика такая:
1) Вручную залить paintbucket-ом большие многоугольники
2) Скрипт, который надо написать, возьмет каждый такой многоугольник и разобьет его на раскрашенные треугольники.


Алгоритм работы скрипта будет выглядеть как-то так (для каждого залитого шейпа):
1. Собрать массив из вертексов шейпа, расположенных ПОСЛЕДОВАТЕЛЬНО
a. Проверить, все ли вертексы в шейпе имеют минимум два сегмента, проходящих через них, из которых два и только два относятся к этому шейпу. Если не все, то шейп не годится для операции, выход. Параллельно проверке запоминаем эти вертексы вместе с их подходящими ребрами в массив.
b. Перебирая этот массив выстраиваем последовательность вертексов от ребра к ребру. Последовательность должна замкнуться, и содержать столько же вертексов, сколько содержит шейп в целом. Если это не так, то шейп тоже не годится, и выход.
2. Убить шейп (M_MesheleteShape)
3. Начинаем с первого вертекса. Вызов функции "строить ухо" для первого вертекса.
4. Функция "строить ухо" от заданного вертекса:
a. Представляем себе отрезок от заданного вертекса N до N+2
b. Проверяем, пересекает ли этот отрезок хоть одно из ребер многоугольника (функция определения пересечения двух отрезков)
c. Если пересекает, то возвращаем ложь.
d. Если не пересекает, то запоминаем получившийся треугольник, а из массива-многоугольника исключаем вертекс N+1
5. Если функция вернула ложь, переходим к следующему вертексу в массиве, и для него строим ухо.
6. Если функция вернула истину (и перестроила наш многоугольник) , то вызываем снова "строить ухо" от текущего вертекса
7. Таким образом обходим наш массив по кругу, пока не останется три вертекса.
8. Оставшиеся три вертекса добавляем к списку треугольников.
9. Для каждого треугольника в списке:
a. Достраиваем недостающие ребра (как? Наверное, mesh:AddPoint + mesh:WeldPoints)
b. Создаем треугольный шейп (moho:CreateShape)



А вот писать это все мне что-то сильно лень :о)

Последний раз редактировалось А.Евсеева; 06.10.2018 в 23:38.
А.Евсеева на форуме   Ответить с цитированием
Этот пользователь сказал cпасибо за это полезное сообщение:
serg2 (07.10.2018)
Старый 07.10.2018, 01:02   #9
Egorgan
Местный
 
Регистрация: 06.09.2008
Адрес: Киргизия
Сообщений: 119
Сказал(а) спасибо: 33
Поблагодарили 80 раз(а) в 31 сообщениях
Egorgan на пути к лучшему
По умолчанию

получается принцим работы будет такой. после создания сетки нужно соеденить как можно больше дуталей в замкнутые формы (4х 5и и может 6й точечные.) так чтобы при заливке не возникла наложение шейпов.. затем залить и прожать кнопочку.. если все бло верно разбито и залио скрипт сработает?
ну это будет большым подспорем в погоне за хорошей сеткой.
может я не внимательно читал но в алгоритме будет проверка на то не является ли форма уже треугольной?
ну а то что лень это конечно жаль. даже не знаю чем подкупить вашу мотивацию. могу персов прошить парочку))) хотя кому я это предлогаю. о точно обязуюсь принять учатие в вашем проекте музыкальном... хоть он и на добровольных началах.. но и в теме скриптов все по желанию.. как такая идея? не слишком нагло надеюсь?
__________________
https://www.youtube.com/channel/UCagU_eSjAsVwi_8Wkbjpa7Q?view_as=public
Egorgan вне форума   Ответить с цитированием
Старый 07.10.2018, 12:46   #10
А.Евсеева
Супер-модератор
 
Регистрация: 29.09.2013
Адрес: Москва
Сообщений: 251
Сказал(а) спасибо: 103
Поблагодарили 429 раз(а) в 103 сообщениях
А.Евсеева на пути к лучшему
По умолчанию

Короче, такое дело.
Скрипт я написала ([Только зарегистрированные пользователи могут видеть ссылки. Нажмите Здесь для Регистрации])
Но работает он странно. Точнее, скрипт, как раз, работает нормально. Он разбивает фигуры на треугольники и пытается эти треугольники залить.
Странно работает Моха. Некоторые из этих треугольников она заливать категорически отказывается. И не только в скрипте, но и без. Если уже после выполнения скрипта выделить точки любого из этих незалившихся треугольников, создать из них шейп не получится. Если только убить какую-нибудь его грань и создать заново.
Думать об этом я больше не буду. Пусть кто-нибудь поумнее подумает.

---------- Добавлено в 10:40 ---------- Предыдущее сообщение было написано в 09:43 ----------

Короче. Вы будете смеяться, но я это поправила. Лежит там же.
И не спрашивайте, как. Михалыч -- страшный человек.
Больше я об этом думать точно не буду.
Stan, ты меня втравил в эту авантюру, вот ты теперь баги и лечи, если всплывут. <взмахнув черными крыльями, улетела вдаль, страшно хохоча>

---------- Добавлено в 10:46 ---------- Предыдущее сообщение было написано в 10:40 ----------

ЗЫ: но если переворачивалка ребер все-таки понадобится, обращайтесь.
А.Евсеева на форуме   Ответить с цитированием
Эти 4 пользователя(ей) сказали cпасибо за это полезное сообщение:
Egorgan (07.10.2018), Eugene Babich (07.10.2018), oges (07.10.2018), Stan (07.10.2018)
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 21:08. Часовой пояс GMT +5.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.