Houdini Copernicus Ultimate Guide 튜토리얼 정리 · 3편
값 조정과 리매핑
Remap, Invert, Clamp, Equalize, Quantize, Compare, Function, Illegal Pixel 등 픽셀 값 자체를 옮기고 자르고 변환하는, COP에서 가장 자주 쓰이는 값 유틸리티 노드군을 다룸.
[SOURCE] SideFX · The Ultimate Copernicus Guide | Every COP Node Explained
카테고리 houdini
COP에서 픽셀 값은 화면에 보이는 것과 달리 1을 넘거나 0 아래로 내려갈 수 있음(자세한 배경은 핵심 개념의 Inspect 항목 참조). 이 섹션의 노드들은 그런 값 범위를 원하는 범위로 옮기고, 자르고, 반전하고, 계단화하고, 비교하고, 수학 연산을 적용하는 — 값 자체를 다루는 유틸리티들임. 노이즈·마스크·depth 등 거의 모든 데이터 가공의 기초가 되므로 COP 워크플로 전반에서 가장 자주 쓰이는 노드군임.
이 문서는 SideFX 공식 튜토리얼 The Ultimate Copernicus Guide | Every COP Node Explained를 학습하며 정리한 기록임 — 오리지널 창작물이 아니라 원본 강의 내용을 주제별로 재구성한 자료임.
요약
- Remap: 고정된 입력 범위(Input Min/Max)를 출력 범위로 리핏. 0~1 ↔ -1~1 좌표 공간 변환의 표준 도구. 입력 범위가 고정이라 프레임 간 일관성이 필요하면 Equalize 대신 이것을 씀.
- Invert: 3가지 모드 — Complement(
1-x, 0~1 범위 전제) / Negate(×-1) / Reciprocal(1/x). - Clamp: 상한/하한 밖 값을 잘라냄. 리밋을 입력으로 구동하면 절대값이 아니라 파라미터에 대한 곱(multiplier)으로 작동함.
- Equalize: 입력의 min/max를 0~1로 정규화. 적응형이라 매 프레임 재조정됨 — 애니메이션에는 비권장, 리소스 소모도 큼.
- Quantize: 그라디언트를 계단화. 툰 셰이딩은 RGB 직접 양자화 대신 값/색 분리(RGB to Mono → Divide) 후 값만 양자화하는 것이 정석.
- Compare: ==, !=, >, >=, <, <= 비교 + Tolerance. 0/1 결과라 마스크 생성에 적합함.
- Function: COP의 수학 연산 담당(Arithmetic/Powers/Trigonometry). Absolute=미러 효과, Sign=부호 판정, Normalize=방향 벡터화, Sine=타일러블 패턴. 노드명이 "math"가 아니라 Function임에 주의.
- Illegal Pixel: NaN/Inf 감지·수정. Fix는 Blend surrounding(약 16px 한계) 또는 Zero. File 노드 뒤 사전 클린(pre-clean) 습관 권장.
리맵 (Remap)
들어오는 값 범위(Input Min/Max)를 새 범위(Output Min/Max)로 리핏(refit)하는 노드임.
주요 파라미터
- Input Min / Input Max: 입력으로 간주할 값 범위. Input Min을 올리면 낮은 값이 클램프되는 것처럼, Input Max를 낮추면 밝은 값이 클램프되는 것처럼 동작함.
- Output Min / Output Max: 출력 값 범위. Output Min을 올리면 결과가 완전 검정(0)이 되지 않게 보정할 수 있음.
- 하단 램프: 리맵된 출력 위에서 동작하는 추가 램프 조정임.
- Threshold 모드: 특정 값을 기준으로 잘라 0 또는 1로 만듦. 사이 range 값을 키우면 중간값이 살아남아 경계의 부드러움을 제어할 수 있음.
팁 / 워크플로
- Output Min=1, Output Max=0으로 두면 반전(inversion) 용도로 쓸 수 있음.
- Threshold 모드는 특정 값 기준으로 조여 마스크를 만들 때 유용함.
- 범위를 벗어난 값은 기본적으로 클램프됨 — Clamp와 동작이 겹치는 부분임.
- 좌표 공간 변환의 표준 도구임: COP의 이미지 공간은 -1~1, 텍스처 공간은 0~1이므로, Remap으로 0~1 ↔ -1~1을 오가는 패턴이 매우 자주 쓰임. 예: Ramp의 position 입력은 -1~1을 기대하므로 0~1 데이터를 Remap(-1~1)으로 변환해 넣음. UV Sample / Texture Sample의 공간 차이도 같은 방법으로 해결함(UV·왜곡 참조).
- Equalize와의 결정적 차이: Remap은 input min/max가 고정임. 예를 들어 depth 0~50m를 고정 리맵하면 매 프레임 같은 값이 같은 결과를 냄. 프레임 간 일관된 결과가 필요하면 반드시 Remap을 써야 함(아래 Equalize 주의사항 참조).
- 값 구간을 극단적으로 조이는 용도로도 씀: 노이즈를 Remap으로 거의 0 아니면 1로 만들어 디스플레이스먼트 마스크로 쓰는 예가 대표적임(필터의 Feather 예제 참조). Steps 타입으로 값 구간을 조여 셀 패턴을 만드는 활용도 있음.
인버트 (Invert — Complement / Negate / Reciprocal)
값을 세 가지 방식으로 반전하는 노드임.
주요 파라미터
- Complement(기본):
1 - 입력. 0↔1 반전. 0~1 범위를 전제로 함 — 입력이 -1이면 2, -5면 6이 됨(Inspect로 확인 가능). - Negate:
입력 × -1. 부호 반전(-5 → 5, 1 → -1, 0은 그대로). - Reciprocal:
1 / 입력. 역수. 부호는 유지됨(0.3 → 3.33, 2 → 0.5).
팁 / 워크플로
- 요약: Complement는 0~1 범위 이미지용, Negate는 부호 뒤집기용, Reciprocal은 역수용임.
- 0~1을 벗어난 데이터에 무심코 Complement를 걸면 기대와 다른 값이 나오므로, 값 범위가 의심스러우면 Inspect로 확인할 것.
클램프 (Clamp)
값이 지정한 상한/하한 범위를 벗어나지 않도록 잘라내는 노드임.
주요 파라미터
- Lower Limit: 이 값보다 낮은 값은 모두 하한값으로 설정됨. 올리면 하한에 걸린 어두운 영역이 하한값으로 들어올려져 밝아짐.
- Upper Limit: 이 값보다 높은 값은 상한값으로 설정됨.
- Replace with Black 옵션: 리밋값으로 치환하는 대신 범위를 벗어난 값을 검정(0)으로 치환함. 0~1 범위를 벗어나는 영역이 어디인지 시각적으로 확인하는 용도로 좋음.
팁 / 워크플로
- 입력 구동 특이사항: 하한/상한을 입력으로 구동할 수 있는데, 이때 입력값은 절대값이 아니라 파라미터에 대한 곱(multiplier) 으로 작동함. 예: Ramp를 lower limit 입력에 연결하고 파라미터를 1로 올리면
파라미터 × 입력값으로 하한이 위치마다 달라짐. 상한도 동일함. - 곱셈 등의 연산으로 값이 비정상적으로 커지는 "misbehaving values"가 있을 때 극단적인 범위를 방지하는 데 유용함(테스트는 amplitude를 키운 Fractal Noise를 source로 연결해 확인 가능).
- Remap도 기본적으로 유사하게 동작함 — 입력 범위(0~1)를 새 범위(0~1)로 맞추면서 범위 밖 값이 클램프됨. 단순히 자르기만 원하면 Clamp, 범위 이동까지 원하면 Remap을 씀.
- 화면상으로는 클램프 전후가 똑같아 보일 수 있음(1 이상은 전부 흰색으로 보이므로) — 값이 실제로 잘렸는지는 Inspect로 확인해야 함.
이퀄라이즈 (Equalize)
값을 작업 가능한 범위로 되돌리는 노드임. 0~1을 벗어난 값(예: 램프 × 상수)을 다시 0~1로 가져옴.
주요 파라미터
- Stretch to Black and White: 입력의 min~max를 0~1로 스트레치함.
- Move Minimum to Black: 최솟값이 0이 되도록 이동.
- Move Maximum to White: 가장 밝은 점이 1이 되도록 전체를 내림.
- Move Average to Value: 목표 평균값을 지정함. fit method가 shifting이면 밝은/어두운 값의 우선순위가 달라지고, scaling이면 평균이 목표값(예: 0.5)이 되도록 전체를 스케일함.
팁 / 워크플로
- 적응형(adaptive) 노드라는 점이 핵심 주의사항임: 매 프레임 입력의 min/max에 맞춰 재조정됨. 예를 들어 depth 범위가 샷 중 0~10m → 0~50m로 변하면 매 프레임 0~1로 다시 핏되어 0.5라는 값의 의미가 프레임마다 달라짐. 애니메이션에서 일관성이 필요하면 input max가 고정된 Remap을 써야 함.
- 리소스 소모도 큰 편이라, Eikonal 거리장 정규화처럼 한 번 값 범위를 확인·정리하는 데는 편하지만 애니메이션 파이프라인에서는 제거가 권장됨(SDF의 Eikonal 활용 참조).
- 값 범위가 매우 큰 외부 데이터(예: 하이트필드의 0~500 값)를 우선 보이게 만들 때도 유용함(지오메트리 연동의 Geometry to Layer 참조).
- Prefix Sum처럼 누적으로 값이 수천 단위까지 커지는 결과를 이해하기 쉽게 0~1로 볼 때도 씀(고급 참조).
퀀타이즈 (Quantize)
부드러운 그라디언트를 계단식 세그먼트로 분할하는 노드임.
주요 파라미터
- Segments: 세그먼트 수 = 색 단계 수.
- Rounding: floor(기본, 낮은 값 선택) / closest / ceiling(검정이 완전 검정이 아니게 됨) / custom.
- Min / Max: 세그먼트 구간에 영향을 주는 값 범위.
팁 / 워크플로
- mono가 아닌 RGB를 직접 양자화하면 세그먼트 수와 색 수가 정확히 일치하지 않고, 실사 이미지에서는 어둡게 타는 등 결과가 좋지 않을 수 있음.
- 툰 셰이딩 워크플로(권장 패턴): RGB를 그대로 양자화하지 말고 값과 색을 분리해서 처리함.
- RGB to Mono로 값(value)을 추출함.
- 원본 ÷ 값(Divide) = 순수 색 성분이 분리됨.
- 값에만 Quantize를 적용해 명도를 계단화함.
- 색 × 양자화된 값(Multiply) = 색은 유지되고 명도만 계단화된 툰 룩이 됨.
- 색 성분 쪽에 Kuwahara 필터를 얹으면 더 회화적인 툰 느낌이 남.
컴페어 (Compare)
두 입력을 조건으로 비교하여 마스크로 쓸 수 있는 결과를 출력하는 노드임.
주요 파라미터
- 비교 연산:
A == B(같음),A != B(같지 않음 — 역),A > B,A >= B,A < B,A <= B. - Tolerance: 정확히 같지 않아도 허용 오차 내면 true로 처리함.
팁 / 워크플로
- 동작 예: 순수 흰색 Constant를 A, concentric으로 설정한 Ramp Mono(중앙으로 값을 올린 것)를 B로 연결하면 —
A == B: 픽셀이 완전히 같은(흰 vs 흰) 영역만 true. 회색이 조금이라도 섞이면 false.A > B: B 값이 A보다 낮은 모든 곳이 true.A >= B: 흰 상수는 모든 값보다 크거나 같으므로 전체가 흰색.A < B: 이 예제에서는 해당 없음 → 전체 검정.
- 결과가 0/1 형태이므로 마스크 생성에 매우 유용함.
펑션 (Function)
COP에서 대부분의 수학 연산을 담당하는 노드임.
주요 파라미터
- Function Class: 클래스를 바꾸면 사용 가능한 연산이 달라짐.
- Arithmetic(산술): absolute, sign, negate, normalize 등.
- Powers(거듭제곱): square root, powers, base logs, natural logs.
- Trigonometry(삼각함수): sine, cosine, tangent. 각도 단위(angle units) 선택 가능.
대표 함수 동작
- Absolute: 모든 음수 값을 양수로 뒤집음.
UV Map→ Function(Absolute) →UV Sample로 텍스처를 샘플하면 UV의 음수 영역이 뒤집혀 미러 효과가 생김. - Sign: 입력이 양수면 1, 음수면 -1, 0이면 0을 반환함(예: 0.5 → 1, -0.5 → -1).
- Normalize: 벡터의 길이(magnitude)를 1로 만들어 방향만 유지함. 독립 노드가 아니라 Function 노드를 Normalize로 설정한 프리셋임.
- 예: (1.5, 2, 0.3) 벡터를 normalize하면 단위 구(각 축 -1~1에 내접하는 구) 안에 들어옴. 길이=1로 고정되고 방향만 보존됨.
- 입력에 스케일·회전을 여러 번 거쳐 값이 지저분해졌을 때, Function(Normalize)에 통과시키면 순수한 방향 벡터로 되돌릴 수 있음.
- Length(크기) × Normalize(방향) = 원래 벡터 — 벡터를 방향과 크기로 분리해 독립 제어하는 워크플로의 핵심임. Dot Product를 이용한 프레넬 효과 등에서도 벡터를 먼저 normalize해야 제대로 동작함(고급의 벡터 노드군 참조).
- Power: exponent 조절로 값 곡선을 제어함. 프레넬 마스크의 폭 조절 등에 활용됨(고급 참조).
팁 / 워크플로
- Sine 활용 팁: UV에 sine을 걸면 루핑(반복) 시스템이 생겨 타일러블 텍스처 제작에 매우 좋음. Transform 2D로 반복시키면 멋진 타일링 텍스처가 됨. SDF Shape(trapezoid) → SDF to Mono → 변환 조합으로 온갖 패턴 생성이 가능하니 창의적으로 활용하면 좋음.
- 모든 함수는 노드 문서(documentation)에 arithmetic/powers/trigonometry별로 설명되어 있음.
- 검색 팁: 노드 이름이 Function임에 유의 — 다른 컨텍스트 습관대로 "math"를 검색하면 원하는 게 안 나옴. Utility 카테고리에 math 계열 노드들이 있긴 하지만 보통 찾는 그것이 아님.
일리걸 픽셀 (Illegal Pixel)
이미지 내의 불법 픽셀 — 무한값(Inf) 또는 NaN(Not a Number) — 을 감지하고 수정하는 전용 노드임.
주요 파라미터
- Detect:
NaN,Infinite, 둘 다, 또는 Custom(특정 값보다 작거나 큰 값을 불법으로 감지) 선택 가능. 일반적으로 NaN + Infinite 둘 다 켬. - Fix 방식:
- Blend surrounding: 주변 픽셀을 블렌딩해 수정함. 단, 불법 픽셀 영역이 너무 크면 작동하지 않음 — 문서상 약 16픽셀(16회 반복으로 보정 이미지에 접근)이 한계라서 큰 패치에는 실패함.
- Zero: 검정(0)으로 설정함.
- 표시 옵션: Highlight(불법 픽셀 위치를 하이라이트로 표시), Isolate(다른 픽셀값을 전부 제거하고 불법 픽셀만 표시).
팁 / 워크플로
- 렌더링 시 이런 아티팩트가 생길 수 있고, 컴포지팅 단계에서 특정 픽셀이 흐릿하거나 0값이거나, 이미지에 검은 사각형 블록이 나타나는 식으로 드러남. 무한값 문제는 Clamp나 Remap으로도 고칠 수 있지만 이 노드가 전용임.
- 사전 클린(pre-clean) 습관 권장: 이미지를 왜곡(distort)했더니 한가운데 검은 블록이 생기는 사례가 실제로 있었음. File 노드 바로 뒤에 Illegal Pixel을 연결해 두면 이런 문제를 예방할 수 있음.
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 프로그래밍과 고급 기능