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

팔로우

요약

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

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

추가 정보

사용자 정의 Op를 생성하기 전에 $KATANA_ROOT/plugins/Src/Ops 에 있는 Ops 예제를 살펴보는 것이 도움이 될 수 있습니다 . 이 튜토리얼은 특히 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 이라는 속성이 각 위치에 설정되고 속성 값이 해당 위치의 유형이 됩니다. 또한 "hello"라는 속성이 /root"world!" 값으로 설정됩니다.

cook cook() 함수를 수정하여 특정 위치에서 관심 있는 속성을 읽거나 설정하거나 기타 여러 작업을 수행할 수도 있습니다.

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

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

이것이 항상 바람직한 것은 아니기 때문에 위의 예에는 인터페이스가 atRoot() 인지 확인 하는 if 문도 포함되어 있습니다. 이로 인해 Op가 쿠킹된 최상위 위치에서 실행될 때만 if 블록 내부의 문이 실행됩니다. at, if 문 다음에 interface.stopChildTraversal() 사용하여 Op가 최상위 위치 아래의 전체 장면 그래프를 순회하는 것을 중지할 수 있습니다.

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

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

이러한 단계에서 문제가 발생하는 경우 지원 티켓을 열고 발생한 문제와 지금까지 수행한 문제 해결 단계를 알려주십시오.

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



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

    이유를 알려주세요