Как наложить один объект на другой в блендере

Обновлено: 17.05.2024

Продолжаю писать статьи начинающим пользователям Blender. Сам я тоже начинающий, так что пишу и для себя тоже, чтобы не забыть.

Я сейчас делаю простенькую 3D-модель ноутбука, который состоит из многих мелких деталей, особенно клавиш. Представьте, что я захочу передвинуть ноутбук на новое место. Мне придётся выделить все его детали, не так ли? А если я забуду хоть одну и обнаружу это слишком поздно, когда Ctrl+Z нажимать уже не захочется, то придётся мне подбирать её удачное местечко вручную, хотя всю эту работу я уже когда-то делал, только в другом месте. Обидно, да? Впрочем, при простом перемещении это ещё не самое страшное. А вот если я весь ноутбук передвину и поверну? Мороки с забытой деталькой потом будет ещё больше.

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

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

Первый способ - "сгруппировать" все необходимые детали. Делается это просто: выделяем все нужные части и нажимаем Ctrl+G (или в меню: Object→Group), затем выбираем "Add to New Group" - добавить в новую группу. Теперь объекты незримо связаны (хотя и зримо тоже - обратите внимание на зелёные контуры), хотя по-прежнему не зависят друг от друга. "Группа" не даёт никаких супервозможностей, кроме возможности выделить все объекты, входящие в группу, одним махом. Просто выделяем один любой объект из группы, нажимаем Shift+G (или Select→Grouped), выбираем вариант №7 ("Objects in Same Group" - объекты из той же группы; можно просто нажать цифру "7" на клавиатуре) - и к выделению присоединяются все детали нашего ноутбука. Теперь можно двигать их вместе. Все новые детальки, которые я буду добавлять, я буду присоединять к группе с помощью варианта "Add to Existing Group" в меню Ctrl+G, и тогда при перемещении точно ничего не забуду.

Кроме того, группы будут удобны, если вы впоследствии будете использовать ноутбук в других файлах, присоединяя его с помощью "File→Append or Link. " - вместо того чтобы импортировать каждую клавишу по отдельности, вы просто выберите нужную группу и заполучите в свой новый файл сразу весь свой старый ноутбук. Если групп в файле несколько, то имеет смысл их содержательно обозвать, просто выбрав любой из сгруппированных объектов и изменив текст в поле "GR:" на вкладке "Objects and Links" свойств этого объекта. Напишите там, например, "Notebook". Название группы автоматически изменится и у всех остальных "одногруппников" этой детали.

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

Сначала выделите всех детей, которых хотите привязать к родителю, а потом (порядок важен!) - самого родителя. Теперь нажмите Ctrl+P (или в меню: Object→Parent→Make Parent), чтобы установить родительскую связь. Вопрос-уточнение будет простым и конкретным:

Жмём Enter, чтобы согласиться, и от родителя протягиваются пунктирные линии ко всем его детям. В случае с нижней частью ноутбука и клавишами получился такой вот красивый веер из пунктирчиков:

У каждой клавиши привязанность к родителю отражена там же, где и принадлежность к группе, а именно на панели кнопок, в разделе Object (F7), на вкладке "Objects and Links". Имя родителя отражено в поле "Par":

Удалить привязку к родителю можно нажатием на Alt+P, или же через меню Object→Parent→Clear Parent.

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

Зачем же такая сложная многоходовая конструкция, спросите вы? Да просто ради того, чтобы ноутбук можно было удобно открывать и закрывать. Я буду поворачивать этот цилиндрик вокруг его оси, и вся верхняя часть с монитором будет автоматически поворачиваться вокруг оси этого цилиндрика! Почему же тогда нельзя было привязать монитор напрямую к цилиндрику, спросите вы? Да так, на всякий случай. Чтобы, даже если я вдруг "забуду" про цилиндрик и стану вертеть верхнюю часть напрямую, монитор не остался в стороне от дел.

Итак, что же в итоге?

- Мы можем выбрать все составляющие ноутбука сразу, потому что они сгруппированы.

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

- Родительская связь односторонняя, так что при нажатии клавиши ноутбук не будет перемещаться вслед за ней. :D

После установления родительских связей дальнейшая работа над любой моделью будет удобнее!

