Houdini Copernicus Ultimate Guide 튜토리얼 정리 · 11편
파일 입출력과 렌더 파이프라인
File / ROP Image Output 디스크 입출력, 멀티레이어 EXR, Rename / Layer Properties / Layer Attribute Create, Cryptomatte 오브젝트별 후보정, Slap Comp, Block to Geometry 워크플로를 정리함.
[SOURCE] SideFX · The Ultimate Copernicus Guide | Every COP Node Explained
카테고리 houdini
Copernicus는 이미지 파일 로드부터 멀티레이어 EXR 출력, Cryptomatte 기반 오브젝트별 후보정, 그리고 뷰포트/디스크 렌더에 실시간 컴포지팅을 얹는 Slap Comp까지 렌더 파이프라인 전반을 담당함. 이 섹션은 디스크 입출력 노드(File / ROP Image Output), 출력 전 레이어 준비 노드(Rename / Layer Properties / Layer Attribute Create), 그리고 Cryptomatte·Slap Comp·Block to Geometry 워크플로 전체를 정리함. COP 결과를 op: 경로로 외부에서 참조하는 기본 원리는 01-core-concepts.md 참조.
이 문서는 SideFX 공식 튜토리얼 The Ultimate Copernicus Guide | Every COP Node Explained를 학습하며 정리한 기록임 — 오리지널 창작물이 아니라 원본 강의 내용을 주제별로 재구성한 자료임.
요약
- File: 이미지 로드. Border(wrap/mirror/clamp), OpenColorIO 컬러스페이스, Add AOVs from File로 EXR 전체 레이어 로드.
$F로 시퀀스,$HFS/houdini/pic에 내장 이미지. 로드 직후 Illegal Pixel 사전 클린 권장. - ROP Image Output: COP 결과 디스크 저장. COP Path에 Null 지정, Add AOVs from COP로 이름 있는 레이어 자동 감지 → 멀티레이어 EXR. Filters → Denoise(OptiX/OIDN) 지원.
- Rename: 레이어 이름 지정 — AOV 이름 결정.
- Layer Properties(노드): Type Info(태그만 변경 — 단 SDF 지정 시 실제로 SDF처럼 동작) / Border / Precision 후처리 변경.
- Layer Attribute Create:
savepath메타데이터 부여 — USD 저장 시 텍스처를 디스크에 함께 기록하는 용도. - Cryptomatte: 오브젝트/머티리얼별 마스크. 전제 =
name어트리뷰트로 프리미티브 분리(SOP Import의 Path Attributes 기준). AOV는 Additional Render Vars(__name, primvar) → Karma 2번 입력 + Import from Second Input. COP에서는cryptoobject00(RGBA)을 사용. 이름 = 씬 그래프 location, 콤마로 복수 선택. 디스크 파일은iinfo -v의 manifest에서 이름 조회. 굴절에 비치는 상에는 미적용. - Slap Comp: Import는 렌더 정보(AOV+카메라)를 가져오기만 함 — 뷰포트 등록은 Slap Comp Block이 담당. 디스크 렌더 시 자동 추가된 AOV는 폐기되어 에러 발생 → C만 남기거나 Additional Render Vars로 명시 지정해야 컴포지팅이 렌더에 포함됨.
- Block to Geometry: slap comp 블록을 .geo 파일로 인코딩 — 필름 룩을 LUT처럼 저장·재사용. 저장은 SOP 레벨에서만 가능(File Cache), USD Render ROP의 slap comp(File)로 적용.
파일 (File)
디스크에서 이미지 파일을 불러오는 노드임(기본값 default.pic).
주요 파라미터
- Clone: 별도 Houdini 인스턴스에서 데이터를 받는 용도의 옵션(튜토리얼에서는 다루지 않음).
- Border: 이미지 경계 밖 처리 — default / wrap(반대편으로 반복) / mirror / clamp(반대편으로 새지 않게). 왜곡·변환 계열 노드와 조합할 때 중요함.
- 컬러 스페이스: OpenColorIO 기본, raw 선택 가능.
- AOV 로드: "Clear 후 Add AOVs from File"로 EXR의 모든 레이어(combined, diffuse, P, N, camera normals, glossy, depth 등)를 레이어로 불러옴.
팁 / 워크플로
- Houdini 내장 이미지 경로
$HFS/houdini/pic에 UV grid, dirt 등 유용한 이미지가 있음. Tile Pattern의 UV에 UV grid를 샘플링해 UV 변형 결과를 시각적으로 확인하는 용도로 좋음(08-uv-distort.md). - 파일명 파라미터를 미들클릭하면 절대 경로로 변환됨 — 아래 Cryptomatte의
iinfo워크플로에서 활용함. - 렌더 파일을 불러온 직후
Illegal Pixel을 연결하는 사전 클린(pre-clean) 습관이 유용함(NaN/Inf 예방 — 06-filters.md 참조). $F를 파일명에 넣어 이미지 시퀀스의 프레임을 선택할 수 있음.
ROP 이미지 아웃풋 (ROP Image Output)
COP 결과를 디스크에 저장하는 렌더 노드임.
주요 파라미터
- Save to Disk: 저장 실행. 프레임 범위 또는 현재 프레임 선택 가능.
- COP Path: 저장할 노드를 지정함 — 예: Fractal Noise 뒤에
Null("output")을 만들어 드래그해 연결(주황/갈색 화살표가 생김). - Output AOVs: 여러 출력을 저장할 때 각 출력을
Null로 지정함. 출력 이름 지정 가능. - Add AOVs from COP: 이름이 지정된 레이어들을 자동 감지해 AOV 목록에 추가함.
- Filters → Denoise: 출력 단계에서 NVIDIA OptiX Denoiser, Intel OIDN Denoiser를 적용할 수 있음(12-advanced.md의 Denoise 참조).
팁 / 워크플로
- AOV 분리 예제:
RGB to Mono로 값(value) 추출, 원본 ÷ 값으로 색 분리 후 색/값을 별도 AOV로 저장하는 식으로 구성함(05-color.md의 색/값 분리 참조). - USD 텍스처 출력 시에는 ROP Image Output으로 텍스처를 미리 디스크에 내보내고 경로로 참조하는 방법과,
Layer Attribute Create의 savepath 메타데이터를 쓰는 방법 두 가지가 있음(아래 참조).
멀티레이어 EXR 출력 워크플로
여러 레이어를 하나의 EXR에 담아 내보내는 표준 워크플로임.
- 저장할 각 레이어에 이름을 부여함 — 예: 하나는
value, 다른 하나는color(레이어 이름 지정은 아래Rename참조). ROP Image Output에서 Add AOVs from COP를 실행하면value와color를 자동 감지함 → 멀티레이어 EXR 생성.- 기본 해상도(default resolution), 픽셀 스케일(pixel scale) 등 나머지 설정은 별도 조치가 없으면 기본값이 그대로 사용됨.
- 특정 값을 출력 전에 바꾸고 싶으면
Layer Properties노드를 출력 직전에 끼워 넣음(아래 참조). 사용하지 않으면 기본값이 적용됨.
리네임 (Rename)
레이어에 이름을 붙이거나 바꾸는 노드임. 멀티레이어 EXR 출력 시 AOV 이름을 지정하는 용도로 쓰임.
팁 / 워크플로
- 레이어 하나는
value, 다른 하나는color처럼 이름을 지정해 두면 ROP Image Output의 Add AOVs from COP가 그 이름으로 AOV를 자동 감지함. - 노드에 이름을 부여하는 다른 방법으로는
Null을 만들어 이름을 주는 방식이 있음 —op:참조와 COP Path 지정 모두 이 패턴을 씀.
레이어 프로퍼티 (Layer Properties — 노드)
레이어가 기본으로 갖는 속성(정밀도, 보더 타입, 타입 정보)을 후처리로 조정하는 노드임. 레이어 프로퍼티(메타데이터) 개념 자체는 01-core-concepts.md 참조.
주요 파라미터
- Type Info: 타입 정보 태그만 바꿈 — 실제 데이터 변환은 하지 않음. 예: mono를
id로 지정해도 출력은 여전히 mono 타입임. 단SDF로 지정하면 SDF처럼 취급되어SDF to Mono의 iso offset이 실제로 동작함(mono와 SDF의 데이터 구조가 매우 유사하기 때문 — Fractal Noise → SDF to Mono 직결도 동작함. 07-sdf.md 참조). - Border: 보더 동작 변경. 예:
File이미지를Transform 2D로 축소하면 기본 wrap 때문에 이미지가 반복되는데, 중간에 Layer Properties로 border를 clamp로 바꾸면 반복이 사라짐. - Precision: 채널당 부동소수점 저장 비트 수. 기본 32비트인데, 실제로는 더 낮은 정밀도로도 충분히 작업 가능한 경우가 많음.
팁 / 워크플로
Size Reference도 비슷한 역할이지만 그쪽은 주로 Fractal Noise 등의 시작점/입력으로 쓰임(예: 1920×1080 사이즈 참조 공급). Layer Properties는 그 이후 단계에서 속성을 바꾸는 용도임.- Streak Blur 등에서 블러가 이미지 상하단에서 번져 나오는(bleeding) 현상이 보이면 layer properties의 border 설정 때문임 — Layer Properties에서 Border를 Clamp로 설정하면 해결됨(06-filters.md).
- 출력 직전에 끼워 넣어 해상도·픽셀 스케일 등 출력 속성을 바꾸는 용도(위 멀티레이어 EXR 워크플로), HDA 제작 시 들어오는 데이터를 처리 전에 올바른 상태로 준비(prep)하는 용도로 유용함.
레이어 어트리뷰트 크리에이트 (Layer Attribute Create)
레이어(텍스처)에 메타데이터 어트리뷰트를 추가하는 노드임. 사실상 USD 텍스처 출력용 단일 목적 노드임.
배경: USD 작업 시 op: 구문(op + 레이어 경로)으로 COP 텍스처를 참조하는데, USD 파일 저장 시 그 텍스처를 디스크에 함께 기록하려면 텍스처에 메타데이터가 필요함.
주요 파라미터
- Name:
savepath로 설정 — USD가 메타데이터에서 인식하는 이름임. - Value: 저장 경로 지정 — 예:
$HIP/textures/....
팁 / 워크플로
- 예: Fractal Noise → Layer Attribute Create(savepath 메타데이터 부여) →
Null(texture out 역할). 이 Null을op:경로로 참조하는 상태에서 USD 파일을 디스크에 저장하면, savepath 메타데이터를 찾아 그 경로로 텍스처를 저장함. - 대안: 텍스처를 각각
ROP Image Output으로 디스크에 미리 출력해 두고 디스크 경로로 참조하는 방법도 있음. 이 노드는 그와 다른 또 하나의 방식일 뿐임.
Cryptomatte 워크플로
렌더에서 오브젝트별/머티리얼별 마스크(크립토매트)를 추출해 슬랩 컴프에서 개별 조정을 가능하게 하는 워크플로 전체임.
Solaris 측 사전 셋업
- 예제 씬: SOP Import 두 개(여러 오브젝트 묶음 + rubber toy), 라이트, 카메라, Karma 렌더 설정(XPU).
- 핵심 전제: 크립토매트는 머티리얼 또는 오브젝트 단위로 분리되어야 함. 여러 오브젝트가 단일 프리미티브로 들어오면 전부 하나의 크립토매트로 취급됨.
- 해결 —
name어트리뷰트: SOP 레벨에서name어트리뷰트를 추가(box/sphere/torus 등)하면 프리미티브가 분리됨. SOP Import의 Primitive Definition → Path Attributes에path/name이 분리 기준으로 지정되어 있기 때문임. name을 제거하면 단일 메시, 다시 넣으면 분리됨.
AOV(Render Var) 생성 — 두 가지 방법
- Karma Render Settings의 Image Output → AOVs → Extra Render Vars에 추가 → 드롭다운에서
Cryptomatte Object Name또는Cryptomatte Material Name선택. Additional Render Vars노드 사용(강연자 선호 — 분리가 깔끔하고 추적이 쉬움):- Source Name:
__name(언더스코어 2개 + name), Source Type: primvar. primvar는 SOP 어트리뷰트가 스테이지 레벨로 올라올 때의 형태임. - 이 노드를 Karma Render Settings의 2번 입력에 연결하고 Image Output → AOVs → "Import Render Vars from Second Input" 설정.
- Source Name:
COP 측 사용
- COP 네트워크에 Slap Comp Block 생성 → Add AOVs from Last Render →
cryptoobject,cryptoobject00등이 추가됨. 첫 번째는 일반 RGB, 두 번째(cryptoobject00)가 RGBA이며 실제로 필요한 것은 이쪽임. - Cryptomatte 노드:
cryptoobject00을 1번 입력에 연결.- Select All: 크립토매트가 있는 모든 오브젝트의 마스크 생성.
- 특정 오브젝트 지정: 크립토매트 이름은 씬 그래프 트리의 location 이름과 동일함. 씬 그래프에서 항목을 드래그해 넣으면 됨. 복수 선택은 콤마 구분(예:
sphere, torus). - 이 출력을
Multiply Constant등의 mask 입력에 드래그해 선택 오브젝트만 색 조정 가능함.
디스크 렌더에서 크립토매트 이름 찾기 (iinfo manifest)
씬 그래프 트리에 접근할 수 없는 경우(남이 렌더한 파일 등)의 방법임.
File노드로 렌더 로드. 파일명 파라미터를 미들클릭해 절대 경로로 변환 후 복사.- Windows → Shell에서 실행:
→ 상세(verbose) 메타데이터 출력.iinfo -v <이미지 경로> - 상단의 크립토매트 관련 항목(conversion, hash, manifest) 중 manifest(string 타입)에 각 오브젝트 이름이 들어 있음(예:
object/sphere,object/torus,object/box). - 이름을 복사해 Cryptomatte 노드(Add AOVs from File 사용,
cryptomatte00연결)에 붙여넣음.
- 강연자는 추후 버전에서 드롭다운이 추가되어 이 방법이 불필요해질 것으로 추정함.
머티리얼 이름 기반 크립토매트
Material Linker로 머티리얼(car paint, ceramic, cotton, surface blue, glass 등) 할당.- Additional Render Vars를
Cryptomatte Material Name으로 교체. - COP에서 동일하게 Add AOVs from Last Render → 첫 RGBA 출력 사용 → 씬 그래프의 materials 아래에서 원하는 머티리얼(예: car paint)을 선택 →
HSV Adjust등의 mask로 연결해 hue shift 등 적용(05-color.md).
- 장점: 씬 뷰를 "Preview Slap Comp"로 두면, 다른 오브젝트(예: rubber toy)에 같은 머티리얼을 적용하는 순간 그 오브젝트에도 후처리가 자동 적용됨.
- 한계: 크립토매트는 지오메트리에 굴절(refraction)되어 비치는 상에는 적용되지 않음.
Cryptomatte Decode / Encode
- Decode: 사람이 읽을 수 있는 크립토매트를 ID 집합 + coverage(사실상 마스크)로 변환함.
- Encode: 다시 크립토매트로 되돌림.
- 강연자는 실무에서 decode/encode를 쓴 적이 없고 기본 Cryptomatte 노드로 충분했다고 함.
Slap Comp 워크플로 (Slap Comp Import / Slap Comp Block / 렌더 연동)
뷰포트 렌더 결과에 실시간 컴포지팅(slap comp)을 적용하고, 그것을 디스크 렌더에도 포함시키는 워크플로임. 시나리오: Stage 레벨에 오브젝트 + 라이팅(Physical Sky, 밝기 조정/회전) + 카메라가 있는 기본 씬 → COP network를 만들어 내부로 진입함.
Slap Comp Import
- Add AOVs from last render를 눌러야 동작함. 뷰포트(마지막 렌더)의 정보 — 렌더의 AOV 전부와 카메라 정보까지 — 를 가져옴.
- 가져온 이미지에
Glow등을 적용해 효과를 줄 수 있음. - 한계/주의: 이 노드만으로는 뷰포트에 slap comp가 표시되지 않음. 뷰포트 우측의 slap comp 설정을 눌러도 "selected slap comp block deleted or unregistered" 에러가 남. 즉 Slap Comp Import는 정보를 COP 컨텍스트로 가져오는 용도일 뿐, slap comp 등록용이 아님.
Slap Comp Block (Block Begin / Block End)
- 실제로 뷰포트와 Houdini에 등록되는 것은 Slap Comp Block임. 이걸 써야 뷰포트에서 slap comp를 볼 수 있음.
- 마찬가지로 Add AOVs from last render 시 미지정 AOV들이 다 들어오고, 기본으로 C와 depth도 들어옴(단 depth는 명시 지정된 것이 아님 — 디스크 렌더에서 문제가 됨, 아래 참조).
- Block 안에서
Glow적용 후 한 레벨 위로 가면 뷰포트 우측에서 slap comp를 활성화 가능함. Mono 변환 →Ramp RGB(size reference 제공) 등 어떤 극단적인 처리도 뷰포트에 실시간 적용됨. - Block Begin/End의 일반적(비-slap comp) 용법인 Invoke Block 루프는 12-advanced.md 참조.
디스크 렌더에 slap comp 포함하기 (Karma Render Settings 연동)
- Karma 노드의 slap comp 옵션에서 외부 파일 또는 COP network(cop 노드 지정 — 내부의 Block End를 선택) 중 선택 가능함.
- 흔한 함정: 자동 생성된 AOV들 때문에 에러가 나서 컴포지팅이 통째로 건너뛰어지는 경우가 많음.
- 원인: 그 AOV들은 뷰포트 작업 중에만 존재하는 임시 컨텍스트임. 디스크로 렌더하는 순간 Houdini가 디스크 공간 절약을 위해 그것들을 폐기하고 EXR에 저장하지 않음. 그래서 렌더 이미지를 지정된 COP net에 통과시킬 때 "AOV가 없다"며 에러를 내고 컴포지팅을 건너뜀.
- 해결책 1 — 삭제: C만 남기고 나머지 AOV를 전부 제거(Block에서도 제거). C는 항상 존재하므로 문제없이 동작함.
- 해결책 2 — 명시적 지정 (Additional Render Vars):
Additional Render Vars노드를 만들고 카메라를 연결.- 원하는 AOV 추가 — 예:
P(월드 공간 위치),depth,N(normals — smooth normal). - 이 노드를 Karma Render Settings의 두 번째 입력(additional render vars 입력)에 연결.
- Karma Render Settings → Image Output에서 Import Render Vars from Second Input 활성화.
- 렌더를 재시작하면 AOV 목록에 C, N, P, depth가 뜸 — 이제 이것들은 사용자가 명시 지정한 것임.
- COP network에서 P(RGB), N(RGB) 등을 불러올 수 있음. 단 Block Begin에는 자동 추가되지 않아 수동 추가가 필요함 — 번거로우면 Add AOVs from last render를 다시 실행한 뒤 불필요한 것(instanceID, primID)만 삭제하는 방식이 편함.
- 이제 N, P, depth를 자유롭게 사용/내보내기(Block End로 export 포함) 가능하고, 에러 없이 컴포지팅이 적용된 채로 디스크 렌더가 됨.
연계 활용
- 이 셋업은 Edge Detect by Depth/Normal(06-filters.md), Denoise AI의 albedo/normal 보조 입력(12-advanced.md), Dot/Cross Product 기반 포스트 프레넬(09-geometry-3d.md) 등 렌더 AOV를 쓰는 모든 워크플로의 공통 기반임.
블록 투 지오메트리 (Block to Geometry)
slap comp 블록(처리 노드 묶음)을 디스크에 .geo 파일로 저장하고 재사용할 수 있게 하는 노드임. COP 처리 프리셋/LUT처럼 쓰는 워크플로임.
팁 / 워크플로 — 필름 룩을 .geo로 저장해 재사용
- 오브젝트 레벨 COP network 안에 Slap Comp Block 생성. Slap Comp Import는 불필요 — Block Begin/End만 사용. 입출력은 C만 사용(depth 없음).
- 입력으로 노이즈 패턴을 쓰고, 블록 내부에 처리 체인 구성:
Convolve(3×3, 바깥 -2씩 + 중앙 9로 샤픈) →Glow(threshold 올림) →Chromatic Aberration. Block to Geometry노드를 만들고 Block End를 노드 파라미터로 드래그해 지정.- 디스플레이 플래그를 Block to Geometry에 놓으면 입력이 사라지고 뷰포트에 이상한 프리미티브가 보임 — 이것이 저장 대상임(블록이 지오메트리로 인코딩된 것).
- 저장 위치 특이사항: COP 레벨에서는 저장 불가 — output이 없기 때문임. SOP 레벨에서 해야 함. Geometry 노드 안에 COP network를 만들어 내용을 붙여넣으면 상위 레벨에 output이 생김. 미들마우스로 확인하면 17 points, 31 prims, 62 vertices 같은 지오메트리 정보가 보임.
File Cache로 저장: 명시적 파일 경로 지정, 시간 의존성 제거, 이름 예:block_process.geo→ Save to Disk 실행.- 이후 Stage 레벨에서(rubber toy + 카메라 + Karma Physical Sky + Karma 렌더 노드 구성) USD Render ROP의 slap comp 항목에서 slap comp를 추가 — 기본값이 File임. 저장해 둔
block_process.geo를 선택. - 디스크로 렌더(스케줄러 경유)하면 블록에 넣어 둔 샤픈, 글로우, 색수차가 렌더에 그대로 적용됨.
실전 활용
- 여러 파일/여러 렌더를 돌릴 때 매번 COP 네트워크를 재생성할 필요 없이, 필름 룩을 LUT처럼 .geo 파일 하나로 저장해 두고 어디든 참조해서 적용할 수 있음.
Houdini Copernicus Ultimate Guide 튜토리얼 정리 · 전체 12편
- 00 Houdini Copernicus Ultimate Guide 튜토리얼 정리 index
- 01 핵심 개념
- 02 생성·패턴 노드
- 03 값 조정과 리매핑
- 04 블렌딩과 합성
- 05 색 보정
- 06 필터와 이펙트
- 07 SDF와 거리장
- 08 UV·왜곡·좌표
- 09 지오메트리·3D 연동
- 10 ID·세그먼트·변환 유틸리티
- 11 파일 입출력과 렌더 파이프라인
- 12 프로그래밍과 고급 기능