이미지 기반 맵베이커 제작

"밝기가 아닌 '거리'를 계산."

마모셋, 서브스턴스 페인터 등의 Height Map 생성기들은 '검은색은 낮다'는 단순 논리 때문에, 짙은 색 텍스처에서 항상 아티팩트가 발생했습니다. 저는 이 문제를 해결하기 위해 “레오나르도 다 빈치의 ‘공기원근법’ 을 셰이더로 구현했습니다.

  1. *Lab 색차(Delta-E)**로 대기와의 거리를 측정하고,
  2. 채도(Saturation) 감소량으로 빛의 산란 거리를 계산하며,
  3. 색상 온습도(Color Temperature)에 따른 진출/후퇴색 착시까지 Z축 데이터에 반영했습니다.

결과적으로, 색상이 어두워도 선명하면 '튀어나온 것'으로 인식되는 지각 기반(Perceptual) 깊이 추정 엔진을 완성했습니다.

1. "대기 산란(Atmospheric Scattering)의 수학적 구현"

코드 증거: baker.wgsl - passZ 내부 z_white 계산

image
image
image
  • 원리

 멀리 있는 물체일수록 대기 입자에 의해 빛이 산란되어 '배경색(Atmosphere Color)'과 비슷해집니다.

  • 구현
  • RGB를 CIE Lab 색공간으로 변환했습니다. (인간의 눈이 인지하는 거리감을 위해 RGB 대신 Lab 사용)
  • dE (Delta-E): 현재 픽셀과 W_L, W_a, W_b (대기 기준색) 사이의 지각적 거리를 측정합니다.
  • z_white = clamp01(1.0 - dE / 60.0): 대기 색과 비슷할수록(거리가 가까울수록) Z값(깊이)을 높게 잡았습니다.

맵 베이커 사용방법입니다.

  • 단순히 하얀색을 찾는 게 아닌, Lab 공간에서의 색차(Delta-E)를 이용해 대기의 밀도를 역산출했습니다.

이미지를 선택한 후, 화이트와 주조색(흰색)을 마우스 커서로 클릭하면 노멀맵, AO 등을 추출합니다.

2. "채도 감쇠(Saturation Decay) 시뮬레이션"

코드 증거: baker.wgsl - passZ 내부 z_sat 계산

  • 원리

빛이 공기를 통과할수록 파장이 섞이면서 채도(Saturation)가 떨어집니다. 즉, **"선명하면 가깝고, 탁하면 멀다"**는 원리입니다.

  • 구현:
    • s = sat01(rgb)로 채도를 구한 뒤, z_sat = 1.0 - s로 반전시켰습니다.
    • 채도가 낮을수록(탁할수록) 먼 거리(High Z)로 인식하게 설계했습니다.
  •  "검은 물체라도 채도가 높으면(선명한 검정) 가깝게 인식합니다. 기존 툴의 '검은색 = 구멍' 오류를 광학적 특성으로 해결했습니다."

3. "색채 원근법(Chromostereopsis) 적용"

코드 증거: baker.wgsl - passZ 내부 z_shift 계산

  • 원리

인간의 수정체는 파장에 따라 굴절률이 달라서, 난색(Red)은 튀어나와 보이고 한색(Blue)은 들어가 보입니다.

  • 구현:
    • rb = (rgb.x - rgb.z) * 0.5 + 0.5: Red 채널과 Blue 채널의 차이를 계산했습니다.
    • Dominant Hue(주조색)와의 편차를 계산해, 환경광 내에서의 상대적인 전진/후퇴감을 수치화했습니다.
  • "물리적 거리뿐만 아니라, 인간 시각 시스템(HVS)의 착시 현상까지 Z축 가중치로 반영하여 '느낌적인 입체감'을 데이터로 만들었습니다."