Как вычесть один объект из другого в cinema 4d

Обновлено: 01.07.2024

Ещё один способ правдоподобно разнести на куски объект в Cinema 4D

К этому уроку прилагается 3D-сцена

Как вы помните, в предыдущем уроке по физически правдоподобному разрушению объектов в Cinema 4D мы с вами успешно расколошматили золотую амфору (или нечто наподобие). Однако процесс этого акта виртуального вандализма выглядел, увы, не вполне реалистично: амфора просто лопнула, без влияния какого-либо внешнего воздействия, после чего её куски осыпались на пол под действием гравитации. А что если бы нам понадобилось разбить амфору более убедительно — каким-либо движущимся предметом, ударившим по поверхности амфоры?

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

Пуля разбивает стекло

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

Для начала создаём новую плоскость («Plane») — заготовку будущего стекла, которое нам (вернее, пуле) предстоит разбить вдребезги.

Создаём плоскость («Plane») — заготовку стекла

Предваряя почти наверняка сразу же возникший у вас вопрос «зачем нам не имеющая объёма плоскость, когда можно сразу же создать готовое стекло из куба с нужной толщиной?» — отвечу: немного терпения! Главная хитрость заключается именно в создании стекла, именно с неё мы начинаем, именно её мы сейчас и разберём по шагам подробнейшим образом. На всё остальное в нашей трёхмерной сцене у нас с вами уйдут считанные минуты.

Итак, мы создали плоскость. Задаём в её свойствах «Width Segments» и «Height Segments» значение 1: большее значение этих параметров рассечёт нашу плоскость набором строго перпендикулярных рёбер, что для нашей с вами задачи не подходит — для пущего правдоподобия стекло должно разбиваться на хаотичной формы осколки, а не на аккуратные, идентичные друг другу по форме и размеру параллелепипеды.

Отлично, никаких внутренних рёбер на поверхности плоскости не видно.

Задаём значение 1 для свойств плоскости «Width Segments» и «Height Segments»

Теперь переводим плоскость в редактируемый полигональный объект, переходим в режим редактирования полигонов и выбираем инструмент «Нож». На иллюстрации ниже все три действия для наглядности совмещены — в реальности же инструмент «Нож» становится доступен только после превращения плоскости в полигональный объект.

Превращаем плоскость в полигональный объект и выбираем инструмент «Нож»

Выбираем наиболее подходящую проекцию и режем виртуальным «ножом» плоскость на неровные полигоны.

Режем плоскость на множество неровных полигонов

До сих пор мы с вами делали всё в точности так же, как в упомянутом мной выше уроке: создали поверхность будущего объекта, разрезали её на хаотичные сегменты.

А вот теперь начинаются отличия от предыдущего способа.

Выделяем в режиме редактирования полигонов все сегменты плоскости (быстрее всего сделать это при помощи классической комбинации клавиш Ctrl+A), после чего обращаем взгляд на верхнее меню Cinema 4D, где ищем пункт «Functions», и в выпадающем их этого пункта меню выбираем «Disconnect» («Отделить») — эта функция разъединит между собой выделенные нами сегменты плоскости.

Разъединяем между собой полигоны плоскости

На данном этапе будет нелишним создать или импортировать в трёхмерную сцену какую-нибудь окружающую обстановку, на фоне которой бьющееся стекло выглядело бы особенно эффектно — а заодно можно было бы выбрать исходное расположение будущего стекла. В принципе, конечно, это можно сделать и позже. Если же вы последовали совету автора и решили настроить окружающую обстановку до окончания работы над стеклом, то я также советую вам заодно добавить и тег динамики к объекту, представляющему собой в вашей сцене помещение, внутри которого будет разбиваться стекло. Настройки у тега вполне заурядные — галочка рядом с «Enabled» («Активно») и значение «Off» параметра «Dynamic».

Добавляем тег динамики для модели помещения, где будет разбиваться стекло

Однако вернёмся к работе над стеклом.

Как вы помните, наше стекло — всё ещё не имеющая объёма плоскость с нулевой толщиной. Исправим этот недочёт. Нажимаем в верхней панели инструментов кнопку динамических модификаторов и в выпадающем меню выбираем создание объекта «Explosion FX» (проще говоря, модификатора «взрыв»), затем подчиняем модификатор разрезанной на сегменты плоскости.

Добавляем в трёхмерную сцену объект «Explosion FX» для создания объёма стекла

Ага, скажете вы, и в предыдущем уроке мы делали то же самое!

