지원 티켓 만들기
팔로우

Q100311 : 렌더러 플러그인에서 라이브 렌더링 구현

개요

이 기사에서는 렌더러 플러그인에서 Live Rendering을 구현하는 방법에 대해 설명하고 다음 주제를 다룹니다.

  • 속성 협약
  • RendererInfo 플러그인 함수
  • 렌더링 플러그인 기능
  • 파이썬 유틸리티
    - LiveRenderAPI
    -
    LiveRenderActions
    - 콜백
  • 잡았다
    - 단일 샘플 업데이트
    - 비 영구적 인 업데이트

LiveRendering에 대한 일반적인 설명은 Render Types 의 Katana Online Help 섹션의 설명 과 렌더링 수행의 라이브 렌더링 시작 및 중지 하위 섹션라이브 렌더링 제어 의 섹션을 참조하십시오.

렌더링 렌더러 플러그인 의 다른 부분에 대한 자세한 설명과 LiveRendering과 직접 관련이없는 RenderAPI의 다른 기능에 대한 설명 은 Katana 온라인 도움말렌더러 플러그인 섹션 에서 찾을 수 있습니다.

추가 정보

속성 협약

Katana 의 Live Rendering 시스템은 장면 그래프의 속성에 의해 제공됩니다. 효율성의 이름으로 렌더러를 업데이트하는 데 필요한 속성 만 렌더 플러그인에 전송됩니다. 이들 속성을 결정하는 속성 규약이 있는데, 다음과 같습니다.

liveRender. <업데이트 그룹> . <attributeName>

<updateGroup> - 특성을 단일 업데이트로 그룹화하는 데 사용되는 GroupAttribute입니다.

<attributeName> - 모니터링 할 최상위 속성의 이름입니다. 위의 이미지에서 liveRender.geoXform.xform 속성은 실시간 렌더링 시스템에 최상위 수준 xform 속성에 변경 사항을 보내도록 지시 합니다. 이것은 일반적으로 기존의 이유로 updateGroup 과 값 일치 하지만 일반적으로 내부적으로 사용되지 않는 StringAttribute입니다 . 복수의 속성이 같은 갱신 그룹으로 지정되고있는 경우, 복수의 속성이 변경되면 (자), 렌더러에 보내집니다.

RendererInfo 플러그인 함수

 void  fillLiveRenderTerminalOps( OpDefinitionQueue &  terminalOps , 
                               const FnAttribute::GroupAttribute& stateArgs )

노드 그래프에서 위의 속성 규칙을 설정하는 것이 가능하지만 일반적으로 RendererInfo 플러그인의 fillLiveRenderTerminalOps () 함수를 사용하여 Live Render가 시작될 때 자동으로 속성을 설정하는 것이 더 유용합니다. 이 함수에는 op 형식 (std :: string)과 op 인수 (GroupAttribute)를 포함하는 하나 이상의 std :: pair 개체가 들어있는 std :: deque 인 terminalOps라는 인수가 전달됩니다.

예 : 아래 코드는 / root / world / lgt 아래의 조명 위치의 xform 속성 변경을 모니터링 합니다 .

 FnAttribute::GroupBuilder opArgs; 
opArgs. set ( "type" , FnAttribute::StringAttribute( "light" ));
opArgs. set ( "location" , FnAttribute::StringAttribute( "/root/world/lgt" ));
opArgs. set ( "attributeNames" , FnAttribute::StringAttribute( "xform" ));
terminalOps.push_back( std ::make_pair( "LiveRenderFilter" , opArgs.build()));

여기에 유용한 Katana와 함께 제공되는 Geolib3 작전 이 여러 있습니다.

LiveRenderFilter

실제 렌더링을 위해 모니터링 할 속성을 나타내는 데 사용됩니다. 하나의 LiveRenderFilter로 여러 속성을 모니터 할 수 있으며, 모든 속성이 변경되면 단일 GroupAttribute로 모든 속성이 전송됩니다. 위에서 설명한 liveRender 속성 규약 을 설정하는 표준 방법입니다 .

