캐릭터 집합의 중간 노드의 연결/재연결을 고려하다

11980 단어 Pythonmayatech
그런 사람 없어, 빨리 깨어나!
※ 이 경우 강자는 아래 그림을 보면서 "그렇구나"라고 고개를 끄덕이며 함께 술을 마실 수 있는 지구인을 말한다.

예를 들어, 컨트롤러에 삽입될 애니메이션 노드
다른 컨트롤러에 삽입(이식)하고 싶은 경우가 있어요.
컨트롤러 노드와 애니메이션 곡선 노드의 대응 관계가 간단하다면
쉽게 파악할 수 있는 각본화는 조금만 노력하면 완성할 수 있다.
하지만'아트리트'가 캐릭터집에 등록되면
애니메이션 노드는 특집중에 직접 삽입되지 않고 중개 캐릭터 집합을 통해 컨트롤러의 특집을 구동한다.
처음 그림에서 말한 것은 왼쪽의 노드군이죠.
중간에 매우 어리석은 가늘고 긴 캐릭터 설정이 있는데 그것을 끼고 오른쪽에 붙인 것은 컨트롤러이고 왼쪽의 지느러미가 잘 만들어지지 않은 것은 애니메이션 노드(입이 좋지 않다)이다.
이 왼쪽 노드 그룹의 지느러미 부분을 오른쪽 노드 그룹의 적당한 위치에 삽입하기를 바랍니다.

캐릭터 설정을 통해 애니메이션 노드를 연결하려면
  • 원래 컨트롤러의 캐릭터 집합과 연결 확인
  • 캐릭터 집합과 애니메이션 노드의 연결 확인
  • 교체자 컨트롤러의 캐릭터 설정이 어디에 새로 꽂혔는지 확인하는 것이 좋다
  • 이런 절차는 필요한 것이다.
    귀찮아.

    특집의 연결을 확인하다


    특집의 연결 상황을 확인하고 싶을 때
    기본적으로 사용listConnections.
    여기에는 PyMEL의 inputs/outputs를 가로로 사용합니다.
    inputs
    https://help.autodesk.com/cloudhelp/2020/JPN/Maya-Tech-Docs/PyMel/generated/classes/pymel.core.nodetypes/pymel.core.nodetypes.DependNode.html?highlight=inputs#pymel.core.nodetypes.DependNode.inputs
    outputs
    https://help.autodesk.com/cloudhelp/2020/JPN/Maya-Tech-Docs/PyMel/generated/classes/pymel.core.nodetypes/pymel.core.nodetypes.DependNode.html?highlight=outputs#pymel.core.nodetypes.DependNode.outputs
    어떤 노드를 대상으로 inputs/outputs를 실행하면 이 노드와 연결된 노드나 삽입된 빨대를 조사합니다.
    그 중에서 실제 작업은listConnections이다
    listConnections에 있는 옵션을 직접 사용할 수 있습니다.
    주로 pc를 사용하는데 어느 것을 더할까요?
    자주 잊어버리기 때문에 총괄해 봅시다.

    inputs/outpus (선택 없음)


    '녹색' 노드를 대상으로 inputs/outputs를 선택 없이 실행합니다
    실행 결과로 빨간색 노드를 반환합니다.
    .inputs() 왼쪽 노드,
    오른쪽 노드
    여러 개가 연결되어 있을 수 있으며 목록에서 되돌아옵니다.

    p=True

    .outputs() 효력이 발생하면 집행한다.
    마찬가지로 빨간색으로 표시된 요소다.
    https://help.autodesk.com/cloudhelp/2020/JPN/Maya-Tech-Docs/CommandsPython/listConnections.html#flagplugs

    객체 노드(녹색)에서 내보낸 연결된 노드(선택되지 않은 노드)를 삽입합니다.
    꽂힌 빨대 돌려줄게.p(plugs)에서 대상 노드의 연결에 입력한 아웃사이드 노드의 보기.inputs(p=True)에서 대상 노드에서 출력된 연결의 측면 노드의 보기
    얻을 수 있다.

    c=True

    .outputs(p=True) 유효한 경우
    https://help.autodesk.com/cloudhelp/2020/JPN/Maya-Tech-Docs/CommandsPython/listConnections.html#flagconnections

    조금 이해가 안 가지만.
    선택적으로 되돌아오는 노드와 이 노드가 삽입되어 보기
    이중 배열로 되돌아오다.
    (이중 배열 성형을 할 수 있는 건 확실히 PyMEL 디자인이에요. cmds라면 리스트를 간단하게 돌려줄 것 같아요.)c(connections)에서 연결된 노드와 연결을 삽입하는 특집.inputs(c=True)에 연결된 뷰어 및 연결 삽입 노드 삽입
    ...이 조합으로 답장하면 언제 즐거울까??

    p=True, c=True

    .outputs(c=True)p 모두 유효합니까?
    두 결과를 합쳐 연결된 노드를 연결하는 아웃/오프사이드 특집
    다 돌아올 것 같아서.

    그러나 직감과는 반대로 아래 그림에서 빨간색 요소↓

    연결된 흡입관이 이중 배열로 되돌아오다.
    그리고 노드도 되돌아와서 배열이 복잡해도 사용하기 어려워요.
    Atrict 객체 자체에 node 메서드가 있으므로 노드를 가져올 수 있습니다.
    필요에 따라 그걸 쓰면 돼.

    캐릭터 설정을 통해 애니메이션 노드 탐색


    우선 대상 노드를 삽입한 캐릭터 집합의 특집을 조사한다
    거기서 애니메이션 노드의 특집을 조회합니다.
    데이터 소스ctl 변수로
    target_ctl.inputs(p=True,c=True)
    
    이렇게 하면 수측(target ctl)/출측(캐릭터 집합) 쌍방의 특집을 얻을 수 있다.
    일단 전자를 target이라고 할게요.그다음은 src.아웃풋에 넣기로 했어요.
    for target_input,src_output in target_ctl.inputs(p=True,c=True):
        # target_input : 受け側(対象ノード側のアトリビュート)
        # src_output : 出し側(キャラクターセット側のアトリビュート)
    
    src_output에 Attribute 객체 포함
    이 녀석도 inputs/outputs 방법이 있어.
    그 특집에 대한 입력과 출력을 조회할 수 있습니다.
    여기에 입력한 애니메이션 노드c를 보려면 선택 없이 실행하면 됩니다.
    이번 애니메이션 노드 자체는 별다른 일이 없는데, 목적은 특집을 바꾸기 위해서이다..inputs()와 p 옵션이 적용되면 실행됩니다.
    이것도 명단에서 반납하겠습니다.
    캐릭터 집합의 한 Atrict에 여러 개의 노드가 입력되는 것을 상상하기 어려워 [0]로 툭 꺼낸다.
    for target_input,src_output in target_ctl.inputs(p=True,c=True):
        anim_node_output = src_output.inputs(p=True)[0]
    

    캐릭터를 바꿀 수 있는 캐릭터 설정도 조사해야 돼요.


    동일한 방식으로 이전에 조사한 애니메이션 노드를 특시하다
    다른 캐릭터 세트에 꽂혀있는 곳이 좋은지 확인해 보세요.
    for new_target_input,chr_attr in new_target_ctl.inputs(p=True,c=True):
        # new_target_input : 受け側(対象ノード側のアトリビュート)
        # chr_attr : 出し側(キャラクターセット側のアトリビュート)
    
    하는 일은 똑같은데 뭘 해야 할 게 별로 없어요.
    극본의 난이도가 이러쿵저러쿵하는 것보다 이름을 바꾸는 것을 생각하고 어느 안에 무엇을 넣었는지 상상하는 것이 좀 번거롭다.

    애니메이션 노드 연결하기


    그리고 양쪽의 for를 돌려줍니다.
    목표 노드와 new 목표 노드의 빨대 이름이 일치할 때
    애니메이션 노드의 특집을 캐릭터 집합의 특집에 연결하기
    이런 내용을 쓰면 된다.
    # 前略
    attr_longName = target_input.longName()
    
    # 中略
    new_attr_longName = new_target_input.longName()
    
    if new_attr_longName == attr_longName:
        anim_node_output >> chr_attr
    
    ↑는 실제로 for를 반복적으로 회전하기 때문에 축진은 편이된다.
    요약하자면이런느낌↓
    from pymel import core as pm
    
    target_ctl,new_target_ctl = pm.selected()
    for target_input,src_output in target_ctl.inputs(p=True,c=True):
        anim_node_output = src_output.inputs(p=True)[0]
        attr_longName = target_input.longName()
        for new_target_input,chr_attr in new_target_ctl.inputs(p=True,c=True):
            new_attr_longName = new_target_input.longName()
            if new_attr_longName == attr_longName:
                anim_node_output >> chr_attr
    
    문자 세트로 등록된 노드 A 및 B
    A→B 순서로 이 스크립트를 선택하고 실행하는 경우
    A측의 캐릭터 설정에 삽입된 애니메이션 노드는 B측의 캐릭터 설정이 같은 아동목에 삽입되었다.
    변수를 설명하는 중이라 생각보다 줄 수가 많아요.
    만약 그렇게 하지 않는다면, 대략 절반의 행수가 있을 것이다.
    이 연결은 손으로 할 수 있어요.
    캐릭터 설정은 등록된 특집까지 뻗어 수백 줄에 달할 수 있다
    노드 편집기에서도 귀찮아요.처음 그림처럼.
    각본으로 처리하는 것은 인도적이다.
    그리고 컨트롤러에 콘덴서를 설치했다면pairblend도 고려해야 하기 때문에 더욱 번거롭다.

    좋은 웹페이지 즐겨찾기