NODE & CODE
44 subscribers
1 photo
35 videos
4 files
2 links
Привет! В этой группе я буду делиться своими экспериментами по интеграции нейросетей в пайплайн работы с Python в Cinema 4D
Download Telegram
Рома
4. TRIGGER_EFFECTOR Запускаем воспроизведение анимации только в момент триггера. Появляется вопрос зачем, если подобное можно реализовать с помощью cloner(a) в режиме fixed В режиме fixed скорость анимации зависит от степени влияния полей. Поэтому если поле…
This media is not supported in your browser
VIEW IN TELEGRAM
Обновление для TRIGGER_EFFECTOR: добавил возможность работать с весами в режиме клонера fixed. Но веса сейчас также не влияют на длительность анимации, а просто триггерят её старт. Длительность также устанавливается в эффекторе. Из интересного можно получить вот такое слоумо)
#MoPy
Сейчас работаю над проектом и собрал две таких вариации по последовательному движению клонов. Обе завязаны на эффекторе PATH_OFFSET.
1ый просто использует режим distance (кол-во клонов = кол-ву сегментов сплайна)
2ой работает на триггере и передаче веса соседним (кол-во клонов = кол-ву сегментов сплайна) НО! Можно играться с visibility (возможно доработаю внутри кода)

Так же под эту задачу написал несколько python generator(ов):

1) Генерирует сплайн проходящий сквозь центр объекта (работает не превосходно, но для многих вариантов подходит)

2) Соединяет все сегменты сплайна. создавая полные пути от его начала и до конца (т.е условно 10 сегментов-10 сплайнов)

3) Если говорить простым языком, сортирует сегменты в зависимости от их удаленности от самого 1ого сегмента (вроде как работает, но конкретно для моей задачи это оказалось ненужным, поэтому пока на уровне сырого теста. Так же пока не могу додумать где и как это можно применить/использовать)
#PyGen #MoPy
Media is too big
VIEW IN TELEGRAM
6. INHERITANCE_EFFECTOR
Перемещает матрицу одного mograph объекта к матрице другого в нужной нам последовательности
Сделал 2 версии:
1) Работает автономно
2) Работает через передачу веса сторонним эффектором
Хз как удобнее, по сути принцип один и тот же

Сейчас пока готов буквенный режим, в скором времени доработаю численный(сейчас он как бы тоже есть, но надо залазить в код, что не так удобно), и рандом. Заготовки уже есть, осталось скомпилировать
#MoPy
За отсутствием предложений решил поиграться с вычислением и группировкой сегментов "ветвистой" геометрии по уровням и подуровням. Очень удивился как нейронки на основе достаточно примитивных примеров могут строить очень сложные, а главное работающие структуры.
Попробовал 3 варианта:
1ый на основе интерсекции сегментов друг с другом (в основе синьковский bool)
2ой на основе расстояния между ближайшими точками сегментов
3ый на основе построения внутренних сплайнов

У всех 3ех есть как минусы, так и плюсы
1) На основе буля: достаточно долгий в обработке и при пересечении сегментов с "разных" веток, все условно попадает в одну сортировку,т.е уровни и подуровни могут вычисляться не всегда корректно. Из плюсов, пофиг на сетку

2) На основе точек: минусы +/- такие же, а из плюсов чуть быстрее, геометрия не обязательно должна проходить сквозь друг друга

