노드가 몇 개 있나요?

Houdini Advent Calendar 2016 19 일째 기사입니다.

내용은 게시제대로이므로…
이 시점에서 "아-하이하이"라는 분은 그렇게 닫아 주시거나,
그 밖에 더 좋은 방법 알고 있으면 몰래 가르쳐 주실 수 있으면 기쁩니다.

NodeType이라는 추측



hou 모듈 안을 보자고 생각합니다.
dir로 돌아오는 리스트 중, 「NodeType」이 포함되어 있으면 그것 같은 느낌이므로,
그렇게 조사해 보겠습니다.
for i in dir(hou):
    if 'NodeType' in i:
        print( i )

그러면



상당히 돌아왔습니다.
전반의 라든지, _swigregister라든지는 달라 보인다.
「NodeType」과 「NodeTypeCategory」가 있는 것이 흥미롭군요.
후자 쪽이 더 그렇게 생각합니다.

inspect.getmembers



이번에는 inspect 모듈의 getmembers를 사용해 보겠습니다.
import inspect
for i in inspect.getmembers(hou):
    if 'NodeType' in i[0]:
        print i



NodeTypeCategory계는, 늘어놓은 built-in function인 것 같습니다.
이러한 함수는, 「NodeTypeCategory」형을 돌려줍니다.
type( hou.sopNodeTypeCategory() )
<class 'hou.NodeTypeCategory'>

NodeTypeCategory



NodeTypeCategory형으로 , 우선 이름(name)에서도 보일까라고 n 을 타입 하면(자) , 다음에 「nodeTypes」라고 하는 것도 서제스트 되었습니다.

sopCategory.name()
'Sop'

sopCategory.nodeTypes()

name 분은 상상대로의 결과입니다만,
드디어 찾아낸 nodeTypes 쪽은 이런 느낌이 되었습니다!


조금 놀랐습니다만, 이것으로 각 노드 카테고리내의 노드를 체크할 수 있을 것 같습니다.

nodeTypes의 내용 계산


import inspect
for i in inspect.getmembers(hou):
    if 'NodeType' in i[0]:
        if inspect.isbuiltin(i[1]):
            try:
                nodetypecategory= i[1]()
            except:
                continue
            nts = nodetypecategory.nodeTypes()
            print( nodetypecategory.name(),len( nts ) )

도중의 try-except는 swigregister의 사람들이 오류를 일으키기 위해 마련한 것입니다.
아래에서 2행째로 방금전의 nodeTypes의 결과인 사전을 받아, 카테고리명과 함께 그 사전의 길이를 프린트해 보았습니다.



결과……
~~Net계는 각각 1노드밖에 없는 것은 알겠습니다만,
SOP라든지 DOP라든지 VOP라든지 그렇게 많은 것입니까? ? ? 그렇죠?

일단 결과를 붙여 둡니다. H15.5.632입니다.
('ChopNet', 1)
('Chop', 103)
('CopNet', 1)
('Cop2', 145)
('Dop', 435)
('Object', 146)
('Particle', 1)
('Pop', 68)
('Driver', 42)
('Shop', 205)
('Sop', 430)
('VopNet', 18)
('Vop', 816)

nodeTypes의 내용을 계산 (특히 CHOP)



비교적 세기 쉬운 CHOP를 비교해보기로 했습니다.
스크립트 결과가 위와 같이 "103".
chopNodes = hou.chopNodeTypeCategory().nodeTypes()
sorted( chopNodes.keys() )



Houdini UI상이라면…



4열, 25행. 곱할 수 있습니다.forpopnetvopchoptype 의 3 노드가, UI 상에서는 발견되지 않습니다.

하지만 H12 시점의 온라인 문서를 보면 for CHOP가 있으므로,
ht tp // //로 fx. jp/도 c/이므로 s/초 p/후r. HTML
이것들은, 과거의 씬 데이터와의 호환성을 유지하기 위해서라든가로 남아 있는 것일까라고 추찰할 수 있습니다.
VOP가 굉장한 양이 되어 있는 것도 그렇게 그럴까요.

그럼 스크립트에서 그 노드만 필터링하는 방법?
같은 근처는 다음 숙제가 될 것 같습니다.

요약



서제스트에 도움이 되었습니다.
편리! !

다음은 yone80@github씨의 「사각 폴리곤에 맞추어 변형」입니다.

좋은 웹페이지 즐겨찾기