3d форум по Blender

Blender => Риггинг, скиннинг и анимация => Тема начата: Dmi3ryd от 11 Май 2018, 13:50:59

Название: Анимация видимости групп с объектами.
Отправлено: Dmi3ryd от 11 Май 2018, 13:50:59
Всем, доброго дня.

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

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

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

Например локатор в котором есть 5 кубов. Нажимая на невидимость в вьюпорте исчезает локатор, но все содержимое остается.
Название: Re: Анимация видимости групп с объектами.
Отправлено: Samovar от 11 Май 2018, 14:37:37
Самый простой вариант, это не скрывать объекты, а быстро перемещать родительский объект вместе с потомками куда-нибудь далеко в "кукуево" за пределы видимости камеры в сцене (допустим под плоскость условной "земли", или далеко за камеру с её обратной стороны, или на расстояние сверх максимального расстояния отсечения камеры), а потом возвращать его на место. Всё с помощью интерполяции типа Constant... В данном варианте надо сделать только анимацию перемещения родителя. Как вариант, можно попробовать мгновенно масштабировать родителя в 0 и обратно...
Варианты с видимостью/невидимостью в рендере более замороченный и на него драйвер не навесишь, увы...
Название: Re: Анимация видимости групп с объектами.
Отправлено: Dmi3ryd от 11 Май 2018, 14:56:44
К сожалению первый вариант не подходит. Объекты тяжелые, память будет лишняя использоваться.

Т.е. залинковать свойство главного объекта (видимость) на свойство дочернего объекта (видимость) нельзя?
Название: Re: Анимация видимости групп с объектами.
Отправлено: Samovar от 11 Май 2018, 15:04:34
Во вьюпорте вроде можно, но в рендере нельзя... надо анимировать...
Хотя, может и возможно... подожди, старички чего нить ещё посоветуют...
Название: Re: Анимация видимости групп с объектами.
Отправлено: Samovar от 11 Май 2018, 15:19:53
Есть ещё один вариант: поместить объекты в отдельный слой и анимировать состояние Exclude в Render Layers (для Cycles)
Название: Re: Анимация видимости групп с объектами.
Отправлено: Николай Николаев от 11 Май 2018, 20:30:16
>> Вопрос. Как сделать уникальный объект, группу, ключ, что-то еще, который можно будет анимировать заставляя исчезать все содержимое группы?
1) выделить содержимое группы (например выделить родителя и Shift+G C) ...
2) в outliner выделить родителя группы, Ctrl+Click нажать на фотоаппарат (при необходимости и на глаз) ...
3) вставить ключевой кадр I A ...
Название: Re: Анимация видимости групп с объектами.
Отправлено: Николай Николаев от 12 Май 2018, 02:48:22
>> 3) вставить ключевой кадр I A ...
... еще один нюанс - что-бы выполнить I A, нужно прощелкать хотя бы один раз в outliner для каждого объекта группы по фотоапарату I (то есть для очень большого количества не подходит) ...
Название: Re: Анимация видимости групп с объектами.
Отправлено: Николай Николаев от 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'
Название: Re: Анимация видимости групп с объектами.
Отправлено: Николай Николаев от 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()
Название: Re: Анимация видимости групп с объектами.
Отправлено: Dmi3ryd от 14 Май 2018, 11:44:05
Большое спасибо! Буду разбираться.