테드옹의 VFX
USD Solaris 개념 정리 본문
이 게시물은 굉장히 긴 싸움이 될 것...........
[ Solaris의 워크플로우 ]
방법01. object를 USD로 내보내고 stage에서 불러온 후 Material을 assign하고 렌더링을 진행한다
방법02. material을 가진 채로 component를 만든 후 USD로 내보내고, stage에서 불러온 후 바로 렌더링을 진행한다
개인 단위로 프로젝트를 진행한다면 1번의 방법도 문제가 없겠지만, 회사 단위로 이미 존재하는 어셋을 기반으로 작업을 해야한다면 2번의 방법이 더 적합할 것 같다
[ Scene Graph Tree ]
- L은 Payload의 load상태를 나타낸다
- Activate vs. Visibility
Invisibie한 prim들은 USD에 의해서 계산은 되지만 뷰포트에 보이지 않음 (하위계층이 존재하고 트리뷰를 expand할 수 있다)
Deactive한 prim들은 USD에 의해서 계산되지 않음(하위계층이 없고 트리뷰를 expand할 수 없다)
- 빨간 점은 Viewport override를 의미하고 실제 Render에는 영향을 미치지 않는다
- Primitive Specifier가 런천미트 모양이면 'Over'인 것이고
- Primitive Specifier가 분홍색 마카롱 모양이면 'Class'인 것이다
[ USD와 관련된 토픽들 ]
1. Composition Arc
1-A. Reference vs. Sublayer
Sublayer
- Sublayer는 이미 존재하는 USD파일을 씬으로 불러올 때 쓰이는 가장 기초적인 방법이다
- 부서별로 작업하는 USD을 불러올 때 좋고, Opinion을 바꿔감으로서 씬을 업데이트하는 방식이다.
- Opinion은 디폴트로는 가장 최근 불러온 씬에 의해 Override된다. (주황 글씨 = Opinion없음, 하늘색 글씨 = Opinion있음)
- Mute시킬 수 있다
Reference
- 원래 있는 Scene에 USD파일을 추가할 때 사용한다 (ex. 지오메트리에 material을 추가할 때 )
1-B. Variant
1-C. Payload
- Payload는 reference와 비슷하지만, unload를 시켜서 뷰포트를 가볍게 작업할 수 있고, 디스크로 렌더링 시에는 모든 payload가 다 나온다. 주황색 글씨면 loaded된 것이고, 갈색 글씨면 unloaded된 payload이다
- Reference노드로도 만들 수 있는데, Reference Type을 Payload Inputs로 바꿔주면 된다
1-D. kinds
Metadata의 일종으로 해당 primitive를 분류할 수 있는 기준
2. Primitive Type
[ Primitive의 특징 ]
- Attribute와 Relationship의 구조로 이루어져 있음(Render-Proxy, 혹은 Mesh-Material의 관계같은, 빨간색 글씨)
- 후디니 어트리뷰트와는 이름이 조금 다름
@P = points
@N = normals
@uv = primvars:st
@Cd = primvars:displayColor
@v = velocity
@Alpha = primvars:displayOpacity
Point = Vertex interpolation
Primitive = Uniform interpolation
Vertex = Face Varing interpolation
Detail = Constant interpolation
- geometry primitive레벨에서 name어트리뷰트를 만들면 오브젝트마다 prim을 생성할 수 있고, path어트리뷰트를 만들면 전체 계층을 가진 namespace를 지정해줄 수 있다. Path 어트리뷰트는 name 어트리뷰트를 override할 수 있다
[ Primitive의 종류 ]
- Xform : transform정보를 가지고 있으며, child prim들에게도 적용됨
- Scope
- Mesh
3. Name vs. Namespace
프리미티브의 Name은 복수개로 존재할 수 있지만
Namespace(=Hierarchy, 계층구조)는 존재할 수 없다.
4. Graft vs. Reference
Reference로 가져오면 폰트가 초록색이고 Composition Arc 있다는 뜻이며, Graft는 모든 데이터를 flatten하여 하나의 active layer에 저장한다. 따라서 Graft는 퍼포먼스에 큰 영향을 줄 수 있으며 필요할 때만 사용하는게 정배인 것 같다. 예를 들어 USD파일로 저장할 필요가 없을 땐 굳이 Reference노드를 사용할 필요가 없으니.. (이펙트 작업으로 치면 Copy to Points로 가짜 인스턴싱을 하는 것과, 실제 bgeo나 ass로 포인트 인스턴싱 하는 것의 차이인듯)
같은 Namespace를 가진 여러개의 prim들이 있다면, 그 정보를 override하는 격이 된다
4. Material
- Assign Material 노드를 사용하면 Vex를 활용할 수 있고 Opinion을 지정할 수 있다. 부모에게서 Inherit된 속성보다는 Local속성의 opinion이 더 강력하다. 그 외에 Purpose등을 정하는 등 Assign Material노드의 기능이 더욱 유연하다.
- Material Linker를 활용하여 재질을 지정할 수도 있다. 또한 Catalog 기능을 통해 여러가지 프리셋을 이용할 수 있다
- "/asset/mat/"+@primname;
5. Layering vs. Flattening
- Layering을 하면 다른 usd를 레퍼런싱를 하면서 버전 관리와 파일 사이즈를 효율적으로 사용할 수 있다
- Flattening을 하면 하나의 usd에 모든 정보를 넣기 때문에 파일 사이즈가 커지지고, 다른 컴포넌트 usd의 버전이 바뀌어도 새로 참조할 수 없지만, 다른 서버를 사용하고 있는 작업자들에게 배포할 때 용이하다
- 그니까 Layering을 하자 ^_^
6. merge vs. Sublayer
merge로 레이어를 합치면 In-Memory로 작업을 하지만 Sublayer로 가져오면 참조를 하기 때문에 효율적으로 작업을 할 수 있다. (이펙트로 치면 캐시를 하는 것과 RAM을 사용하는 것과 비슷한 이치인듯)
6. Output Processor를 이용해서, 샷에 사용된 Texture와 HDR 경로등을 마스터 USD와 관련된 경로로 복사 할 수 있다. 이를 통해서 상대경로를 쭉 유지할 수 있음 (Rebelway 2주차 4강 참조)
7. Inherit Composition Arc
마치 파이썬의 부모 클래스처럼 같은 class를 공유하는 asset들에게 primitive수정을 공유할 수 있다 (Rebelway 3주차 7강 참조) 하지만 파이썬도 자식 클래스에서 override 가능하듯, local opinion보다는 약하다
8. Opinion 강도의 순서
Local > Inherit > Variant > Reference > Payload > Specialize
[ 특이한 노드들 ]
1. Stage Manager : Primitive를 전반적으로 관리할 때 사용
2. Layer Break
3. Configure Layer : USD Save Path를 지정할 때 사용 (i.e. Light.usd, Anim.usd, Camera.usd etc.), Up axis와 Meter per unit 또한 지정할 수 있다. 또한 Start New Layer버튼을 활성화하면 밑단에 있는 노드들은 새로운 layer로 분류된다
4. Configure primitive : Schema(Xform, Scope etc.)와 Purpose, Kind를 지정할 때 사용
5. Explore Variants : Exploded view
6. Cofigure Stage : Payload를 일괄 관리할 때 사용
7. Loft Payload Info : Payload를 바운딩 박스로 볼 때 사용
8. Component Geometry Variants : Component builder를 사용할 때 variant를 추가할 때 사용하면 편리함
9. Restructure Scene Graph : Primitive name을 변경하거나 지울 때 사용, 조심해서 사용해야 한다
10. Graft
11. Store Parameter Value : 메타데이터로 사용할만한 파라미터들을 생성하는 노드 (ex. root프림의 이름 등)
'Houdini' 카테고리의 다른 글
Solaris + Copernicus에서 표면에 디테일 주기 (2) | 2024.10.05 |
---|---|
Non Commercial 힙파일 변환 (1) | 2024.09.25 |
Hython Render Command (0) | 2024.02.23 |
Python Panel 정리 (0) | 2023.11.27 |
Houdini Orient 총정리 (1) | 2023.10.18 |