コレクションとビューレイヤーコレクションの違い、ビューレイヤーコレクションへのアクセス方法について説明する。
問題提起
コレクションの一部オプションは、ビューレイヤーごとの設定である(「ビューレイヤーでのビューポート非表示(目アイコン)」と「ビューレイヤーから除外」など)。
これらの設定はビューレイヤーからアクセスする必要があり、bpy.data.collectionsから変更することができない。
深い階層にあるビューレイヤーコレクションは、その階層まで指定する必要があり、簡単にアクセスすることができない(例:layer_collection.children["hoge"]では、hogeが深い階層のコレクション内にある場合は取得できない)。
解決法
一旦全てのビューレイヤーコレクションの階層を全て取得し、そのリストから名前指定することで、欲しいコレクションのビューレイヤーにおけるデータを取得することができる。
全ビューレイヤーコレクションを取得する
def get_all_vl_colle(tgt_colle, all_l): for i in tgt_colle: for c in i.children: all_l += [c] get_all_vl_colle(c.children, all_l) return set(all_l) vl = bpy.context.view_layer all_l = vl.layer_collection.children.values() for i in get_all_vl_colle(all_l, all_l): i.name i.exclude = True i.hide_viewport = True i.collection.hide_viewport = True i.collection.hide_select = True i.collection.hide_render = True
excludeやhide_viewportはビューレイヤーコレクション、コレクション実データの hide_viewport やhide_renderは、ビューレイヤーコレクション.collectionから指定する。