Blender: способы выделения объектов и подобъектов

В данном уроке рассмотрены различные способы выделения объектов и подобъектов (вершин, ребер, граней) модели в бесплатном 3D редакторе Blender.
Урок состоит из четырех частей:

Часть 2. Выделение подобъектов расположенных в ряд по линиям.

Часть 3. Ручное выделение множества подобъектов специальными инструментами: рамкой, окружностью, произвольной формой.

Часть 4. Автоматическое выделение подобъектов по указанным признакам: длине, площади, материалам, текстурам, направлению нормалей, числу ребер и т.д.

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

1. Принципы выделения в Blender

Blender: способы выделения объектов и подобъектов

Выделение объекта, расположенного позади или внутри другого объекта

Blender: способы выделения объектов и подобъектов

Blender: способы выделения объектов и подобъектов

Blender: способы выделения объектов и подобъектов

Похожая ситуация с вершинами: если правой кнопкой мыши щелкнуть выше вершины, то выделится вершина, расположенная спереди. Если же щелкнуть, ниже вершины, то выделится вершина, расположенная сзади – на обратной стороне объекта.

Blender: способы выделения объектов и подобъектов

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

Blender: способы выделения объектов и подобъектов

Выделение ближайшего скопления подобъектов

Blender: способы выделения объектов и подобъектов

Выделение отдельных элементов в объекте

Blender: способы выделения объектов и подобъектов

Выделение всех подобъектов кроме указанных

Blender: способы выделения объектов и подобъектов

В результате с этих пяти граней выделения снимутся, а все остальные будут автоматически выделены – произойдет инвертирование.

Выделение отверстий (дыр) в объекте

Blender: способы выделения объектов и подобъектов

2. Выделение подобъектов расположенных в ряд

Blender: способы выделения объектов и подобъектов

Blender: способы выделения объектов и подобъектов

Blender: способы выделения объектов и подобъектов

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

Blender: способы выделения объектов и подобъектов

3. Ручное выделение множества подобъектов

Выделение прямоугольной рамкой

Blender: способы выделения объектов и подобъектов

Выделение окружностью

Blender: способы выделения объектов и подобъектов

Снятие выделений с подобъектов данным инструментом происходит путем нажатия на колесо мыши.

Выделение произвольной формой

Blender: способы выделения объектов и подобъектов

Рассмотренными способами можно выделять как объекты, так и подобъекты во всех режимах отображения.

4. Автоматическое выделение подобъектов по указанным признакам

Выделение вершин по указанным признакам

Вершины можно выделить по следующим признакам:

Blender: способы выделения объектов и подобъектов

Blender: способы выделения объектов и подобъектов

Выделение ребер по указанным признакам

Blender: способы выделения объектов и подобъектов

Выделение граней по указанным признакам

Blender: способы выделения объектов и подобъектов

Blender: способы выделения объектов и подобъектов

Blender: способы выделения объектов и подобъектов

Другие полезные уроки по Blender на нашем сайте:

Перепечатка и использования данного материала без прямой обратной ссылки категорически запрещена!

UV-развертка необходима для того, что-бы мы могли наложить текстуру на 3D-объект. А если точнее, с помощью развертки мы указываем как именно 2D текстура должна накладываться на 3D объект.

Я буду показывать на примере Blender 2.8. На примере кубика, так как его геометрия самая простая, да и он есть на сцене с самого начала. Если выбрать куб и перейти на вкладку UV-Editing, то вы увидите вот такую картину.

Как сделать UV-развертку в Blender 2.8+

Нажатием на TAB перейдем в режим редактирования и выберем все вершины нажатием A. Слева мы увидим уже готовую развертку для куба.

Как сделать UV-развертку в Blender 2.8+

Но, что делать если геометрия не стандартная? Для этого нужно подумать как разместить швы.

Швы - это разрезы на поверхности 3D объекта, которые разрезают объект так чтобы его можно было развернуть на плоскость.

Хм, наверное звучит не совсем понятно, но думаю я смогу показать все на примере. Давайте изуродуем развертку этого куба как по нашему мнению "будет лучше"(нет)😁.