OpArgs

- attributeNames (StringAttribute) - 속성의 이름은 변경 사항을 모니터링하고 변경 될 때마다 단일 업데이트로 렌더 플러그인에 보내야합니다.

- location (StringAttribute) -이 연산이 적용되는 첫 번째 위치를 정의하는 CEL 표현식입니다. 그런 다음 모든 아동 위치에 적용됩니다.

- 제외 (StringAttribute) - (선택 사항) 제외 위치 유형의 목록으로,이 op가 실행되지 않아야합니다.

- typeAlias (StringAttribute) - (선택 사항) 렌더 플러그인으로 전송 될 'type'속성의 이름입니다. 설정하지 않으면 위치 유형이 대신 사용됩니다.

- type (StringAttribute) - (선택 사항) 설정된 경우 op는이 유형의 위치에서만 실행됩니다.

- collectUpstream (IntAttribute) - (선택 사항) 0이 아닌 경우 각 상위 위치에서 모니터링되는 각 속성의 값도 실시간 렌더링 업데이트에 포함됩니다.

LiveAttribute

이 연산은 조작 중에 뷰어 조작자가 생성하는 값을 저장합니다 (조작이 완료되고 매개 변수가 완료 될 때까지 대기하는 것과 반대). 이 작업은 특별히 라이브 렌더링 모듈에서 찾는 특별한 경우입니다.

OpArgs

이 작업에 대한 인수는 Live Render 시스템에 의해 자동으로 설정되므로 수동으로 설정하면 안됩니다.

LocalizeXform

위치의 xform을 모든 조상으로부터 xform.matrix라는 단일 세계 공간 행렬로 평평하게 만듭니다.

OpArgs

- excludeCel (StringAttribute) - 연산이 적용되지 않아야하는 장면 그래프 위치를 설명하는 CEL 표현식입니다.

- addMaterialHash (IntAttribute) - (선택 사항) 라이브 렌더링의 이전 버전에 대한 레거시 동작입니다. 0이 아니면 'material'속성의 해시 된 값은 'materialHash'로 저장됩니다.

- outputAttrName (StringAttribute) - (선택 사항) 새 로컬 xform 속성을 저장하는 데 사용할 이름입니다. 기본값은 'xform'이며, 기존 속성을 덮어 씁니다.

LocalizeLiveAttributeXform

뷰어에서 조작하는 동안 위치의 실제 xform 속성은 변경되지 않습니다 (펜 업까지). 대신 LiveAttribute op는 liveAttributes.xform 아래에 임시 xform을 저장하는 데 사용됩니다. 이 작업은 localizeXform과 비슷하지만이 liveAttribute 규칙을 알고 있으므로 xform 대신 liveAttributes.xform이 사용되는 경우이 규칙이 적용됩니다. 이렇게하면 조작 중에 위치 xform을 업데이트 할 수 있습니다. 당연히이 op는 LiveAttribute op 다음에 적용되어야합니다.

OpArgs

- addMaterialHash (IntAttribute) - (선택 사항) 라이브 렌더링의 이전 버전에 대한 레거시 동작입니다. 0이 아니면 'material'속성의 해시 된 값은 'materialHash'로 저장됩니다.

LocalizeLightListLiveRenderFilter

이 Op는 라이트리스트와 함께 사용하기위한 표준 LiveRenderFilter op의 특수화입니다. LiveRenderFilter op와 유사하게 동작하지만 각 위치에서 lightList 속성에 대한 추가 정보를 생성합니다. 이 정보에는 표시등에 대한 경로, 현재 위치에서 라이트 링크가 활성화되어 있는지 여부 및 상위 위치에서 활성화되어 있는지 여부가 포함됩니다. 이 정보는 "lightLink"업데이트로 렌더 플러그인에 전송됩니다.

OpArgs

- attributeNames (StringAttribute) - 속성의 이름은 변경 사항을 모니터링하고 변경 될 때마다 단일 업데이트로 렌더 플러그인에 보내야합니다.

