Houdini Copernicus Ultimate Guide 튜토리얼 정리 · 8편

UV·왜곡·좌표

UV Sample / Texture Sample, Distort 계열, Slope Direction, Derivative, Position Map, Extrapolate Boundaries, Prefix Sum 등 UV 좌표를 만들고 샘플링하고 왜곡하는 노드들을 다룸.

생성 · 수정 · 그윈, 코리언메시

[SOURCE] SideFX · The Ultimate Copernicus Guide | Every COP Node Explained

카테고리 houdini

#houdini#copernicus#cop#uv#distort#derivative

← 목차로 돌아가기

UV 좌표를 만들고, 샘플링하고, 왜곡하는 노드들을 정리함. COP의 좌표 공간은 UV의 0~1이 아니라 **(-1,-1) ~ (1,1), 중심 (0,0)**이라는 점이 모든 것의 출발점임(핵심 개념 참조) — 기대하는 공간이 다르면 샘플링·왜곡 결과가 전부 틀어지므로, 노드마다 어떤 공간을 기대하는지 반드시 확인해야 함. 좌표를 다루는 노드는 왜곡(Distort), 미분(Derivative/Slope Direction), 누적(Prefix Sum) 같은 값 연산과 조합될 때 진가가 드러남.

관련 노드 링크: 극좌표 변환(Polar to UV / UV to Polar)과 ID 기반 UV 생성(UV Map by ID)은 ID·세그먼트에서 다룸.

이 문서는 SideFX 공식 튜토리얼 The Ultimate Copernicus Guide | Every COP Node Explained를 학습하며 정리한 기록임 — 오리지널 창작물이 아니라 원본 강의 내용을 주제별로 재구성한 자료임.

요약

  • UV Sample / Texture Sample: 사실상 같은 노드 — 기대 좌표 공간만 다름. UV Sample = 이미지 공간(-1~1), Texture Sample = 텍스처 공간(0~1). Remap으로 상호 변환.
  • Distort: direction 입력(UV) 또는 angle로 레이어 왜곡. 노이즈를 direction으로 쓸 땐 center를 0으로 내려야 양방향 왜곡됨. Streak 옵션은 내부적으로 Streak Blur 사용.
  • Distort by Slope: 단일 노드가 아니라 Slope Direction + Distort의 묶음. 높이 맵 경사 방향으로 왜곡함.
  • Slope Direction: 높이(흰색=높음)에서 경사 방향 계산. Kernel Size가 아티팩트 제거의 핵심 파라미터.
  • Derivative: 값 변화량(미분) 계산 — X/Y 변화량 두 값을 출력. 균일 그라디언트는 균일 회색, 상수 입력은 항상 검정.
  • Position Map: 노이즈의 기본 좌표 공간을 출력. Vector Transform 등으로 변형해 노이즈 position에 넣으면 왜곡을 상속함 — 소용돌이·만화경·버블 효과의 기반.
  • Extrapolate Boundaries: 채워진 영역 값을 빈 영역으로 확장. UV 아일랜드 seam 제거의 표준 해결책(source=텍스처, fill area=알파).
  • Prefix Sum: 방향(+X/−X/+Y/−Y) 누적 연산(Add/Minimum/Maximum). 4방향 Minimum 조합 + Function(삼각함수) + Blur로 유사 SDF 등고선 패턴 생성 가능.

UV 샘플 / 텍스처 샘플 (UV Sample / Texture Sample)

UV/텍스처 공간 좌표를 받아 텍스처를 샘플링하는 노드임. 두 노드는 사실상 같은 노드이고 기대하는 좌표 공간만 다름.

주요 파라미터

  • 첫 입력: UV 좌표. 텍스처 입력: 샘플링할 이미지.
  • 공간 정의(핵심):
    • UV Sample = 이미지 공간(image space): (-1, -1) ~ (1, 1).
    • Texture Sample = 텍스처 공간(texture space): (0, 0) ~ (1, 1).

