КДПВ. System's check.
Дисклеймер
Как вы заранее догадались, в этой серии я тоже не покажу, как нарисовать танк. В этой серии я напишу про менеджмент объектов (в прошлой писал про геометрию). Просто потому, что сейчас — самое время (вообще, я хотел вставить эту часть сразу после первой, но не срослось).
Вы уже знаете о том, как в Blender работать с объектами и с их геометрией. Чего вы еще (возможно) не знаете — какой это ад, когда
Рисунок 0. Пруфпик.
Или когда вы импортируете .stl-файл (непустой), и вроде импорт прошел, а объекта на сцене не видно.
Или вы из MakeHuman человека импортируете и прекрасно его видите, но не понимаете, у него кисти рук — это отдельный объект или нет? А глаз? И начинаете щелкать по модели.
И вам становится грустно и хочется понять менеджмент объектов в Blender. А тут как раз я подошел.
В общем, хватит лирики, вперед. Пост длинный, но не очень.
Менеджмент данных
Как я уже писал, в Blender есть основная единица работы — это объект. И это контейнер. Он содержит в себе название, origin, геометрию, список модификаторов и массу других данных — если это геометрический объект. Потому что лампа или кость — это тоже объект, наряду с геометрическим.
Изначально все объекты равны, что кубики, что лампы, что кости.
Что предоставляет Blender
В Blender есть:
- навигация по всем объектам файла и просмотр/редактирование детальной инфы по объекту.
- группировка (тегирование aka группы / иерархия aka parenting (beware, в хелпах встречаются утверждения, что парентинг морально устарел и надо вовсю юзать Child Of))
- управление видимостью (индивидуальная/групповая, а также рабочая/рендерная)
Т.е. можно обозреть всю картину, развесить ярлыки и разложить по полочкам, а также спрятать ненужное в данный момент.
И еще Blender на ? поддерживает версионность.
Навигация / просмотр инфы
Все, что вы уже наваяли в данном файле, отображается в области аутлайнера (я его ранее называл “Область содержимого сцены” для единообразия, но, думаю, эффект уже достигнут и далее я буду называть его аутлайнером).
Замечу, что ребята из BF вставили аутлайнер в дефолтный стартовый конфиг (пусть это и добавляет шума), наряду с областью таймлайна, например. То есть, на то, что менеджмент объектов важен, они тоже указывают с самого начала.
Рисунок 1. Аутлайнер.
Скрин аутлайнера с более-менее нетривиальной моделью (танком, собственно) приведен на рисунке 1. Слева — дерево объектов. Обратите внимание на его корень (об этом позже). Каждая оранжевая иконка — это один объект. Каждая серая иконка — это геометрия объекта (заметьте, у геометрии есть имя, и оно не всегда совпадает с именем объекта — ниже приведена одна из причин). По клику на эти иконки происходит выделение соответствующего артефакта.
Видны и модификаторы объекта. И то, что камера — это объект, тоже видно. И на вложенность объектов обратите внимание (я как бы невзначай назвал один объект «A parent»). И на три столбика справа — при наведении на иконки будут подсказки.
От аутлайнера не укроется почти ничего. Он знает все и всех сдаст с потрохами. Это серый кардинал Blender. Ситуация в 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 (шасси может нырять и выныривать, а дуло не шелохнется, но при этом при уходах влево-вправо будет реагировать).
В аутлайнере ограничения (как и модификаторы, например) индицируются значком напротив объекта, а не вложенностью (как родительство).
Дубликаты и слияние
Имхо, это тоже больше относится к менеджменту, чем к просто к работе с объектами, поэтому опишу тут, но под спойлером.
- Модификатор 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)
Loki3000
17.12.2015 12:58Почитал ваши статьи и решил что пора использовать 3D в свои интересах. Надо было нарисовать эскиз одной железки. Форма довольно простая — лист железа согнутый дугой в двух плоскостях. Казалось бы, проще некуда, но в блендере я убил на это кучу времени. Так и не добившись, впрочем, результата. Как выяснилось, инструмент bend работает только в одной плоскости, чтобы согнуть элемент в другой плоскости, надо указать еще опорный объект, который хитрым образом вращать. У меня так и не получилось правильным образом повернуть опорный объект. На третий день я сломался, скачал 3DMax шестилетней давности и минут за 10 нарисовал там все что нужно.
В общем, я расстроен. Не то я такой глупый, не то блендер не так прост как хотелось бы.unbalanced
17.12.2015 13:47Вот так?
Если да, то здесь я повернул одно ребро на 90 градусов с применением пропорционального редактирования.
Технически — 10 секунд, из которых 9 — на создание собственно плоскости.
Концептуально — я согласен с тем, что у Blender есть проблемы с донесением справочной инфы. Он прост, но его все-таки надо понять. Это ведь не пэинт. :)Leopotam
18.12.2015 11:54Извиняюсь, не туда ответил, кривая хабра решила сдохнуть в самый неподходящий момент :(
Leopotam
Нужно уточнить — между origin-ами объектов. Если они будут совпадать (а такое бывает), то линии визуально не будет.
З.Ы. Outliner пожалуй единственная невменяемая и недружественная к пользователю вещь в блендере :(
unbalanced
Обновил.