Не совсем. В данном способе имеются принципиальные отличия. Во-первых, где будет располагаться эпицентр модификатора взрыва — нам с вами совершенно безразлично: модификатор нужен нам только для придания стеклу толщины, и если у автора в сцене он находится рядом с моделью стекла — то лишь затем, чтобы не бегать лишний раз по всей сцене из стороны в сторону от объекта к объекту. Во-вторых, мы с вами не станем подбирать значение параметра «Time» («Время») модификатора «Explosion FX», а зададим этому свойству значение 0 — у нас нет необходимости визуально отделять сегменты модели стекла друг от друга, напротив, нам необходимо, чтобы все сегменты плотно прилегали друг к другу точно так же, как до использования нами функции «Disconnect».

Указываем значение 0 для параметра «Time» модификатора «Explosion FX»

А теперь — внимание! — «изюминка» разбираемого способа, его главный секрет.

Верхнее меню Cinema 4D, пункт «MoGraph», в выпадающем меню — пункт «Fracture» («Разломать»).

Создаём объект «Fracture»

Назначение объекта «Fracture» — передавать некоторым функциям Cinema 4D (модификаторам клонов, динамике и т. д.) возможность манипуляции отдельными составляющими одной модели так же, как если бы это были клоны — в том числе полигонами и создаваемыми при помощи модификаторов подобъектами.

Плоскость, изображающая стекло, у нас сейчас состоит из отдельных, не связанных друг с другом полигонов. А толщину этим полигонам придаёт модификатор «Explosion FX». Осталось превратить куски стекла в отдельные объекты. Сделать это несложно — достаточно подчинить объекту «Fracture» созданную нами плоскость с подчинённым ей модификатором «Explosion FX». В завершение присваиваем объекту «Fracture» тег динамики и переходим к настройке параметров.

Подчиняем объекту «Fracture» созданную нами плоскость и присваиваем объекту тег динамики

Перво-наперво выделяем объект «Fracture» в менеджере объектов — чтобы открыть ниже окно его свойств — и во вкладке «Object» указываем для параметра «Mode» («Режим») значение «Explode Segments» («Взорвать сегменты»).

Выбираем режим разделения сегментов объектом «Fracture»

Далее выбираем в менеджере объектов тег динамики, назначенный объекту «Fracture», и ниже открывается окно его свойств. Здесь нам придётся повозиться немного дольше, чем ранее с окружающей обстановкой.

Значение «Enabled» во вкладке «Dynamics», разумеется, должно быть активировано (то есть рядом должна стоять галочка). Динамика также должна быть включена — у параметра «Dynamic» должно быть значение «On». Значение параметра «Trigger» («Активация») в этой же вкладке должно выглядеть как «On Collision» («При взаимодействии») — это принципиальное отличие динамики стекла в сцене от динамики пули и помещения, у которых аналогичный параметр должен иметь значение «Immediately» («Немедленно, сразу же»). Во вкладке «Collision» («Пересечение») у параметра «Inherit Tag» («Тэг наследования») должно быть значение «Apply Tag To Children» («Применять к дочерним элементам»). Параметр «Individual Elements» не должен иметь значение «Off» — выберите уровень наследования, если у вас иная глубина иерархии, нежели у автора, а ещё лучше и проще выбрать пункт «All» («Всё»). Для параметра «Shape» («Геометрия») рекомендую выбрать значение «Moving Mesh» — это значение позволяет рассчитать взаимодействие стекла с пулей наиболее точно и корректно для анимации.

Наконец создаём (или импортируем в проект) пулю, которая должна разбить стекло. Разумеется, не забываем назначить и ей тег динамики, но с теми же настройками, что и у помещения, на пол которого будут падать осколки стекла — движение пули в нашей сцене будет обеспечиваться ключами, а не физикой. Динамика нужна пуле только для взаимодействия со стеклом. Соответственно, создаём траекторию пули, указывая для начального и финального кадров её начальное и конечное положения.

Напоследок не помешает добавить — при самостоятельном создании сцены тщательно повозитесь с настройками тега динамики, включая «прыгучесть» осколков, силу трения и многое другое. Это важно не только для максимальной реалистичности результата, но ещё и потому, что при неправильной настройке некоторые куски стекла могут после удара пули неподвижно повиснуть в пространстве.

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

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