팁 / 워크플로

  • 동작 확인: UV Map(기본 -1~1 범위) → UV Sample에 연결 + 텍스처(File) 샘플 → 기본 UV라 변화 없음(정상). 같은 UV Map을 Texture Sample에 꽂으면 공간이 틀려 결과가 잘못됨.
  • 공간 변환: Remap으로 상호 변환 가능 — (-1~1) → (0~1)로 리맵하면 Texture Sample용, 반대로 (0~1) → (-1~1)이면 UV Sample용(값 리맵 참조).
  • 커스텀 UV 예제: Ramp Mono(concentric) + Ramp Mono(radial) → Channel Join(X, Y) → 램프는 0~1 범위이므로 그대로 Texture Sample에 적합함. UV Sample을 쓰려면 remap(0~1 → -1~1) 후 연결. 이후 Tile Pattern 등을 texture 입력으로 샘플링함. remap 유무만 맞으면 두 방식 결과가 동일함. 이때 Channel Join의 signature를 UV로 맞춰야 작동함(색·채널 참조).
  • 암기 포인트: UV Sample = -1~1, Texture Sample = 0~1.
  • 활용처가 매우 넓음: Tile Pattern의 타일별 UV, Stamp Points의 스탬프별 UV, Fill의 색 샘플링 hack, UV grid 이미지($HFS/houdini/pic)로 UV 변형 결과 시각화 등.

디스토트 (Distort)

들어오는 레이어를 특정 방향으로 왜곡(distort)하는 노드임. 탭 메뉴의 Distort by Slope는 단일 노드가 아니라 **여러 노드의 묶음(collection)**임(아래 참조).

주요 파라미터

  • Direction 입력(UV): 방향 지정용. 입력을 연결하면 angle 옵션이 회색 처리됨.
  • Direction Type / Angle: direction 입력을 안 꽂으면 angle이 활성화되어 원하는 각도 방향으로 왜곡 가능함.
  • Scale: 낮으면 거의 변화가 없고, 올리면 왜곡이 강해짐. 음수면 반대 방향으로 끌어당김.
  • Border Type: 기본이 Wrap이라 이미지가 반복되어 나타남. Mirror로 바꾸면 바깥 영역이 미러링됨. Clamp는 엣지 값으로 고정, Constant는 해당 영역에 값이 적용되지 않음.
  • Streak 옵션: 방향으로 블러를 적용함 — 내부적으로 Streak Blur 노드를 사용하며 그 노드와 동일한 설정 다수가 있음. 모션 블러 용도로 쓸 수 있음.

팁 / 워크플로

  • 예제: uvgrid_grey 이미지를 입력. 다른 입력 없이 사용하면 단순히 UV가 시프트됨.
  • 노이즈 왜곡 예제: Fractal NoiseUV 시그니처(vector2/uv 요구)로 설정하고 amplitude를 올려 direction 입력에 연결.
    • 왜곡이 우상단으로 쏠리면 노이즈의 center가 0.5라서 값이 0.5에서 위로만 움직이기 때문임. center를 0으로 설정하면 양방향으로 왜곡됨.
    • roughness를 줄이고 element size를 키우고, 3D 노이즈로 만들면 시간에 따라 왜곡이 변함.

디스토트 바이 슬로프 (Distort by Slope)

Slope Direction + Distort 조합의 노드 묶음임. 높이 맵의 경사 방향으로 이미지를 왜곡함.

팁 / 워크플로

  • Slope Direction의 결과를 Distort의 direction으로 쓰고 scale을 올리면 높은 영역에서 밀려나듯(흘러내리듯) 왜곡됨. 음수 scale이면 반대로 끌어당김.
  • 물결(ripple) 예제: Prefix Sum으로 만든 유사 SDF 등고선 패턴으로 원본 이미지를 Distort by Slope 왜곡시키면 물결 효과가 됨.

슬로프 디렉션 (Slope Direction)

높이(height)를 받아 흰 영역 = 높은 곳, 검은 영역 = 낮은 곳으로 취급하여 경사 방향(slope direction)을 계산하는 노드임. 단독 노드로도 존재함. 그 결과로 왜곡 방향을 만듦.

주요 파라미터

  • Angle: 계산 방식이 바뀜.
  • Kernel Size: 미분(그라디언트 변화) 계산 시 탐색하는 버퍼 영역 크기. 키우면 옆으로 퍼지는 느낌이 있지만, 특히 노이즈 패턴에서는 약간 키우는 것이 스무딩에 도움됨. 줄이면 날카로운 UV와 이상한 아티팩트가 생김. 아티팩트 제거에 매우 유용한 파라미터임.

팁 / 워크플로

  • 예제: SDF Shape(star) → SDF to Mono → 스무딩 → Slope Direction. 그레이(그라디언트) 영역을 이용해 슬로프를 생성함. 입력이 없으면 에러가 남.
  • Streak Blur의 direction 입력으로 연결하면 노이즈/높이 기반의 방향성 블러가 됨.

데리버티브 (Derivative)

