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

#houdini#copernicus#cop#remap#clamp#quantize

← 목차로 돌아가기

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를 그대로 양자화하지 말고 값과 색을 분리해서 처리함.
    1. RGB to Mono로 값(value)을 추출함.
    2. 원본 ÷ 값(Divide) = 순수 색 성분이 분리됨.
    3. 값에만 Quantize를 적용해 명도를 계단화함.
    4. 색 × 양자화된 값(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편

  1. 00 Houdini Copernicus Ultimate Guide 튜토리얼 정리 index
  2. 01 핵심 개념
  3. 02 생성·패턴 노드
  4. 03 값 조정과 리매핑
  5. 04 블렌딩과 합성
  6. 05 색 보정
  7. 06 필터와 이펙트
  8. 07 SDF와 거리장
  9. 08 UV·왜곡·좌표
  10. 09 지오메트리·3D 연동
  11. 10 ID·세그먼트·변환 유틸리티
  12. 11 파일 입출력과 렌더 파이프라인
  13. 12 프로그래밍과 고급 기능