요약
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를 만드는 방법을 설명합니다.
-
$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!"));
}
}
- 예제 Op 플러그인을 빌드하려면
$KATANA_ROOT/plugins/Src/README.md에 제공된 지침을 따르세요.
cmake명령에서 소스 파일 경로가 올바른 Katana 버전을 가리키는지 확인하세요.cmake명령에-DCMAKE_PREFIX_PATH포함할 필요는 없습니다. 이 옵션은 이 경우 관심 없는 다른 Op 예제에 대한 종속성을 지정하는 것입니다.
- 플러그인을 빌드하고 설치한 후, 설치 디렉터리가 KATANA _RESOURCES 에 포함되어 있는지 확인하세요. README.md에 제공된 명령을 사용하면 MyKatanaResources 디렉터리가 KATANA _RESOURCES 에 포함되어야 합니다.
- Katana 실행하고 CameraCreate 노드를 생성한 다음 GenericOp 노드에 연결합니다.
- 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: 지원 티켓을 제기하는 방법을 참조하세요 .
우리는 문제로 불편을 끼쳐 드려 죄송합니다
이유를 알려주세요