요약
이 문서에서는 현재 프레임 시간이나 샘플 수와 같은 현재 그래프 상태의 시스템 인수를 사용자 정의 Op에서 액세스할 수 있는 방법을 설명합니다.
사용자 정의 Op를 작성하고 컴파일하는 방법에 대한 정보를 찾고 있다면 Q100326: 첫 번째 사용자 정의 Op를 작성하고 테스트하는 방법을 참조하십시오 .
추가 정보
커스텀 Ops를 구현할 때 흔히 발생하는 걸림돌은 커스텀 Op가 속한 Op 체인이 있는 노드가 설정되지 않으면 현재 시간(shutterOpen 또는 ShutterClose 값) 또는 시간 샘플 수를 반환하는 쿡 인터페이스 함수가 올바른 결과를 반환하지 않을 수 있다는 것 입니다. 올바르게 위로.
예를 들어 다음 호출과 관련이 있습니다.
Foundry ::Katana::GetCurrentTime(interface)
Foundry ::Katana::GetShutterOpen(interface)
Foundry ::Katana::GetShutterClose(interface)
Foundry ::Katana::GetNumSamples(interface)
이러한 함수에서 예상되는 반환 값을 얻으려면 System Op Args를 추가해야 합니다. 이를 제공하는 것은 일반적으로 노드(또는 interface.execOp
통해 Op를 호스팅하는)의 책임입니다.
Op가 GenericOp 노드를 통해 인스턴스화되는 경우 해당 addSystemOpArgs 매개변수를 Yes 로 설정해야 합니다.
Op가 사용자 정의 NodeTypeBuilder를 통해 등록된 경우 buildOpChain()
으로 전송된 인터페이스 객체에는 Op 인수에 '시스템' GroupAttribute를 추가하는 addOpSystemArgs()
메서드가 있습니다. Op는 이것을 검색하고 사용할 수 있습니다.
참고: 관련 NodeTypeBuilder 함수는 Katana 개발자 가이드에서 찾을 수 있습니다.
구현 예
첨부된 것은 /root/world/geo/hello_world 에 "hello world" 유형의 단일 위치를 생성 하고 해당 위치에서 HelloWorld Op를 실행하는 간단한 NodeTypeBuilder 기반 노드 유형의 예입니다 . (이 예에서는 /root 에 일부 속성을 설정합니다 .)
Op 소스는 사용할 준비가 되기 전에 컴파일되어야 합니다. 이렇게 하려면 Katana 설치 디렉터리에 포함된 $ KATANA _ROOT/plugins/Src/README.md 파일의 지침을 따르세요.
더 자세한 지침은 Q100326: 첫 번째 사용자 정의 Op 작성 및 테스트 방법을 참조하세요 .
C++ 소스가 .so 또는 .dll 파일로 컴파일되면 이 파일은 KATANA _RESOURCES 디렉터리의 Ops 하위 폴더에 배치되어야 하고 NTB.py는 KATANA _RESOURCES 디렉터리의 플러그인 하위 폴더에 배치되어야 합니다. _RESOURCES 디렉토리.
KATANA _RESOURCES 설정에 대한 자세한 내용은 Katana 설치 가이드를 참조하세요.
노드의 Op 체인에 Op를 추가할 때 '시스템' Op 인수를 추가하는 관련 코드는 다음과 같습니다.
opArgs = FnAttribute.GroupBuilder() interface.addOpSystemArgs(opArgs) interface.appendOp('HelloWorld', opArgs.build())
이는 다음을 수행하는 것과 동일합니다.
graphState = interface.getGraphState() opArgs = FnAttribute.GroupBuilder() opArgs.set('system', graphState.getOpSystemArgs())
interface.appendOp('HelloWorld', opArgs.build())
'HelloWorld' Op는 이에 액세스할 수 있으며 예를 들어 루트에서 현재 시간을 속성으로 설정할 수 있습니다.
static void cook(Foundry::Katana::GeolibCookInterface& interface) { if (interface.atRoot()) { interface.setAttr("Hello", FnAttribute::StringAttribute("World!")); interface.setAttr("CurrentTime", FnAttribute::FloatAttribute(Foundry::Katana::GetCurrentTime(interface))); } interface.stopChildTraversal(); }
기술적인 설명
GraphState::getOpSystemArgs()
는 'timeslice' 그룹('currentTime', 'shutterOpen', 'shutterClose', 'numSamples')과 'variables' 그룹(그래프 상태 변수)을 포함하는 그룹을 반환합니다. 이 그룹은 '시스템' Op 인수로 설정되어야 합니다. GetCurrentTime
및 GetGraphStateVariables
와 같은 CookInterface 호출은 getOpArg("system.[...]")
호출하는 편의 함수입니다.
추가 도움말
이 문서에 포함된 정보와 관련하여 문제가 발생하는 경우 지원 티켓을 열고 발생한 문제와 지금까지 수행한 문제 해결 단계를 알려주십시오.
지원 티켓을 여는 방법에 대한 자세한 내용은 Q100064: 지원 티켓을 올리는 방법을 참조하세요 .
첨부 파일
우리는 문제로 불편을 끼쳐 드려 죄송합니다
이유를 알려주세요