3) На основе построения внутренних сплайнов: из минусов работает не с каждой сеткой, и хорошо работает с сегментами выходящими из одной точки (или почти), достаточно длинный код
Из плюсов: значительно быстрее остальных вариантов, т.к работает со сплайнами(т.е кол-во точек и различных проверок значительно меньше, более гибок, и как мне кажется наиболее точен

Пробовал еще метод, через создание bounding box, но этот способ работал наименее корректно
🔥1👀1
Скрипт 1: Волновое расширение по геометрической дистанции
Использует топологические соседства полигонов.
Для роста сегментов сравнивается расстояние между вершинами.
Прост в исполнении и быстро работает.
Эффективен для логических групп близких участков, но не учитывает реальную форму объектов.
Хорошо подходит для геометрических "кластеров".

Скрипт 2: Расширение по Boolean-пересечениям
Строит PolygonObject'ы для каждого сегмента и проверяет пересечение через Oboole.
Очень точный, так как учитывает реальную форму.
Использует AABB оптимизацию и кэш пересечений для ускорения.
Главный минус — медленная работа при большом числе сегментов из-за Boolean-операций.
Подходит, если важна точность пересечений (например, для физически пересекающихся мешей).

Скрипт 3:
Управление по углу, глубине, ветвям, и направлению.
Подходит для автоматической генерации путей/веток
Выдаёт сплайн как результат, а не просто выделение.
Самый сложный в логике, но и самый гибкий.

Это что говорят нейронки
👍2
Могу прикреплять/скидывать файлы для тестов или как-то иначе записывать, просто пока особо фидбека нет, поэтому выглядит больше как отчет)
🔥3
Над 3им способом думал сам, поэтому он кажется наиболее классным и интересным)
Самая большая проблема в том, как получить сплайны, проходящие через центры всех сегментов. Я допетрил до 2ух способов, но оба очень сильно подвязаны на адекватной сетке.

На картинке как это выглядит с принтами)
🔥3
Если у кого-то возникают интересные идеи или хотелось бы добавить в синему какой-то инструмент, дайте знать. Организуем!)
🆒1
Media is too big
VIEW IN TELEGRAM
Дорабатываю свой вариант:

1)Добавил поддержку поиска подуровней с любой части уровня. (Раньше поиск был только с последней точки уровня😅)

2) Улучшил логику поиска подуровней, чтобы почти гарантировано избегать неточностей при пересечениях.

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

Вот основные шаги, которые использовались в ходе работы
1) Поиск связанных полигонов (сегментов)
2) Получение центр. точек сегментов и создание сплайнов на основе uv
3) Поиск связей и построение иерархии у сегментов
4) Сортировка сегментов сплайна по иерархии
5) Создание фин. сплайна и selection(а) из выборки

Код получился на 450 строк)
🔥52👌1
Управляем камерой с помощью эффекторов и xpresso. За счет этого можно получить какие-то хаотичные движения,вращения без кейфреймов. Как по мне закреплять так камеру на сплайн удобнее, чем через тег. Лучше привязывать группу и в нее ложить камеру, чтобы в случае чего её подрегулировать)
Всех, с пятницей!
Группа не заброшена)
Сейчас дорабатываю кастомный sweep.
1ое отличие от оригинала - параллельная обработка сегментов (почему-то в том, что из коробки нельзя выбрать между последовательной и параллельной обработкой)
2) Добавил возможность симметричного роста
3) Возможность сдвигать начало без ручного создания доп точек.

Пока есть еще что хотел бы скорректировать и добавить. Как докручу,по запросам выложу :)
🔥8
Стоит ли выкладывать какие-то рабочие тесты с режимами или только самый финальный вариант уже со всеми опциями?
Просто хочется прям по максимуму его нафаршировать)
1👍1🔥1
Доработал все режимы, которые хотел:
1: Закрытый - базовый
2.1: Открытый
2.2: Открытый с одинаковой скоростью для правой/левой части
2.3: Открытый с возможностью как бы выйти за границу (чисто для uv). Сейчас клампанул, но думаю сделать переключатель
3.1: Сохраняем поведение закрытого на открытом сплайне (тут промежуток не игнорируется и учитывается при расчете трима и anchor)
3.2: То же самое, но уже не учитывается, и дойдя до одного конца сразу перекидываемся на другой
3.3: Больше доп функция для режимов 3.1 и 3.2. Корректируем направление концов, чтобы полностью воссоздать поведение открытого сплайна
🔥31👍1
Считаю что база готова. Из дальнейших доработок вижу:
1) Все-таки вернуть режим последовательного трима для многосегментных сплайнов и к этому добавить функции, чтобы рост шёл с обоих сторон одновременно от крайних сегментов к центральному.
2) Добавить возможность выбора anchor по xy. Т.е например для всех сегментов anchor будет по умолчанию в самой верхней,нижней/правой/левой части
Пока идеи такие)
1👍1🔥1