값의 변화량(미분)을 찾는 노드임. Fractal Noise를 연결하면 마치 광원이 적용된 것처럼 보이는 흑백 이미지가 나옴.

주요 파라미터

  • Angle: 변화를 계산하는 각도(광원 방향처럼 보임).
  • Scale: 결과 곱 배율.
  • Kernel Size: Slope Direction과 동일 — 미분 계산 시 더 넓은 영역을 샘플링함.

팁 / 워크플로

  • 동작 원리: 한 픽셀 집합과 인접 픽셀들 간의 값 차이를 비교함.
    • Ramp Mono(완벽한 그라디언트)를 넣으면 변화가 균일하므로 결과가 균일한 회색이 됨.
    • 램프에 중간 키를 추가해 급격한 값 점프를 만들면 그 지점에서 변화가 뚜렷하게 나타남.
    • 이미지 전체가 같은 값(상수 입력)이면 변화가 전혀 없으므로 결과는 항상 검정임.
    • 값 변화의 경사가 가파를수록 결과의 흰 영역이 더 밝아짐.
  • 출력 특이사항: 두 개의 값을 출력함 — X 변화량과 Y 변화량. 이 둘을 더하면 총 변화량이 됨.
  • Edge Detect도 이와 같은 이웃 픽셀 비교 방식으로 동작함.

포지션 맵 (Position Map)

위치(position)를 RGB로 표현한 맵을 생성하는 노드임. 노이즈 패턴들의 기본 좌표 공간(default space) 역할을 함.

주요 파라미터

  • 기본 상태의 출력이 곧 노이즈의 기본 공간임 — Fractal Noise 3D에 Position Map을 그대로 꽂으면 아무 변화 없음.

팁 / 워크플로

  • 핵심 활용 — 좌표 왜곡: Position Map을 변형한 뒤 노이즈의 position 입력에 넣으면 노이즈가 그 왜곡을 따라감.
    • Vector Transform으로 회전 → 노이즈 자체가 회전함. Z축이 노이즈 중심을 관통하는 축이라 Z 회전 시 시계처럼 돎(지오메트리·3D의 Vector Transform 참조).
    • Pivot Transform을 (-1, -1)로 설정하면 좌하단 코너 기준으로 회전함. @Time * 값으로 회전을 걸면 그 지점을 축으로 계속 돌게 됨.
  • 마스크 결합 예제 (소용돌이):
    • Ramp(mono, Concentric)를 Vector Transform의 마스크로 연결. 램프 중심을 pivot과 같은 위치로 맞춤(파라미터 복사 → Paste Relative References). 사이클을 줄여 바깥으로 퍼지게 하면 바깥쪽일수록 회전량이 커지는 소용돌이 효과가 됨.
    • 회전 대신 Uniform Scale을 마스크와 함께 쓰면 pivot에서 멀어질수록 노이즈가 축소되는 효과가 됨.
  • 버블/만화경/디스플레이스먼트 응용 예제:
    • 노이즈를 Worley(보로노이) Cellular(roughness 제거, Manhattan distance, 사이즈 업) → Remap(type: Steps)으로 값 구간을 조여 셀 패턴 생성.
    • Pivot translate를 키프레임(좌하단 → 우상단 1,1)하면 시간에 따라 왜곡이 이동하는 버블 같은 효과가 됨.
    • Transform position에 mirror(해당 축 미러, 90도/−90도 미러)를 걸면 만화경(kaleidoscope) 효과가 가능함.
    • Feather(circle blur 약하게) → Preview Material의 height로 연결, Ramp RGB를 base color로 → 시간에 따라 진화하는 디스플레이스먼트 결과물이 완성됨(필터, 지오메트리·3D 참조).

익스트라폴레이트 바운더리 (Extrapolate Boundaries)

텍스처 맵의 UV 아일랜드 경계(seam) 아티팩트를 피하기 위해, 채워진 영역의 값을 빈 영역으로 **바깥쪽으로 확장(extrapolate)**하는 노드임. SOP Import 워크플로와 연관됨(지오메트리·3D 참조).

주요 파라미터

  • Source 입력: 확장할 텍스처. Fill Area 입력: 흰색 = 이미 채워진 영역, 검은색 = 확장해 들어갈 영역(알파가 정확히 이 형태임).
  • Threshold: 흑백이 아니라 중간값이 있을 때 어느 값부터 "채워진 것"으로 볼지 결정. 순수 흑백이면 0 초과 아무 값이나 동일하게 작동함.
  • Edge Padding: 엣지를 얼마나 멀리 확장할지. 0으로 두면 스무스하게 확장됨.
  • Edge Offset: 확장할 값을 엣지에서 얼마나 안쪽에서 가져올지. 엣지 색이 이미 정확하다면 줄여도 됨.