Я выделил верхние несколько граней. Делается это ЛКМ в режиме выделения граней, который в свою очередь выбирается вверху слева или на цифрах на клавиатуре, нажатием 2.

Как сделать UV-развертку в Blender 2.8+

Далее нужно пометить их как швы. Жмем ПКМ и в меню выбираем Mark seam (Пометить шов). Далее снова выбираем все кнопкой A и сверху в меню выбираем пункт UV. В выпавшем меню жмем Unwrap. Слева отобразиться новая развертка.

Как сделать UV-развертку в Blender 2.8+

Кхм, даа.. Ну, что навыделяли то и получили) Все это было сделано для примера и понимания того как нужно или ненужно делать развертку. Думаю лучше вернуть старую развертку. Выделяем все кнопкой A и помечаем все грани как швы. ПКМ - Mark seam. Далее в меню вверху UV - Unwrap.

Как сделать UV-развертку в Blender 2.8+

Не плохо, но это не то что было. Можно конечно и так пользоваться, но мы ведь хотели "как было". Давайте сотрем все метки швов.

Для этого выберем все грани, ПКМ - Clear seam. UV - Unwrap.

Как ни чего не поменялось? Все должно было сработать!

Ладно ладно, шучу, нужно указать стандартные швы в ручную😊.

У меня получилось что-то такое.

Как сделать UV-развертку в Blender 2.8+

Попробуйте сделать это сами, а что-бы помочь понять "как?". Представьте, что этот куб нужно собрать из картона или бумаги. Слева эта самая бумага и показывается. А швы это разрезы по собранному кубу.

Для упрощения задачи в меню UV есть пункт Live unwrap. Он будет отображать изменения сразу на текстуре. Однако не забывайте, что развертка на текстуре отображается только когда выбрано что-то, например все.

Рисование по объекту

Ну вот вы и разобрались как делать развертку. Возможно даже уже нажали на пункт верхнего меню Texture paint. И при попытке что-то нарисовать у вас вылезла ошибка "нет текстуры". Все правильно. Мы ведь не сохранили текстуру и не назначили ее объекту.

На вкладке Texture paint в верхнем меню выбираем New и в новом окне настраиваем параметры и название будущей текстуры.

Как сделать UV-развертку в Blender 2.8+
Как сделать UV-развертку в Blender 2.8+

И сохраняем текстуру куда угодно, лучше в папку с вашим проектом.

После этого необходимо наложить текстуру на объект. В правом меню выбираем пункт "Настройки материалов" и уже в материале меняем просто цвет на текстуру.

Как сделать UV-развертку в Blender 2.8+
Как сделать UV-развертку в Blender 2.8+
Как сделать UV-развертку в Blender 2.8+

Куб почернел, так как текстура пустая. Теперь можно красить куб удобным способом. Например можно делать это прямо в Blender.

Вы уже находитесь там где нужно. Попробуйте порисовать на кубе, просто левой кнопкой мыши. Слева, на текстуре, сразу будет виден результат.

Как сделать UV-развертку в Blender 2.8+

Текстуру нужно сохранять после изменения, как мы уже сохраняли.

Так же, естественно, можно редактировать текстуру в любом графическом редакторе, например, GIMP, PhotoShop и т.д.

Ну вот, думаю к этому моменту вы уже понимаете как сделать UV-развертку в Blendr 2.8+. Спасибо за внимание и легкого моделирования!

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

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

Я уже достаточно давно печатаю и крашу фигурки. Но не всегда можно найти подходящую. Надо двигаться дальше, и вот решил создать интересную фигурку уже не из готовой модели, а из того, что осталось, то есть из заготовок. А заодно и рассказать, как делать Rigging модели в Blender’е.

Риггинг – это процесс создания скелета у 3д модели, при помощи которого впоследствии создаются позы персонажа и анимация.

Итак, что же мне досталось?

Магосы кузней Марса прислали мне СШК файлы из неведомых архивов с изображением ассасина храма Каллидус. Изображения были в формате OBJ были разъединены на отдельные плоскости и с кучей ошибок. Предположительно это модель для модификации какой-то игры из Вархаммера.


1) После этого я импортировал модель в Blender: File – import — .Stl . Перед началом работы важно так спозиционировать модель, чтобы её линия симметрии располагалась на центре координат (это важно).


