NORMAL MAPPING

빛만 울퉁불퉁한 평면

빛은 굴곡을 따라가도, 표면의 외곽은 여전히 평평합니다.

오른쪽 표면을 눌러 표본을 선택하세요. 캔버스에 초점을 두고 방향키로 표본을 이동할 수 있습니다. Shift와 함께 누르면 미세 이동, Home은 기본 표본입니다.

NORMAL ≠ GEOMETRY

빛을 계산하는 방향만 바꿉니다

문제 · 빛이 반대로 흐르거나 무늬가 미끄러짐

노멀맵은 방향 데이터입니다. Y 채널 규약이 다르거나, 색상처럼 감마를 바꾸거나, 색 프레임과 노멀 프레임이 어긋나면 실제 굴곡을 나타내는 방향이 달라집니다. 각 오류를 하나씩 선택해 비교하세요.

해결 · RGB 복원과 접선 기저

비압축 기본 RGB = (n + 1) / 2, n = normalize(2RGB − 1)입니다. 중립 (0.5, 0.5, 1)은 (0, 0, 1)입니다. 그 방향을 표면의 접선 T·종접선 B·법선 N으로 세계 공간에 옮긴 뒤, 세계 공간 빛과 내적합니다.

좌우 반전은 UV를 뒤집는 동시에 x 방향도 반사해야 합니다. 기저 변환 누락은 표면 회전이 0°일 때 드러나지 않으므로 표면을 돌려 관찰하세요. 이 모델의 Y+ 규약에서는 녹색이 위쪽 방향입니다.

검사할 값 · max(0, n·l)

표시 밝기는 0.18 + 0.82 × 코사인 항을 색상에 곱한 교육용 조명입니다. 방향광 하나를 쓰므로 기본 법선 평면의 코사인은 일정합니다. 점광원에서는 위치별 거리·방향 때문에 평면도 밝기가 달라질 수 있습니다. 완전한 물리 조명이나 Lambert BRDF 전체를 구현한 것은 아닙니다.

대가 · 실루엣과 충돌은 그대로

절차적으로 만든 세 개의 높이 봉우리를 미분해 법선을 생성하고 CPU에서 픽셀별로 조명합니다. 아래 단면의 점선은 법선 생성에 쓴 높이이고, 실제 평면과 충돌선은 높이 0에 남습니다. 그림자·가림·실제 변위·압축 노멀 디코더는 구현하지 않습니다. 실제 돌출이 필요하면 메시·충돌체가 별도로 필요하며, 방향 텍스처와 추가 조명 계산 비용도 남습니다.

Unity 6.1 · Normal Maps
PBRT · Lambertian Reflection