- location (StringAttribute) -이 연산이 적용되는 첫 번째 위치를 정의하는 CEL 표현식입니다. 그런 다음 모든 아동 위치에 적용됩니다.

- 제외 (StringAttribute) - (선택 사항) 제외 위치 유형의 목록으로,이 op가 실행되지 않아야합니다.

- typeAlias (StringAttribute) - (선택 사항) 렌더 플러그인으로 전송 될 'type'속성의 이름입니다. 설정하지 않으면 위치 유형이 대신 사용됩니다.

- type (StringAttribute) - (선택 사항) 설정된 경우 op는이 유형의 위치에서만 실행됩니다.

- collectUpstream (IntAttribute) - (선택 사항) 0이 아닌 경우 각 상위 위치에서 모니터링되는 각 속성의 값도 실시간 렌더링 업데이트에 포함됩니다.

CoordinateSystemLiveRenderFilter

이것은 표준 LiveRenderFilter op의 또 다른 특수화입니다. 이것은 좌표계와 함께 사용됩니다. LiveRenderFilter op와 동일하게 작동하지만 현재 위치가 / root / world /의 globals.coordinatesystems 속성에 나열되는지 여부를 먼저 확인한 후 실행됩니다.

OpArgs

- attributeNames (StringAttribute) - 속성의 이름은 변경 사항을 모니터링하고 변경 될 때마다 단일 업데이트로 렌더 플러그인에 보내야합니다.

- location (StringAttribute) -이 연산이 적용되는 첫 번째 위치를 정의하는 CEL 표현식입니다. 그런 다음 모든 아동 위치에 적용됩니다.

- 제외 (StringAttribute) - (선택 사항) 제외 위치 유형의 목록으로,이 op가 실행되지 않아야합니다.

- typeAlias (StringAttribute) - (선택 사항) 렌더 플러그인으로 전송 될 'type'속성의 이름입니다. 설정하지 않으면 위치 유형이 대신 사용됩니다.

- type (StringAttribute) - (선택 사항) 설정된 경우 op는이 유형의 위치에서만 실행됩니다.

- collectUpstream (IntAttribute) - (선택 사항) 0이 아닌 경우 각 상위 위치에서 모니터링되는 각 속성의 값도 실시간 렌더링 업데이트에 포함됩니다.

렌더러 플러그인 함수

 int  startLiveEditing() 
 int  stopLiveEditing() 

라이브 렌더링이 활성 상태이고 위치 업데이트가 예상되는 경우 Katana에서이 두 함수를 호출하여 사용자에게 알립니다.

 int  processControlCommand( const  std::string &  command ) 

이 함수는 Katana UI에서 렌더링 플러그인으로 전달하는 방법입니다. UI는 python LiveRenderAPI.SendCommand () 함수 를 통해 문자열로 명령을 보낼 수 있습니다.이 함수는 렌더링 플러그인에서 원하는 용도로 처리 할 수 있습니다.

 int  queueDataUpdates(FnAttribute::GroupAttribute updateAttribute) 

모니터링되는 속성이 변경되면이 값을 통해이 플러그인을 통해 렌더 플러그인에 전달됩니다. 건네받은 속성에는 3 개의 아이의 속성이 포함됩니다.

  • type - 업데이트 유형 ( 위의 속성 컨벤션 섹션에 나열된 <updateGroup> )
  • location -이 업데이트가 적용되는 씬 그래프 위치입니다.
  • attributes - 변경된 속성의 값. 위치가 삭제 된 경우 삭제 된 속성이 포함 됩니다.

이 함수는 라이브 렌더링 업데이트를 수신하기위한 전용 스레드에서 호출됩니다.

 bool  hasPendingDataUpdates() 

이 함수는 renderboot 프로세스에 적용되어야하는 queueDataUpdates ()에 대기중인 라이브 렌더 업데이트가 있는지 여부를 알립니다.

 int  applyPendingDataUpdates()  

이 함수는 메인 렌더 스레드에서 호출되며 대기중인 라이브 업데이트를 가져 와서 실제로 적용해야합니다. hasPendingDataUpdates ()가 true를 반환하는 경우에만 호출됩니다.

