Q100326: 첫 번째 사용자 정의 Op를 작성하고 테스트하는 방법

요약

Ops는 Katana 에서 3D 장면 데이터를 생성하고 조작하는 작업의 기본 요소입니다. Ops는 C++로 작성된 Op Types라는 플러그인의 인스턴스입니다. Ops는 Katana Op API를 사용하여 장면 그래프를 조작하고 속성을 수정하는 등 다양한 작업을 수행할 수 있습니다 .

이 문서에서는 $KATANA_ROOT/plugins/Src/Ops 아래에 있는 HelloWorld 예제 Op를 기반으로 사용자 정의 Op를 작성, 컴파일 및 테스트하는 단계별 예를 제공합니다 .

더 많은 정보

사용자 지정 Op를 생성하기 전에 $KATANA_ROOT/plugins/Src/Ops 에 있는 예제 Op를 살펴보는 것이 도움이 될 수 있습니다 . 이 튜토리얼은 HelloWorld 예제 Op를 기반으로 작성되었습니다.

다음 단계에서는 이 Op의 소스 코드를 수정하여 씬 그래프의 위치에서 속성을 읽고 설정할 수 있는 Op를 만드는 방법을 설명합니다.

  1. $KATANA_ROOT/plugins/Src/Ops/HelloWorld/src/HelloWorldOp.cpp 에 있는 cook() 함수를 다음과 같이 수정합니다.
static void cook(Foundry::Katana::GeolibCookInterface& interface)
{
   FnAttribute::StringAttribute typeAttr = interface.getAttr("type");
   interface.setAttr("testType",  typeAttr);

    if (interface.atRoot())
    {
       interface.setAttr("hello", FnAttribute::StringAttribute("world!"));
    }

}

  1. 예제 Op 플러그인을 빌드하려면 $KATANA_ROOT/plugins/Src/README.md 에 제공된 지침을 따르세요.

    cmake 명령에서 소스 파일 경로가 올바른 Katana 버전을 가리키는지 확인하세요. cmake 명령에 -DCMAKE_PREFIX_PATH 포함할 필요는 없습니다. 이 옵션은 이 경우 관심 없는 다른 Op 예제에 대한 종속성을 지정하는 것입니다.

  1. 플러그인을 빌드하고 설치한 후, 설치 디렉터리가 KATANA _RESOURCES 에 포함되어 있는지 확인하세요. README.md에 제공된 명령을 사용하면 MyKatanaResources 디렉터리가 KATANA _RESOURCES 에 포함되어야 합니다.

  1. Katana 실행하고 CameraCreate 노드를 생성한 다음 GenericOp 노드에 연결합니다.

  1. GenericOp 노드의 opType 매개변수를 "HelloWorld"로 설정합니다. 이렇게 하면 각 위치에 testType 이라는 속성이 설정되고, 속성 값은 해당 위치의 유형이 됩니다. 또한 , /root 에 hello라는 속성이 world! 라는 값으로 설정됩니다.

cook cook() 함수는 위치에서 관심 있는 속성을 읽거나 설정하거나, 여러 가지 다른 작업을 수행하도록 수정될 수도 있습니다.

사용자 정의 Ops에서 사용할 수 있는 추가 기능에 대해서는 Cook 인터페이스(C++)에 대한 Katana 개발자 가이드를 참조하세요 .

참고: Op는 기본적으로 모든 위치에서 실행됩니다(GenericOp 노드의 applyWhere 매개변수 에 지정됨 ). 따라서 모든 씬 그래프 위치에서 실행됩니다. 위 예에서는 testType 속성이 모든 위치에 설정됩니다.

이것이 항상 바람직한 것은 아니기 때문에 위의 예에는 인터페이스가 atRoot() 인지 확인하는 if 문도 포함되어 있습니다 . 이렇게 하면 Op가 요리된 최상위 위치에서 실행될 때만 if 블록 내부의 문이 실행되고 if 문 뒤에 interface.stopChildTraversal() 사용하여 Op가 최상위 위치 아래의 전체 장면 그래프를 탐색하지 못하도록 할 수 있습니다.

Op를 사용하기 위해 사용자 정의 노드 유형을 생성하려면 $KATANA_ROOT/plugins/Src/Ops/Messer/RegisterMesserNode.py 에서 찾을 수 있는 NodeTypeBuilder 기반 노드 유형의 예를 참조하세요.

일부 NodeTypeBuilder API 함수는 Katana 개발자 가이드에 설명되어 있습니다.

추가 도움말

이러한 단계를 수행하는 데 문제가 발생할 경우 지원 티켓을 열어 발생한 문제와 지금까지 수행한 문제 해결 단계를 알려주시기 바랍니다.

지원 티켓을 여는 방법에 대한 자세한 내용은 Q100064: 지원 티켓을 제기하는 방법을 참조하세요 .



    우리는 문제로 불편을 끼쳐 드려 죄송합니다

    이유를 알려주세요