Однако, несмотря на плотное взаимодействие между собой осколков стекла, всё же возможна ситуация, при которой один из них, если можно так выразиться, не получит свою порцию взаимодействия от соседей — не забывайте, что по законам физики ударная волна распространяется с затуханием, это соблюдено и в Cinema 4D, — и в этом случае осколок повиснет в воздухе.

К сожалению, у вышеописанного способа разбить объект по всем правилам физики имеются три существенных недостатка.

Первый недостаток заключается в том, что после полного приготовления модели к её разбиванию на куски — тег «Phong» (сглаживание поверхности) на её поверхность не действует, так как модель представляет собой набор не связанных между собой полигонов, по каковой причине способ плохо подходит для анимации разбивающихся предметов со сглаженной кривизной поверхностей.

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

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

Вместе с тем у модификатора «Fracture» есть и иные применения, которые мы с вами рассмотрим, возможно, в следующих уроках.

😐

@designcreator
Кажется такой возможности нет.
Вообще-то синемовскому менеджеру Координат 100 лет и он сильно устаревший. В нём можно менять пропорционально только примитивам.
А вот в менеджере Атрибутов синхронизация есть, однако в нём не отображаются размеры объектов
Самый простой способ синхронности - это выделить нужные заголовки параметров (чтобы были жёлтыми) > в 1 из полей ввести нужные данные > а потом удерживая Ctrl нажать Enter. Но здесь введутся одинаковые значения, например:

Synchronization_1.jpg

Продвинутое управление при помощи клавиатуры и перемещения длинных ползунков выглядит так: выделить заголовки параметров и удерживать

  • Alt - квантование с интервалом по 10 только 1 параметра
  • Ctrl - синхронное изменение с одинаковыми значениями
  • Ctrl+Alt - синхронно с одинаковыми значениями + квантование
  • Ctrl+Shift - синхронно с разным значениями
  • Ctrl+Shift+Alt - синхронно с разными значениями + квантование

В общем нужно попробовать и всё станет понятно:

Synchronization_2.jpg

Ну а в Coordinate Manager так не получится, потому что там названия полей выделить нельзя. Однако если всё же кто-то знает какой-то способ, то и самому интересно.

😊

@designcreator, @aler, а есть такой способ
Перед изменением одного из размеров (высоты) в менеджере координат поменяйте Object (Rel) на World, при этом вы должны быть в режиме редактирования Object:

Режим редактирования «Объект».

пропорциоанльное изменение размеров объекта

Перед изменением одного из размеров (высоты) в менеджере координат поменяйте Object (Rel) на World:

😐

И что, размеры меша (не примитива) поменяются синхронно и пропорционально?
Мне известен только 1 способ пропорционального изменения размеров - это умножение на нужный коэффициент. Например параллелепипед имеет размеры 100 х 100 х 400,

Coordinates_1.jpg

в каждой строке размеры умножаются на 1.5,

Coordinates_2.jpg

и в итоге объект увеличился пропорционально на полтора, т.е. 150 х 150 х 600

☹

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

Coordinates_4.jpg

Coordinates_5.jpg

c4be2876-5ecd-4551-abd2-647bd88e2d57-image.jpg

в справке еще про "восстановить размер" написано

@uriel
Юрий, классно!, это как раз Оно! Всё получилось
Ну а тебе за подсказку прямо в десятку - Гиперлайк!

☺

Для наглядности сделал всё пошагово в картинках (только у меня значок Сброса отличается от новых версий Синемы - любят Максоны перерисовывать иконки )

Proportional Size_1.jpg

Proportional Size_2.jpg

Proportional Size_3.jpg

Proportional Size_4.jpg

. ещё пожелание на будущее: предоставленная картинка - это хорошо, но ещё лучше давать прямую ссылку, чтобы другие долго не искали.

Да, дополнил, забыл сообщить.

@Uriel не знал про фиксирование координат, спасибо :)

@aleksei круто, спасибо большое

@aler спасибо за пошаговую инструкцию!

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

Как это никто не поддержал? Я тоже тогда об этом писал. Только толку?( Я тогда много по наивности этой писаниной занимался. К стати пока Алексей не показал возможность я тоже думал, что такой возможности нет. Что не удивительно. Довольно заморочное решение - "а чтоб ни кто не догадался". Вместо того, чтобы просто замочки в менеджере сделать. А на счет того, что в Синьке устаревший менеджер. Старый не значит худший. Берусь утверждать, что лучшим и остался. В других прогах вообще на глазок по кубику размеры выставляли, а именно в Максе и Майке. И даже в хваленом Модо такая же фигня с "кубиком" происходила. Потом прикрутили отдельную тулзу для размеров. А так в процентах. В Максе тоже относительно недавно отдельно прикрутили. И это не менеджер(как в Синьке), а отдельная тулза, как в Модо. В Майе смотрел перед Блендером так там тупо 1 1 1) А в Блендере размеров в режиме редактирования НЕТ) Только в режиме объекта. Так что - "везде хорошо где нас нет").