2) Для того чтобы создать скелет нужно нажать Add (Shift + A) – Armature – single bone. Для того, чтобы наш скелет был виден сквозь предметы нужно поставить галочку X-Ray во вкладке Арматуры (рисунок человечка). Также стоит поставить галочку Names там же, чтобы видеть названия костей.


3) Появится маленькая кость в виде пирамидки. Ее можно крутить, масштабировать и перемещать, как и привычный объект в Блендере. В Edit Mode при Экструдировании (E) вытягивается ещё одна новая кость. Для создания кости не связанной с остальными работает комбинация Shift + A. Каждую кость нужно перемещать внутри тела так чтобы она была на своём месте. Это не значит, что у нас должно быть 33 позвонка, но в остальном нужно стараться придерживаться реальной анатомии, повторяя те кости, которые имеют суставы. Коса у нашей девушки тоже должна изгибаться под своим весом, поэтому в ней много костей. Чтобы было более удобно и быстро размещать кости лучше пользоваться ортогональными видами (клавиши Numpad ’а).


4) Таким образом, мы прописываем кости везде, где считаем нужным (кроме тех конечностей, которые симметричны).


6) Теперь нужно добавить инверсную кинематику. Перейдём на вид сбоку и добавим как бы шпору и отдельную кость около колена.

Для того чтобы кость инверсной кинематики не была соединена ни с одной из костей скелета, выбираем в Edit Mode эту кость, затем Alt + P и Clear parent .


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


7) Выберем кость Foot1.l зажмём Shift и добавим к ней LegIK.L, а затем Make parent (Ctrl + P) и пункт Keep offset. Теперь наша стопа крутиться, если покрутить LegIK.L


8) Для добавления инверсной кинематики в режиме Pose Mode выберем кость LegIK.L зажмём Shift и добавим к ней Leg.L, а затем выберем Add constraint (Ctrl + Shift + C) — Inverse Kinematics. Кость ноги при этом окрасится в желтоватый цвет.


9) Выберем жёлтую кость и зайдём во вкладку ограничений и настроим инверсную кинематику, установим Chain Length – 2, то есть наша кость инверсной кинематики будет увлекать за собой 2 кости. Также чтобы наша нога могла поворачиваться из стороны в сторону, сделаем ограничение Pole Target – Armature – Target . L. Попробуем согнуть нашу ногу за LegIK.L. Если нога сгибается неправильно, возможно, следует поиграться с параметром Pole Angle .

Сделаем таким же образом ещё и руку и косу.


10) Сделаем зеркальную копию нашей ноги. Для этого перейдём на вид спереди (клавиша 1) и заменим Центр вращения на 3д курсор и поместим сам курсор в начало координат зажав Shift + S и выбрав Cursor to center.


После чего в Edit Mode выберем все наши кости для копирования и нажмём следующую волшебную комбинацию: Shift+D , S , X , -1, Enter . Теперь наши кости продублировались, и чтобы написать им правильные имена не снимая выделения с них, зайдём в меню Armature – Flip Names.

11) После того как все кости созданы, соединим их между собой: Выберем кость бедра в Edit Mode затем, затем зажмём Shift и добавим Spine3, выполним операцию Make parent (Ctrl + P) – Keep offset


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


12) Выберем в Object Mode наше тело, затем через Shift скелет и нажмём на Set parent to (Ctrl+P) — Armature Deform — With Automatic Weights. Теперь наша модель соединена со скелетом и при движении костей она будет деформироваться, но не всегда правильно.


13) Теперь выберем нашу модель и перейдём в режим Weight Painting, где начнём раскрашивать веса.


Вот так выглядит кость с автоматически проставленными весами. Как мы видим тут цветовая палитра от красного к синему. Красные части строго следуют за моделью, а на синие части влияние у кости отсутствует. При промежуточных цветах происходит деформация полигонов при движении.


Раскрашивать нашу модель следует так: красным — там где нет деформации при движении, например грудная клетка, а также всякие навесные элементы, как подсумки. ремешки, бляхи и пр. Промежуточными цветами нужно красить места сочленения костей, стараясь сделать переход как можно более плавным.


