КДПВ. System's check.

Дисклеймер


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

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


Рисунок 0. Пруфпик.

Или когда вы импортируете .stl-файл (непустой), и вроде импорт прошел, а объекта на сцене не видно.
Или вы из MakeHuman человека импортируете и прекрасно его видите, но не понимаете, у него кисти рук — это отдельный объект или нет? А глаз? И начинаете щелкать по модели.
И вам становится грустно и хочется понять менеджмент объектов в Blender. А тут как раз я подошел.
В общем, хватит лирики, вперед. Пост длинный, но не очень.

Менеджмент данных


Как я уже писал, в Blender есть основная единица работы — это объект. И это контейнер. Он содержит в себе название, origin, геометрию, список модификаторов и массу других данных — если это геометрический объект. Потому что лампа или кость — это тоже объект, наряду с геометрическим.

Изначально все объекты равны, что кубики, что лампы, что кости.

Что предоставляет Blender


В Blender есть:
  • навигация по всем объектам файла и просмотр/редактирование детальной инфы по объекту.
  • группировка (тегирование aka группы / иерархия aka parenting (beware, в хелпах встречаются утверждения, что парентинг морально устарел и надо вовсю юзать Child Of))
  • управление видимостью (индивидуальная/групповая, а также рабочая/рендерная)

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

Навигация / просмотр инфы


Все, что вы уже наваяли в данном файле, отображается в области аутлайнера (я его ранее называл “Область содержимого сцены” для единообразия, но, думаю, эффект уже достигнут и далее я буду называть его аутлайнером).
Замечу, что ребята из BF вставили аутлайнер в дефолтный стартовый конфиг (пусть это и добавляет шума), наряду с областью таймлайна, например. То есть, на то, что менеджмент объектов важен, они тоже указывают с самого начала.


Рисунок 1. Аутлайнер.

Скрин аутлайнера с более-менее нетривиальной моделью (танком, собственно) приведен на рисунке 1. Слева — дерево объектов. Обратите внимание на его корень (об этом позже). Каждая оранжевая иконка — это один объект. Каждая серая иконка — это геометрия объекта (заметьте, у геометрии есть имя, и оно не всегда совпадает с именем объекта — ниже приведена одна из причин). По клику на эти иконки происходит выделение соответствующего артефакта.
Видны и модификаторы объекта. И то, что камера — это объект, тоже видно. И на вложенность объектов обратите внимание (я как бы невзначай назвал один объект «A parent»). И на три столбика справа — при наведении на иконки будут подсказки.

От аутлайнера не укроется почти ничего. Он знает все и всех сдаст с потрохами. Это серый кардинал Blender. Ситуация в 3D области — сиюминутна по определению (см. ниже). Ситуация в области параметров — контекстно-зависима и описывает только один объект. То, что показано в аутланере — это монументально и всеохватывающе. Будьте большим братом для своих объектов — пользуйтесь аутлайнером.

Если вы потеряли объект или не уверены, одна у вас тут кривая или их уже четыре поверх друг друга, или при импорте объект вроде прошел, но его не видно в 3D области (оказалось, он в нескольких тысячах юнитов в стороне и при этом неприлично конского размера) — аутлайнер разьяснит. Это его основная функция.
Формат отображения списка объектов выбирается в дропдауне вверху по центру области.

Группировка объектов


Имея на руках кучу объектов — надо иметь возможность ими как-то управлять. Итак.

Сцены


Как видно на скрине аутлайнера, корень дерева объектов — сцена. Это не просто контейнер объектов, это контейнер вообще всего (объектов, материалов и пр.).

Так вот сцен в рамках одного файла можно делать сколько угодно. Можно делать полностью новые, можно делать новые с ссылками на существующие объекты. Сцена настолько глобальна, что я ни разу ни пользовался двумя сразу в одном файле переключение между сценами идет не через область 3D, а через область меню, вот тут:


Рисунок 2. Контрол управления сценами. Логика та же, что и у соседнего контрола управления лэйаутами.

Вряд ли вам понадобится это в ближайшем времени.

Группы объектов


Объекты можно группировать. Выделяем нужные, жмем Ctrl-G. Выделенная группа подсвечивается зеленым, а не оранжевым.

Но тут ребята из BF с терминами, имхо, перемудрили. Потому что группы — это не контейнеры (как, по крайней мере, я ожидал). Это, фактически, теги. Один и тот же объект может входить в разные группы. А вот группа не может входить в другую группу:


Рисунок 3. Группы в атулайнере. Отображаются далеко не во всех форматах отображения списка. Дефолтный (All Scenes) групп не показывает. В Groups, естественно, видны. Обратите внимание на объект «Cube».