🙄

@cmykcat
Да уж.
Я не знал, как там в других прогах, потому сравнить не могу. Помню только, что в Modo было вроде бы не всё хорошо: вроде как вначале размеры были метрические, а потом в %. Однако "замочек" для связи осей там всё же есть. У меня по этой теме, что писал на старом форуме, даже скриншоты остались, например:

Помню только, что в Modo было вроде бы не всё хорошо: вроде как вначале размеры были метрические, а потом в %. Однако "замочек" для связи осей там всё же есть.

Ты еще веришь в эти пожелания?) Когда за столько лет по моделингу было добавлено полторы кнопки((

😛

Ну N.G. со старого форума (если не ошибся с ником) всё-таки дождался Ножа, который вырезает в полигонах дырки.

А на счёт скриншота "Это сколько?" - впечатлён. Это, так понял, в Блендере такой казус? А в самом деле это что: какие-то метрические единицы, или проценты от чего-то, или просто абстрактные цифры?

@aler Про нож писал я. Который не мог резать Н-гонсами. С примерами картинок из других прог. Сделали через пять лет. N.G - помню такого. Может он тоже писал. Тогда вообще это дело было активно и все были полны энтузиазма). Ну в Блендере нельзя, как в Синеме просто выделив полигон посмотреть его размер, а тем более ввести нужное значение(. Размеры в режиме редактирования он не показывает. Линейка в помощь и аддоны с более продвинутыми линейками). При деформации он просто отталкивается от единицы. И помнит один шаг, если конечно знать тайную кнопку). Это касается режима редактирования. В режиме объекта отображает размеры и можно вводить в "менеджере"(а можно просто с клавы никуда не вводя это уже фишка Блендера), но вот с поликами так нельзя(. Правда я нашел каким-то чудом один аддон вытянув его с одной упоратой сборки. Решающий этот недостаток. Так что тут ты Синему не ругай. Ее есть за что ругать, но точно не в этом случае).

. Так что тут ты Синему не ругай. Ее есть за что ругать, но точно не в этом случае

☺

Хорошо, не буду

10a1472e-a9ab-4693-9310-bfae388d600f-image.jpg

@cmykcat ох, я подтверждаю эту боль с размерами в Блендер. Ох и ах.
Все просто на глаз делается. Но это не самая боль. О как.
Самая боль - дефолтная система координат в метрах. И на неё завязаны все значения всего в программе. Приходится постоянно работать со значениями много меньше нуля. Это неудобно.
Стоит изменить с метров на миллиметры - рушится всё. Сначала незаметно. Но при погружении в работу - перестают адекватно вести себя все параметры.
Что бы заставить работать модификаторы в миллиметрах, нужно выставить значения автоматического масштабирования всего вообще на лету в значение 0.001. Но это не решает всех вопросов.
Например, во вьюпорте не добиться ощущения объема объекта при помощи АО как тут

Замочка в Синеме действительно не хватает. Но при этом, со всей высоты опыта хардсурфейс промышленного моделирования заявляю - в Синеме система с координатами как глоток воздуха после Блендер.
Можно наиточнейше моделировать.

@uriel Я думал, что я зануда, но оказывается еще нет). Я просто выставил юниты в Блендере, чтобы размер с Синькой совпадал на мм и все). У меня просто сетка практически всегда включена.

Canonical Link

Список полезных горячих клавиш в Cinema 4D

E/R/T - движение/вращение/масштаб (можно сразу поменять местами две иконки последних на панели - проще запоминаются, когда последовательность кнопок на клавиатуре и на экране одинаковая)

Cinema 4d ERT.jpg (7.46 КБ) 20091 просмотр Cinema 4d ERT.jpg (7.46 КБ) 20091 просмотр


удержание кнопки - временное переключение пока держишь

4/5/6 - временное движение/масштаб/вращение пока держишь. очень странное, оси не работают, индикации нет

8/9/0 - выделение лассо/паинт/квадрат


тот же фокус с удержанием работает

F1/F2/F3/F4/F5 - переключение по въюпортам (меню Panel) Perspective/Top/Right/Front/Четыре вида

