Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

테드옹의 VFX

USD Solaris 개념 정리 본문

Houdini

USD Solaris 개념 정리

Tedd_Kim 2024. 6. 8. 00:26

이 게시물은 굉장히 긴 싸움이 될 것...........

 

[ 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