Переименовывать группы проще из аутлайнера (ПКМ -> Rename).
Выделить можно из аутлайнера, а можно и из 3D области (выделяем объект, жмем Shift-G, выбираем Group).

В Blender группы — это теги и область применения у них соответствующая.

N.B. Базовые операции над объектом из группы не влияют на другие объекты группы, в отличие от…

Родители и ограничения


На рисунке 1 видно, что некоторые объекты являются дочерними по отношению к другим. Это все потому, что родительские объекты в явном виде были указаны мной как родительские. Чтобы организовать родительство, надо: выделить объекты (с помощью Shift-ПКМ), причем будущий родитель должен быть последним выделяемым. Жмем Ctrl-P и выбираем, например “Object”:


Рисунок 4. Меню назначения родительства.

В результате имеем:


Рисунок 5. Cube — родитель у Cube.001 и Cube.002. А вот Cube.001 — родитель только для Cube.002. Вообще, уровень вложенности вроде как не ограничен.

В 3D области между origin родителя и детей рисуется пунктирная линия.
Если к родителю применить базовую операцию, то она применится и ко всем его детям. И внукам. И правнукам.
При назначении нового родителя старый сбрасывается. Убрать родительство — Alt-P на ребенке.
Очевидная область применения — зависимые объекты. Шасси танка — это родитель для башни.

Выше было указано, что родительство BF считают deprecated и рекомендуют Child Of. О чем нам это говорит? Во-первых, о том, что Blender — продукт серьезный и успел пожить. Во-вторых, что такое Child Of? Это constraint, ограничение. Ограничения объекта настраиваются во вкладке Constraints:


Рисунок 6. Вкладка constraints. Ограничения добавлются из выпадающего списка.

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

В чем преимущества применения этого ограничения?

Во-первых, в том, что на количество ограничений ограничений нет (я прям почувствовал, как у меня скилл тавтологии прокачался). Т.е. один объект может быть child of семи других объектов.

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

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

Дубликаты и слияние


Имхо, это тоже больше относится к менеджменту, чем к просто к работе с объектами, поэтому опишу тут, но под спойлером.

Как сделать забор и цветочки
Время от времени требуется забить сцену массой однообразных объектов (доски забора, шляпки болтов M6, цветочки какие-нибудь). Можно, конечно, копипастить, но это не совсем manageable solution так сказать. Лично я знаю 2 более управляемых варианта:
  • Модификатор Array
  • Дубликаты


Про модификаторы я уже писал ранее, и Array ничем особенным не отличается — берем объект, накладываем на него Array и получаем результат. Для забора — отлично подходит. В аутлайнере объект остается один, но с индикацией примененного модификатора.

Дубликаты. Технически — это неполные копии объектов (то есть это не беспощадный копипаст) — вместо некоторых данных у них ссылки на данные оригинала. Есть 2 типа дубликатов (сейчас я цитирую BF — «поверхностная связь» и «глубокая связь»). Для создания — выделяем объект и нажимаем Shift-D (или Object-> Duplicate Objects) или Alt-D (или Object-> Duplicate Linked, курсив авторский) соответственно.

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

Глубокая связь — ссылка вместо копии почти на все, включая геометрию, но исключая трансформацию. В аутлайнере индицируется совпадающим названием геометрии. Шляпки болтов рекомендуют.

Объекты можно слить в один — выделяем все необходимые и жмем Ctrl-J (или Object->Join). Геометрия всех объектов сливается в геометрию последнего выделенного, в аутлайнере остается только последний выделенный. Очень полезная иногда операция.


Резюмируя раздел «Группировка объектов». Явного аналога каталогов нет. Но есть теги, что прогрессивно (но UI у них сложноватый, что не так прогрессивно). Объекты могут зависеть друг от друга тем или иным образом — не забывайте это при рассматривании чужих файлов.

Управление видимостью


Функция “спрятать” (переключение видимости для выделенного объекта(ов))


Активируется 2-мя способами:
  • Аутлайнер: иконка глаза напротив объекта/группы.
  • Область 3D-сцены: H / Alt-H для выделенного объекта (ов).


Слои (переключение видимости для набора объектов)


В рамках одной сцены можно управлять видимостью объектов на уровне слоев. Имхо, если вы активно пользуетесь группами, то слои вам и не нужны — можно вырубать видимость группы из аутлайнера. Но возможность все-таки есть.
Отображение слоев не такое, как в фотошопе, например. Вот так они выглядят в интерфейсе (каждый квадрат = слой):