Cinema 4d panel hotkeys.jpg (12.38 КБ) 20082 просмотра Cinema 4d panel hotkeys.jpg (12.38 КБ) 20082 просмотра



ALT+D - включение-выключение осей на объекте
CTRL+TAB - раскрыть текущее окно на всю площадь

CTRL+LMB - в левой части панели - свернуть
ALT+LMB - развернуть на всю область
(пишется при наведении)

Cinema 4d panel manipulation.jpg (8.5 КБ) 20091 просмотр Cinema 4d panel manipulation.jpg (8.5 КБ) 20091 просмотр


RMB на закладках Attribute - добавить к списку. Также можно использовать SHIFT/CTRL для группового выделения как везде в других местах.



CTRL+POINT/EDGE/POLYGONS mode - конвертация выделенной области

Cinema 4d selection mode convert.jpg (9.68 КБ) 20083 просмотра Cinema 4d selection mode convert.jpg (9.68 КБ) 20083 просмотра



CTRL+LMB на ключе - создать ключ
SHIFT+LMB на ключе - удалить ключ
CTRL+SHIFT+LMB на ключе - удалить всю анимацию

Cinema 4d reset keyframes.jpg (3.81 КБ) 20083 просмотра Cinema 4d reset keyframes.jpg (3.81 КБ) 20083 просмотра


SHIFT+C - меню для ввода команд и инструментов



Если просто щелкать по стрелкам, то значение будет меняться на +/- 1
Если держать SHIFT +/- 10
Если держать ALT +/- 0.1

Cinema 4d arrow control.jpg (4.16 КБ) 20081 просмотр Cinema 4d arrow control.jpg (4.16 КБ) 20081 просмотр


Можно "таскать" эти стрелки, удержание клавиш модификаторов тоже действует на скорость изменения.


6.1.1. Инструменты Move и Rotate

Инструмент Move позволяет перемещать в окнах проекций выделенный объект и его элементы, инструмент Rotate позволяет вращать объект и его элементы.

При перемещении объекта важно следить за тем, какая система координат выбрана в данный момент. Создайте объект - примитив Cube (куб). На рис. 6.2 видны две системы координат; одна привязана к самому объекту (локальная система координат), другая находится в левом нижнем углу окна проекций (глобальная система координат).


На рис. 6.3 направления осей двух систем координат совпадают, поэтому при перемещении объекта не важно, в какой системе мы находимся. Но направление осей двух систем координат может и не совпадать. Применим к объекту инструмент Rotate (рис. 6.4) и повернем объект вместе с осями локальной системы координат. Теперь оси локальной системы координат ориентированы иначе, чем оси глобальной (рис. 6.4). Это видно по цветам осей. 0Х - красный цвет, 0Y - зеленый, 0Z - синий.

Выделим объект куб и выберем инструмент Move.


Заблокируем возможность перемещения по осям 0Y и 0Z и оставим единственно возможное направление перемещения - ось 0Х. Блокировка производится с помощью кнопок Ограничителей перемещения вдоль осей (рис. 6.5), которые располагаются на верхней горизонтальной панели инструментов. Активизируйте (нажмите) кнопку со значком X. Изображение стрелочки в активном состоянии должно быть в цвете, соответствующем цвету оси, в данном случае - это красный цвет. Кнопки Y и Z приведите в неактивное состояние (в неактивном состоянии стрелки обесцвечены) (рис. 6.5).

Выберите глобальную систему координат (клавиша W), установите курсор на свободном месте в окне проекций, прижмите левую кнопку мыши и подвигайте курсор по окну проекций. Так как оси 0Z и 0Y заблокированы, то, несмотря на ваши движения мышью в различные стороны, куб будет перемещаться строго в направлении оси 0Х глобальной системы координат, направление


осей которой изображено в левом нижнем углу окна проекций (рис. 6.4).

Перейдите в локальную систему координат и снова подвигайте курсор (при нажатой левой кнопке мыши) по свободному месту окна проекций. Теперь куб будет перемещаться в другом направлении, хотя тоже по оси 0Х, но уже локальной системы координат, изображенной на самом объекте (рис. 6.4).

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

Двойной щелчок левой кнопкой мыши по оси локальной системы координат делает направление этой оси единственно возможным для перемещения. Остальные оси блокируются (значки на панели инструментов это не отражают).

Если при смене блокировок возникает путаница, щелкните по значку начала координат локальной системы координат, чтобы снять установки с осей.

Читайте также: