VEX & VOP 치트 시트

4955 단어 VEX파이썬HOUDINI
이것은 Houdini Apprentice Advent Calendar 2019 첫날 기사입니다.
첫날부터 이상한 내용이 되어 버렸습니다만, vex/vop의 비교표를 정리해 보겠습니다.
매년 비슷한 것을 쓰고 있는 생각이 들지 않아도 됩니다.

소개



VOP는 VEX의 래퍼입니다. Houdini는 진짜 SOP(VOP)+DOP입니다.
MEL 없이 Maya를 사용하는 괴로움 정도는 아니라고 생각합니다만, VEX 없이 Houdini를 잘 다루는 것도 어렵습니다.
DSL(과 수학)의 실력이 그대로 DCC 어플리케이션에서의 표현에 반영되는 감각을 한결같이 느낍니다.

참고 자습서를 보면 VEX와 VOP가 혼합되어 상당히 혼란스러워집니다.
VOP의 조작을 VEX로 어떻게 하는지 매번 조사하고 있기 때문에, 표에 정리해 보았습니다.
우열이나 사용 빈도는 어쨌든, 유사도로 늘어놓고 있습니다.
보다 좋은 방법, 비교 대상이 있으면, 지적 받을 수 있으면 기쁩니다.

대응표


  • Houdini Apprentice 17.5.391



  • VOP
    VEX
    노드


    SOP
    Attribute SOP
    Attribute Expression, Group Expression, Attribute Wrangle SOP


    DOP
    Geometry VOP, Gas Field VOP
    Geometry Wrangle, Gas Field Wrangle SOP


    COP
    VOP COP2 Filter, VOP COP2 Generator COP
    VEX Filter, VEX Generator COP


    구조체
    Struct VOP
    $HIP/vex/include 에 헤더 배치


    흐름 제어
    if, for-loop, while VOP
    if, for, while


    매개변수
    Bind VOP, Parameter VOP
    ch 함수


    상호 운용
    inline code VOP, snippet VOP
    vopwritevfl (Save VEX to Code file)


    포인트 클라우드
    Point Cloud Open VOP
    pcopen/pclose 함수

    속성
    Attribute Create SOPaddvariablename
    디버깅
    없음(Geometry Spreadsheet)
    printf 함수, assert 매크로

    파이썬node.createNodenode.parm("snippet").set
    HDK
    VOP_Node 클래스
    VEX_VexOp or CVEX_Context::run()


    나란히 보면, 사칙 연산이나 제어문을 VOP로 하는 의미는 거의 없습니다.

    HOM (Houdini Object Model)



    기본적인 노드의 조작은 이전에 정리해 보았습니다. VEX 문자열을 Python으로 작성해보십시오.
    여담이지만 textwrap 모듈로 쓰면 VEX도 깔끔하게 성형됩니다.

    vex.py
    import hou
    import textwrap
    
    def set_vex():
        vex = textwrap.dedent("""\
        // Average Neighbouring Points
        int n[] = neighbours(0, @ptnum);
        vector avgP = @P;
    
        // Loops over all elements of n, setting pt
        // to be the value of each element
        foreach (int pt; n)
        {
            avgP += point(0, "P", pt);
        }
        """)
        wrangle = hou.node("/obj/geo1").createNode("attribwrangle")
        wrangle.parm("snippet").set(vex)
    

    쓸 수 있다고 하면 쓸 수 있습니다만, 거기까지 중요하지 않네요.
    Python AST에서 VEX로 변환 할 정도가 아니면 인라인으로
    VEX 쓰기도 너무 ...

    요약



    노드 기반의 약점은 다른 사람에게 기술과 지식을 이식하기 어렵다고 생각합니다.
    상급자의 hip 보는 것이라고 생각합니다만 ...
    단발 기능 뿐만이 아니라 일람으로 보는 것도 이해가 깊어져 좋네요.

    좋은 웹페이지 즐겨찾기