Рисунок 7. UI слоев.

Светлый квадрат — скрытый на данный момент слой, темный — отображаемый. Если есть шарик — слой содержит что-то. Если шарик оранжевый — слой содержит что-то и это из этого “что-то” вы что-то выделили. Клик по квадрату отображает данный слой и скрывает все остальные отображенные до этого. Shift-клик — отображает/скрывает данный слой, не скрывая остальные отображенные до этого.

Любой выделенный объект/группу можно переместить на любой слой. Выделите объект/группу и нажмите M, появится окно выбора слоя:


Рисунок 8. Попап выбора слоя, на который будет перемещен объект.

Щелкните по нужному квадрату — и объект будет перемещен в указанный слой.

Способ отрисовки в 3D области


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


Рисунок 9. Выбор способа отрисовки объектов в 3D области.

По умолчанию стоит Solid (полигоны отображаются, а текстуры на них — нет). При редактировании геометрии или при поиске запрятанных объектов очень помогает Wireframe (полигоны не отображаются). Переключаться между Solid и Wireframe можно по Z.

Сохранение файла


Собственно, теперь вы знаете, где у вас что.
Осталось только сохранить файл (Ctrl-S, ну или через меню). И вот тут Blender наносит удар (Win-версия):


Рисунок 10. Blender спрашивает, куда сохранить файл и под каким именем.

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

Версионность


Касательно “Очень интересной функции” из предыдущего скрина (понадобится на более поздних этапах). Она накручивает число после названия файла (но до расширения): temp1.blend, temp2.blend и т.д. Это можно сделать и руками, но так ведь удобнее. Таким изящным способом в Blender можно делать хоть какую-то user-controlled версионность. Вообще, это не камень в огород Blender — все так делают (“Совсем финальный отчет 12.docx”), просто в BF решили пилюлю подсластить. Это ? версионности.

Оставшаяся ? версионности — встроенное в Blender подобие, которое заключается в том, что Blender при нажатии Ctrl-S сохраняет файл с инкрементом числа, идущего уже после расширения (temp.blend2), но по мне это громоздко и неконтроллируемо (одно дело я руками чекиню, другое — просто обновляю текущий вариант), так что этот механизм я не использую:


Рисунок 11. Настройки встроенного механизма версионности Blender.

Однако, недавно я таки познал git, после чего нашел следующий плагин github.com/ldo/blendgit. Не проверял.

Заключение


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

На данный момент все области стартового UI я описал (за исключением таймлайна, но я не верю в анимацию для совсем новичков. А меню описывать — это вообще оскорбительно для читающих, я считаю). Осталось нарисовать-таки танк, но это — в следующей серии.

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


  1. Leopotam
    14.12.2015 16:08

    В 3D области между родителями и детьми рисуется пунктирная линия

    Нужно уточнить — между origin-ами объектов. Если они будут совпадать (а такое бывает), то линии визуально не будет.

    З.Ы. Outliner пожалуй единственная невменяемая и недружественная к пользователю вещь в блендере :(


    1. unbalanced
      14.12.2015 16:15

      Обновил.


  1. Loki3000
    17.12.2015 12:58

    Почитал ваши статьи и решил что пора использовать 3D в свои интересах. Надо было нарисовать эскиз одной железки. Форма довольно простая — лист железа согнутый дугой в двух плоскостях. Казалось бы, проще некуда, но в блендере я убил на это кучу времени. Так и не добившись, впрочем, результата. Как выяснилось, инструмент bend работает только в одной плоскости, чтобы согнуть элемент в другой плоскости, надо указать еще опорный объект, который хитрым образом вращать. У меня так и не получилось правильным образом повернуть опорный объект. На третий день я сломался, скачал 3DMax шестилетней давности и минут за 10 нарисовал там все что нужно.
    В общем, я расстроен. Не то я такой глупый, не то блендер не так прост как хотелось бы.


    1. unbalanced
      17.12.2015 13:47

      Вот так?


      Если да, то здесь я повернул одно ребро на 90 градусов с применением пропорционального редактирования.
      Технически — 10 секунд, из которых 9 — на создание собственно плоскости.

      Концептуально — я согласен с тем, что у Blender есть проблемы с донесением справочной инфы. Он прост, но его все-таки надо понять. Это ведь не пэинт. :)


      1. Leopotam
        18.12.2015 11:26

        Записал видео как это можно сделать достаточно просто и быстро:


      1. Leopotam
        18.12.2015 11:54

        Извиняюсь, не туда ответил, кривая хабра решила сдохнуть в самый неподходящий момент :(