ノードグループとは違い、バンドル内のノードは、異なるノードネットワークにあっても構いません。
例えば、同じバンドル内に/obj/geo1
と/obj/subnet1/geo2
を含めることができます。
ノードグループは、主に非常に大きなネットワークを整理して表示するために使用するのに対し、
ノードバンドルは通常ではライトが照らしているオブジェクト、シーン内で可視のオブジェクトなどを追跡するために使用します。
ノードバンドルには、レギュラーとスマートの2タイプがあります。 個々のノードをレギュラーバンドルに追加したり削除することができます。 その一方、スマートバンドル内のノードは、そのバンドルに記録されているパターンで格納されるノードが決まります。 そのパターンに一致したノードがHoudini内で作成されたり削除されると、そのスマートバンドルの内容が自動的に更新されます。 hou.NodeBundle.patternを使用することで、バンドルがスマートバンドルなのかレギュラーバンドルなのか判断することができます。
ノードがスマートバンドルのパターンに一致した時、そのノードとその子がバンドルに追加されます。
例えば、パターンが"/obj/*"
で、/obj/box_object1
がジオメトリオブジェクトの場合、その/obj/box_object1
内のノードすべてがバンドルに再帰的に追加されます。
パターンにキャレット(^
)を使用することで、ノードを削除することができます。
例えば"/obj/* ^/obj/geo1"
は、/obj/geo1
を除いた/obj
内のすべてに一致します。
バンドルは、そこに含めることができるノードタイプを指定するためのフィルターを持つこともできます。
利用可能なフィルターに関しては、hou.nodeTypeFilterを参照してください。
ノードをレギュラーバンドルに追加しようとした時に、そのノードがフィルターに一致しなかった場合は、Houdiniはそのノードの追加に失敗します。
スマートバンドルに関しては、パターンマッチングの後にフィルターが適用されます。
例えば、パターンが"/obj/*"
でフィルターがhou.nodeTypeFilter.Obj
の場合、バンドルにはSOPなどを除いた/obj
内のオブジェクトのみが含まれます。
パターンは再帰的に適用されるので、オブジェクトサブネット内のオブジェクトもバンドルに含まれます。
ノードのリストを必要とするノードパラメータにバンドルを指定するには、バンドル名の頭に@
を付けます。
例えば、オブジェクトのLight Maskパラメータに@bundle1
を入力すると、bundle1
という名前のバンドル内のノードでそのオブジェクトが照らされます。
HoudiniのBundle Listペインでノードバンドルの閲覧と編集をすることができます。 既存のノードバンドルにアクセスするには、hou.nodeBundle()とhou.nodeBundles()を、新しいバンドルを作成するには、hou.addNodeBundle()を使用します。
メソッド ¶
name() -> str
バンドルの名前を返します。
setName(name)
バンドルの名前を変更します。
名前に_
以外の英数字でない文字が含まれていたり、その名前のバンドルが既に存在すると、hou.OperationFailedを引き起こします。
destroy()
このバンドルを削除します。
pattern()
→ str
or None
このバンドルがレギュラーバンドルならNoneを返し、スマートバンドルなら文字列パターンを返します。
スマートバンドルの詳細は、クラスのドキュメントを参照してください。
ノードがパターンに一致すると、その子すべてがフィルターに一致する限りは、それらすべてがバンドルに含まれます。
例えば、パターンが"/obj/*"
で、フィルターがhou.nodeTypeFilter.NoFilterなら、そのバンドルには/obj
内のすべてのノードが再帰的に含まれます。
setPattern(pattern_or_none)
このバンドルのパターンを変更します。
パターンをNoneに設定すると、バンドルがレギュラーバンドルに変わります。 この場合では、そのバンドルの内容は変わりませんが、Houdiniはバンドルの内容を決めるためのパターンマッチングを行なわなくなります。
パターンが文字列なら、そのバンドルはスマートバンドルになり、その内容がパターンに一致するように即座に変わります。 バンドルの内容は、Houdiniでノードを作成したり削除すると更新されます。
詳細は、hou.NodeBundle.patternとクラスのドキュメントを参照してください。
findBestFilter()
→ hou.nodeTypeFilter列挙値
バンドル内のすべてのノードに一致する最も制限のあるバンドルフィルターを返します。
利用可能なフィルターは、hou.nodeTypeFilterを参照してください。
hou.nodeTypeFilter.NoFilter
は、フィルタリングなしを意味する特別な値です。
filter()
→ hou.nodeTypeFilter列挙値
バンドルのフィルターを返します。 スマートバンドルに関しては、パターンマッチングの後にフィルターが適用され、そのフィルターに一致しないタイプのノードがバンドルから削除されます。
利用可能なフィルターは、hou.nodeTypeFilterを参照してください。
hou.nodeTypeFilter.NoFilter
は、フィルタリングなしを意味する特別な値です。
フィルタリングの詳細は、クラスのドキュメントを参照してください。
setFilter(node_type_filter)
このバンドルのフィルターをhou.nodeTypeFilter列挙値に設定します。
フィルターをクリアするには、hou.nodeTypeFilter.NoFilter
を使用します。
詳細は、hou.NodeBundle.filterとクラスのドキュメントを参照してください。
containsNode(node)
→ bool
ノードがバンドルに含まれていればTrue、そうでないならFalseを返します。node
はhou.OpNodeオブジェクトでなければなりません。
このメソッドはnode in bundle.nodes()
のショートカットです。ノードが多いバンドルに対しては、このメソッドが若干高速です。
addNode(node)
バンドルにノードを追加します。
このバンドルがスマートバンドルなら、スマートバンドルの内容は自動的にパターンで決まるのでhou.OperationFailedを引き起こします。
removeNode(node)
バンドルからノードを削除します。
このバンドルがスマートバンドルなら、スマートバンドルの内容は自動的にパターンで決まるのでhou.OperationFailedを引き起こします。
clear()
バンドルからすべてのノードを削除します。
このバンドルがスマートバンドルなら、スマートバンドルの内容は自動的にパターンで決まるのでhou.OperationFailedを引き起こします。
isSelected()
→ bool
バンドルがBundle Listペインで選択されていていればTrue、そうでないならFalseを返します。
setSelected(on, clear_all_selected=false)
Bundle Listペインでこのバンドルを選択します。
clear_all_selected
がTrueなら、このバンドルのみが選択されたままになります。
そうでない場合、このバンドルが既存の選択に追加されます。
convertToNormalBundle()
バンドルを標準バンドルに変換します。スマートバンドルパターンが除去されます。
バンドルが既に標準バンドルなら何もしません。
convertToSmartBundle()
バンドルをスマートバンドルに変換します。バンドルの内容から正規表現が構築され、それがバンドルパターンとして設定されます。
バンドルが既にスマートバンドルなら何もしません。