Автор Тема: Анимация видимости групп с объектами.  (Прочитано 904 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Dmi3ryd

  • Житель
Всем, доброго дня.

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

Например один объект может содержать в себе множество других объектов, соединенных с помощью Parent.

Вопрос. Как сделать уникальный объект, группу, ключ, что-то еще, который можно будет анимировать заставляя исчезать все содержимое группы?

Например локатор в котором есть 5 кубов. Нажимая на невидимость в вьюпорте исчезает локатор, но все содержимое остается.

Оффлайн Samovar

  • Житель
Re: Анимация видимости групп с объектами.
« Ответ #1 : 11 Май 2018, 14:37:37 »
Самый простой вариант, это не скрывать объекты, а быстро перемещать родительский объект вместе с потомками куда-нибудь далеко в "кукуево" за пределы видимости камеры в сцене (допустим под плоскость условной "земли", или далеко за камеру с её обратной стороны, или на расстояние сверх максимального расстояния отсечения камеры), а потом возвращать его на место. Всё с помощью интерполяции типа Constant... В данном варианте надо сделать только анимацию перемещения родителя. Как вариант, можно попробовать мгновенно масштабировать родителя в 0 и обратно...
Варианты с видимостью/невидимостью в рендере более замороченный и на него драйвер не навесишь, увы...
« Последнее редактирование: 11 Май 2018, 14:54:42 от Samovar »

Оффлайн Dmi3ryd

  • Житель
Re: Анимация видимости групп с объектами.
« Ответ #2 : 11 Май 2018, 14:56:44 »
К сожалению первый вариант не подходит. Объекты тяжелые, память будет лишняя использоваться.

Т.е. залинковать свойство главного объекта (видимость) на свойство дочернего объекта (видимость) нельзя?

Оффлайн Samovar

  • Житель
Re: Анимация видимости групп с объектами.
« Ответ #3 : 11 Май 2018, 15:04:34 »
Во вьюпорте вроде можно, но в рендере нельзя... надо анимировать...
Хотя, может и возможно... подожди, старички чего нить ещё посоветуют...

Оффлайн Samovar

  • Житель
Re: Анимация видимости групп с объектами.
« Ответ #4 : 11 Май 2018, 15:19:53 »
Есть ещё один вариант: поместить объекты в отдельный слой и анимировать состояние Exclude в Render Layers (для Cycles)

Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
Re: Анимация видимости групп с объектами.
« Ответ #5 : 11 Май 2018, 20:30:16 »
>> Вопрос. Как сделать уникальный объект, группу, ключ, что-то еще, который можно будет анимировать заставляя исчезать все содержимое группы?
1) выделить содержимое группы (например выделить родителя и Shift+G C) ...
2) в outliner выделить родителя группы, Ctrl+Click нажать на фотоаппарат (при необходимости и на глаз) ...
3) вставить ключевой кадр I A ...

Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
Re: Анимация видимости групп с объектами.
« Ответ #6 : 12 Май 2018, 02:48:22 »
>> 3) вставить ключевой кадр I A ...
... еще один нюанс - что-бы выполнить I A, нужно прощелкать хотя бы один раз в outliner для каждого объекта группы по фотоапарату I (то есть для очень большого количества не подходит) ...

Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
Re: Анимация видимости групп с объектами.
« Ответ #7 : 12 Май 2018, 08:08:31 »
... добавлю пару строк Кода, суть которого в том чтобы связать драйверами ограничение визуализируемости объекта с ограничением визуализируемости его родителя ...
... то есть после выполнения указанного Кода для каждого из детей выделенного родителя будет создан свой драйвер на ограничение визуализируемости и, соответственно, при изменении этого ограничения у родителя автоматом будут изменения значения ограничения у детей ...
... далее для анимации нужно только анимировать визуализируемость родителя, что существенно упрощает решение (пример файла во вложении) ...
... при рендеренге анимации в визуализацию включаются или не включаются все дети вслед за родителем по его ограничению ...

Код: python [Выделить]
import bpy
for ob in bpy.context.selected_objects:
    hr = ob.hide_render
    chs = [x for x in bpy.data.objects if x.parent is not None and x.parent.name==ob.name]
    for ch in chs:
        ch.driver_remove("hide_render",-1)
        dv = ch.driver_add("hide_render",-1).driver
        dv.type = 'SCRIPTED'
        dv.expression = 'var_hide_render'
        vv = dv.variables.new()
        vv.name = 'var_hide_render'
        vv.type = 'SINGLE_PROP'
        vv.targets[0].id = ob
        vv.targets[0].data_path = 'hide_render'

Оффлайн Николай Николаев

  • Житель
  • emerge --keep-going
Re: Анимация видимости групп с объектами.
« Ответ #8 : 12 Май 2018, 11:58:36 »
... дополненный вариант скрипта - делает связывающие драйверы и для внуков ...
... для расстановки драйверов необходимо выделить родителя и запустить скрипт Alt+P ...
... для работы драйверов потребуется настроить автоматический запуск скриптов https://docs.blender.org/manual/ru/dev/advanced/scripting/security.html#setting-defaults ...

Код: python [Выделить]
import bpy


def subdrive(ob):
    print(ob.name)
    chs = [x for x in bpy.data.objects if x.parent is not None and x.parent.name==ob.name]
    for ch in chs:
        for t in ['hide','hide_render']:
            ch.driver_remove(t,-1)
            dv = ch.driver_add(t,-1).driver
            dv.type = 'SCRIPTED'
            dv.expression = t
            vv = dv.variables.new()
            vv.name = t
            vv.type = 'SINGLE_PROP'
            vv.targets[0].id = ob
            vv.targets[0].data_path = t
        subdrive(ch)

def main():           
    for ob in bpy.context.selected_objects:
        subdrive(ob)

main()

Оффлайн Dmi3ryd

  • Житель
Re: Анимация видимости групп с объектами.
« Ответ #9 : 14 Май 2018, 11:44:05 »
Большое спасибо! Буду разбираться.

 


* По форуму

* Последние вложения

First.jpg
Скачано: 15
Автор: R_M_S
8.jpg
Скачано: 19
Автор: R_M_S
2.jpg
Скачано: 22
Автор: R_M_S
Screenshot_1.png
Скачано: 22
Автор: Kartmun
screen.png
Скачано: 257
Автор: Samovar