파이썬 유틸리티

Katana 의 UI에는 아래에 제시된 라이브 렌더링 환경을 개선하는 데 도움이되는 여러 유틸리티가 있습니다.

LiveRenderAPI

이 API를 사용하면 LiveRenderAPI.SendCommand () 및 LiveRenderAPI.SendData () 함수를 사용하여 실행중인 라이브 렌더링에 사용자 정의 명령 (문자열) 또는 라이브 업데이트를 보낼 수 있습니다. 또한 라이브 렌더링 하위 시스템에서 사용중인 터미널 작업 목록을 쿼리하고 수정하는 다양한 기능을 제공합니다. 이 터미널 작업은 노드가 생성 한대로 현재 장면 그래프를 변경하지 않고 위치가 변경된시기를 결정하는 데 사용됩니다. 이것은 효과적으로 RendererInfo :: fillLiveRenderTerminalOps ()를 호출하는 동안 전달 된 작업을 변경하는 방법입니다.

LiveRenderActions

plugin_apis / python / BaseLiveRenderAction.py 클래스의 사용을 통해 사용자 정의 메뉴 항목으로 Render> Live Rendering 메뉴를 확장 할 수 있습니다. 단순히 BaseLiverRenderAction 클래스 (QtGui.QAction에서 파생 됨)에서 파생되고 멤버 함수를 재정의합니다. 그런 다음 클래스는 Katana의 Python API (LiveRenderAPI 포함)를 사용하여 사용자 정의 명령 또는 렌더 플러그인에 대한 업데이트를 보낼 수 있습니다. LiveRenderActions의 인스턴스는 KATANA_RESOURCEs / UIPlugins 디렉토리에 배치해야 UI 세션 중로드 만 시도합니다.

콜백

라이브 업데이트 또는 라이브 렌더링 명령을 렌더링 플러그인에 보내기 전에 Katana는 onLiveRenderUpdate 또는 onLiveRenderCommand라는 콜백을 각각 트리거합니다. 이러한 콜백은 렌더 플러그인에 전달 될 명령 또는 업데이트 속성을 전달합니다. 주로 모니터링 목적으로 렌더링 플러그 인에 전달되는 데이터를 검사 할 수 있지만 예외를 발생시켜 메시지가 전송되지 않도록 할 수도 있습니다. 그러나 Katana의 메시지 로그에 오류 메시지가 표시됩니다.

잡았다

단일 샘플링 된 업데이트

렌더링이 시작될 때 geolib은 모션 블러 등을 허용하기 위해 다중 샘플 속성을 생성합니다. 그러나 Katana UI에서 속성은 일반적으로 단일 샘플을 사용하여 검색되며 Live Render 업데이트는 Katana UI에서 가져옵니다. 즉, 실시간 업데이트 중에 전송되는 속성에는 일반적으로 단일 시간 샘플 만 있습니다.

비 지속적인 업데이트

렌더링이 시작되면 씬을 생성하는 op 트리가 Katana에 의해 디스크에 기록되고 자체 Geolib3 런타임을 사용하는 렌더링 프로세스에 의해 읽혀집니다. 렌더 플러그인은 장면 그래프와 그 속성을 쿼리하기 위해 SceneGraphIterator에 액세스 할 수 있습니다. 그러나이 장면은 변경할 수 없습니다. 실시간 렌더링 업데이트가 Katana에서 전달되면 Geolib3 런타임을 업데이트 할 수 없습니다. 즉, 렌더 플러그인이 라이브 업데이트를 수신하더라도 SceneGraphIterators는 항상 원래 장면을 반환합니다. 따라서 SceneGraphIterator를 안전하게 사용하여 추가 정보를 얻을 수 없으므로 라이브 업데이트 속성에 렌더 플러그인에 필요한 모든 정보가 포함되어 있어야합니다.

도움이 되었습니까?
/

We're sorry to hear that!

Please tell us why.
0명 중 0명이 도움이 되었다고 했습니다.

댓글