... добавлю пару строк Кода, суть которого в том чтобы связать драйверами ограничение визуализируемости объекта с ограничением визуализируемости его родителя ...
... то есть после выполнения указанного Кода для каждого из детей выделенного родителя будет создан свой драйвер на ограничение визуализируемости и, соответственно, при изменении этого ограничения у родителя автоматом будут изменения значения ограничения у детей ...
... далее для анимации нужно только анимировать визуализируемость родителя, что существенно упрощает решение (пример файла во вложении) ...
... при рендеренге анимации в визуализацию включаются или не включаются все дети вслед за родителем по его ограничению ...
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'
... дополненный вариант скрипта - делает связывающие драйверы и для внуков ...
... для расстановки драйверов необходимо выделить родителя и запустить скрипт Alt+P ...
... для работы драйверов потребуется настроить автоматический запуск скриптов https://docs.blender.org/manual/ru/dev/advanced/scripting/security.html#setting-defaults ...
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()