Есть кисточки, которыми мы будем раскрашивать нашу модель:


Две самые часто распространённые кисти это Mix и Blur. Первая кисть лучше подходит для покраски вершин в нужный цвет. Вторая кисть лучше всего подходит для растушёвывания цвета, т.е. для создания плавных переходов.

Параметр Weight – это сила закрашивания вершин, Для кисти Mix: 0 – синий цвет, 1 – красный. Radius – размер кисти, хотя я предпочитаю масштабировать саму модель, а не менять её размер. Strength – отвечает за силу применения эффекта кисти (я её не трогал при работе).

То, что я пометил стрелочкой — это и есть сама кисть, т.е. курсор превращается в такой вот кружочек.

Самая распространённая новичковая ошибка при распределении весов – это случайная покраска весом совершено не соответсвующей части тела. Поэтому если вдруг у вас при сгибании руки внезапно деформируется также пятно на животе – ищите в костях руки покрашенное пятно и убирайте его.

Как понять, что вы всё сделали правильно? Да очень просто (ирония)– нужно лишь проверить каждую кость, крутя её в Pose Mode и наблюдая, есть ли неестественная деформация. И справлять, исправлять, исправлять! Процесс не то чтобы сложный, но скорее муторный, если модель имеет много костей.

Поэтому запасаемся терпением и красим каждую кость.

В этом ограничении стоит указать нужную кость: Target – Armature , Bone – Palm.L, т.к. крепится пистолет будет к кости ладони.

Если наш предмет внезапно пропал из виду, нужно нажать Set Inverse.


Теперь при движении наши предметы будут следовать за руками. Проделаем ту же операцию и с ножом.

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

Если Вы сделали что-то не так, то выделите в режиме Pose Mode нужные кости и выберите Pose — Clear Transform – All. Это вернёт их в первоначальное положение.


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


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



В конце получился вот такой вот пафосный ассасин, которого я конечно же буду печатать, красить и дорабатывать.


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

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

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

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

Для выполнения данного урока вам понадобится персонаж. Можете использовать того, что прилагается к уроку или воспользоваться собственным (так даже лучше будет).

Финальный результат

  • Синий – нет воздействия (0)
  • Зеленый – 50% воздействия (0.5)
  • Красный – 100% воздействия (1)

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

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


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

В местах изгибов две кости могут воздействовать на одни и те же вершины. Старайтесь равномерно распределять между ними веса, чтобы сумма всех весов была равна 1. Например, 0.5 для одной кости и 0.5 для другой. Это даст наилучшие результаты.


Вы также можете редактировать сам меш в режиме редактирования для достижения лучших результатов деформации.


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




Вот собственно и все! Персонаж готов к анимации 🙂

Модификатор Скелет используется для построения скелетных систем для анимации и позы персонажей и все остальное, что должно иметь позы.

Путем добавления скелетной системы к объекту, этот объект может быть деформирован так, что геометрия не должны быть анимирована вручную.

Для более подробной информации использования скелета смотри Эту главу.

Опции¶


Имя объекта скелета которое будет использовать этот модификатор.

Использование кватернионов для сохранения объема объекта в процессе деформации. Это может быть лучшим вариантом во многих ситуациях.

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

Смысл только при наличии по крайней мере двух из этих модификаторов на один и тот же объект с включенной опцией Мультимодификатор

Инвертирует влияния установленных группой вершин, определенные в предыдущий параметре (т. е. инвертирует значения веса этой группы).

Использует те же данные, что предыдущий модификатор (обычно такой же модификатор Скелет) в качестве входных данных. Это позволяет вам использовать несколько скелетов для деформации одного и того же объекта, все они основаны на “недеформированных” данных (т. е. это избавляет от необходимости второго модификатора скелет).

Результаты модификаторов скелет затем смешиваются вместе, используя весы группы вершин как “смесь направляющих”.

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

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

Когда эта функция включена, кости будут деформировать вершины рядом с ними (определяется для каждой кости оборачивающим радиусом) включить/отключить обертку костей для определения деформации (т. е. деформации костей вершин в своем районе).

Модификаторы скелета могут быть быстро добавлены к объектам с помощью ( Ctrl-P ) если активный объект является скелетом.

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