노멀 매핑이 못 하는 것
Esc

    노멀 매핑이 못 하는 것

    –렌더링셰이더텍스처

    노멀 매핑은 조명 계산에 넘기는 법선만 바꿉니다. 실제 표면은 여전히 평평한 삼각형입니다. 그래서 법선이 관여하지 않는 모든 것이 그대로 남습니다. 한계가 셋으로 갈립니다.

    하나. 실루엣이 안 변한다

    아래에서 노멀맵과 실제 요철을 번갈아 보세요. 위쪽 띠는 구분이 안 되는데 아래쪽 단면의 선은 한쪽만 물결칩니다.

    물체의 가장자리에서는 이 단면 선이 그대로 윤곽으로 보입니다. 아무리 깊게 파인 노멀맵을 붙여도 테두리는 자를 댄 듯 곧습니다.

    돌담을 정면에서 보면 그럴듯한데 가장자리로 시선을 옮기는 순간 얇은 판자라는 게 들킵니다.

    둘. 그림자를 안 만든다

    튀어나온 부분이 옆을 가리는 것을 셀프 섀도잉이라고 합니다. 진짜 요철이라면 낮은 각도의 빛에서 볼록한 쪽이 오목한 쪽에 그림자를 드리웁니다.

    노멀 매핑에는 이게 없습니다. 각 픽셀은 자기 법선만 보고 밝기를 정합니다. 옆 픽셀이 자기를 가리고 있는지 알 방법이 없습니다.

    그림자가 없으니 깊이감이 약합니다. 특히 빛이 낮게 깔릴 때 “파인 것 같긴 한데 안 깊어 보이는” 인상이 여기서 나옵니다.

    셋. 시차가 없다

    진짜 요철 위에서 고개를 좌우로 움직이면 튀어나온 부분이 안쪽 부분보다 많이 움직입니다. 가까운 것이 더 빨리 지나가는 현상입니다.

    노멀 매핑에서는 이게 0 입니다. 요철의 무늬가 표면에 도장처럼 찍혀 있어서 카메라가 움직여도 제자리에 붙어 있습니다. 밝기만 바뀝니다.

    가만히 서서 보면 모르다가 걸어가는 순간 어색해지는 이유입니다.

    스치는 각도에서 특히 무너진다

    세 한계가 한꺼번에 드러나는 자리가 있습니다. 카메라가 표면을 거의 평행하게 스칠 때입니다.

    그 각도에서는 실루엣이 화면의 큰 면적을 차지하고, 요철끼리 서로를 가리는 정도가 최대가 되고, 조금만 움직여도 시차가 크게 납니다. 노멀 매핑은 그 셋을 전부 못 합니다.

    바닥과 벽이 가장 큰 문제인 이유가 이겁니다. 플레이어가 바닥을 늘 낮은 각도로 봅니다.

    무엇으로 대신하나

    장점
    • 시차가 생긴다. 높이맵을 따라 시선을 걸어가며 실제로 맞는 자리를 찾아 UV 를 옮깁니다.
    • 셀프 섀도잉도 얹을 수 있다. 같은 걸음을 빛 방향으로 한 번 더 하면 됩니다.
    • 정점은 그대로 넷이다. 메시를 안 건드립니다.
    단점
    • 픽셀마다 루프를 돈다. 텍스처 샘플이 한 번이 아니라 수십 번입니다.
    • 실루엣은 여전히 곧다. UV 를 옮기는 것뿐이라 테두리는 안 바뀝니다.
    • 스치는 각도에서 계단이 보인다. 걸음 수를 늘리면 비용이 그만큼 늡니다.
    장점
    • 셋을 다 한다. 정점을 실제로 밀어 올리므로 실루엣도 그림자도 시차도 진짜입니다.
    • 거리에 따라 조절된다. 멀면 안 쪼개고 가까우면 잘게 쪼갭니다.
    단점
    • 정점이 실제로 늘어난다. 가까이 가면 그만큼 무거워집니다.
    • 모바일에서 쓰기 어렵다. 지원과 성능 모두 걸립니다.
    • 인접한 면의 쪼갬 정도가 다르면 틈이 벌어진다. 따로 맞춰 줘야 합니다.
    장점
    • 아무 조건도 없다. 어떤 파이프라인에서도 그대로 돕니다.
    • 충돌 판정도 따라온다. 캐릭터가 그 위를 걸을 수 있습니다.
    단점
    • 멀리서도 값이 그대로 든다. 화면에서 몇 픽셀이 되어도 정점은 다 처리합니다.
    • 잔 굴곡에는 못 쓴다. 긁힘이나 천의 결까지 메시로 만들 수는 없습니다.
    무엇을 표현하나 무엇을 쓰나
    긁힘, 천의 결, 금속 헤어라인 노멀맵
    줄눈, 벽돌 사이의 홈, 자갈 바닥 노멀맵. 바닥이고 시선이 낮으면 패럴랙스
    튀어나온 손잡이, 깊은 홈, 난간 메시
    지형의 기복 디스플레이스먼트나 메시

    실무에서는 대개 섞습니다. 큰 굴곡은 메시로, 중간 굴곡은 패럴랙스로, 잔 굴곡은 노멀맵으로 갑니다.

    밉맵에서 값이 무너지는 것

    한계는 아니지만 같이 터지는 문제가 있어서 적어 둡니다.

    노멀맵도 밉맵을 만듭니다. 그런데 밉맵은 이웃한 네 픽셀의 평균을 내는 방식입니다. 서로 반대로 기운 법선 둘을 평균 내면 가운데 방향이 되면서 길이가 1보다 짧아집니다.

    길이가 짧아진 법선을 정규화해서 그냥 쓰면, 원래는 거칠어서 빛이 흩어져야 할 표면이 멀리서 매끈하게 보입니다. 멀어질수록 갑자기 반짝이는 현상이 여기서 나옵니다.

    그래서 요즘은 줄어든 길이를 거칠기로 옮겨 적습니다. 법선이 평균으로 뭉개진 만큼 그 밉 레벨의 거칠기를 올려 두는 것입니다. 이걸 노멀맵과 거칠기맵을 같이 굽는 단계에서 처리합니다.

    정리

    • 노멀 매핑은 법선만 바꾸므로 법선이 관여하지 않는 것은 그대로 남습니다.
    • 실루엣이 안 변하고, 셀프 섀도잉이 없고, 카메라가 움직여도 시차가 안 납니다.
    • 셋이 한꺼번에 드러나는 자리가 스치는 각도입니다. 바닥과 벽이 가장 문제입니다.
    • 시차가 필요하면 패럴랙스 계열, 실루엣까지 필요하면 디스플레이스먼트나 메시로 갑니다. 보통은 규모별로 섞습니다.
    • 밉맵에서 법선을 평균 내면 길이가 짧아집니다. 그 값을 거칠기로 옮겨 적어야 멀리서 갑자기 매끈해지지 않습니다.