팁 / 워크플로

  • UV seam 제거 예제 워크플로:
    1. SOP Import(rubber toy) → Rasterize Setup(UV space) → Rasterize Geometry에서 origP(월드 위치)와 Alpha를 래스터라이즈.
    2. origP로 Fractal Noise 3D(worley 셀 노이즈, amplitude 증가) 생성 → Preview Material base color로 지오메트리에 적용하면 UV 아일랜드 경계를 따라 seam 라인이 보임(스무스 셰이딩에서 더 잘 보임). 원인은 UV 아일랜드 가장자리가 거칠게 끝나기 때문임.
    3. 노이즈를 source에, 알파를 Fill Area 입력에 연결.
    4. 값이 경계 밖으로 확장되어 seam이 감소함. 파라미터를 조정해 seam이 안 보일 때까지 다듬음(모두 0으로 놓고 하나씩 확인하면 각 파라미터의 역할이 잘 보임).
  • seamless해야 할 텍스처에 seam이 보일 때의 표준 해결책임.

프리픽스 섬 (Prefix Sum)

지정한 방향으로 픽셀 값을 누적(cumulative) 연산하는 노드임. 각 픽셀 = 자기 값 + 진행 방향상 이전 모든 픽셀의 값(또는 min/max).

주요 파라미터

  • Direction: +X, −X, +Y, −Y.
  • Operation: Add(기본 누적합) / Minimum / Maximum.
    • Minimum: 진행 방향으로 각 행(열)의 최솟값을 추적함. Concentric 램프(원형)를 넣으면 중심으로 갈수록 낮은 값을 계속 물고 감.
    • Maximum: 각 행의 최댓값 추적. 원이 가장자리까지 닿으면 중앙부 행들엔 0보다 높은 값이 없어 특유의 형태가 나옴.

팁 / 워크플로

  • 동작 이해 (수직 램프 예제): 기본 방향은 +X. 왼쪽부터 진행하며 각 픽셀에 이전 픽셀들의 합이 누적됨. 결과가 흰 덩어리처럼 보이므로 Equalize를 걸어 0~1 범위로 보면 이해가 쉬움(값 리맵 참조). 맨 위 행(전부 1)은 계속 1이 더해져 끝에서 1024(가로 해상도만큼)에 도달 — 우상단이 최댓값. 맨 아래 행(전부 0)은 0만 더해져 그대로 검정임.
  • 실전 예제 — 4방향 Minimum으로 유사 SDF 패턴 생성:
    1. File로 butterfly 이미지($F로 프레임 선택 가능) 로드.
    2. Prefix Sum을 +X, −X 두 개 만들고 둘의 Minimum을 취함. +Y, −Y도 동일하게 만들어 Minimum, 마지막으로 X 결과와 Y 결과의 Minimum → 값이 작업 영역 안으로 국소화(localize)됨.
    3. Function(Trigonometry)을 걸면 지저분한 줄무늬가 생기는데, 그 앞에 Multiply Constant로 밝기를 줄이면 큰 패턴, 키우면 작은 패턴이 됨.
    4. Blur로 부드럽게 하면 SDF처럼 보이는 등고선 패턴이 완성됨.
    5. Channel Extract로 채널 하나만 취하고, alpha도 추출해 곱하면 실루엣 안에만 패턴이 남음.
    6. Multiply Constant에 @Time * 0.5 등을 넣으면 등고선이 흐르는 애니메이션이 됨. Blur ↑ = 더 부드러움, Multiply ↑ = 패턴 밀도 ↑.
    7. 마무리로 Distort by Slope에 원본을 이 결과로 왜곡시키면 물결(ripple) 효과가 됨.
  • 요약: 행/열 단위로 누적합·최소·최대를 구하는 노드이고, 밝은 영역 기준의 유사 SDF 패턴 생성 같은 창의적 활용이 가능함. 진짜 SDF가 필요하면 SDF 계열 노드를 참조.

관련 노드 (다른 섹션 담당)

  • Polar to UV / UV to Polar: 극좌표(각도/길이) ↔ UV 상호 변환 — ID·세그먼트 참조.
  • UV Map by ID: ID별 UV 맵 생성(UV가 없는 세그먼트에 UV를 부여) — ID·세그먼트 참조.

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 프로그래밍과 고급 기능