Как управлять видимостью объектов во вьюпорте и при рендере

Самый простой способ заставить нужный объект появляться и исчезать — назначить ему ключи анимации. Для этого нужно навести курсор на значок глаза (видимость во вьюпорте) или фотоаппарата (видимость при рендере) в окне «Outliner», нажать клавишу «i» и далее в Graph Editor управлять созданным ключом так же, как с обычными ключами анимации.

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

«hide_viewport» property cannot be animated

или

«hide_render» property cannot be animated

Однако с помощью Blender Python API видимостью таких объектов можно управлять.

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

Откроем текстовый редактор и создадим скрипт, управляющий видимостью трех коллекций cube, monkey и sphere.

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

Мы добавили каждой коллекции новый атрибут «toggle_visibility_frame» и присвоили ему список с номерами кадров. Через этот список можно удобно назначать кадры для изменения видимости нужной коллекции.

Соберем коллекции, которым мы присвоили атрибут изменения видимости, в один список для удобного обращения.

Определим функцию, которая будет сверять значение текущего кадра со списком кадров из атрибута «toggle_visibility_frame» и если номер текущего кадра совпадает с номером, указанном в списке — менять видимость коллекции, скрывая или показывая ее.

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

Полный текст готового скрипта:

Выполним скрипт, нажав на кнопку «Run Script» и запустим проигрыш анимации.

В результате коллекции показываются и скрываются в соответствии с назначенными нами кадрами.