ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 23. 법선 매핑 (Normal Mapping)과 그림자 매핑 (Shadow Mapping)
    Software/DirectX 2024. 5. 24. 10:55
    728x90

    Table of Contents

    1. 법선 매핑(Normal mapping)


    2. 그림자 매핑(Shadow mapping)

      2.1 직교 투영(Orthographic projection)

      2.2 알고리즘

      2.3 편향과 앨리어싱(Bias and Aliasing)

      2.4 비율 근접 필터링(PCF)





     

    1. 법선 매핑(Normal mapping)
    • 텍스쳐의 질감에 따른 빛 변화를 표현하기 위해 텍스쳐와 같은 크기의 법선 정보를 지닌 법선 맵(normal map)을 활용하는 매핑이다.
    • 각 텍셀에 RGB자료가 아닌 압축된 x,y,z 좌표성분들이 담겨 있고 이 좌표 성분들로 정규화된 법선 벡터를 정의한다.
    • photoshop 등에서 메시로 부터 법선 맵을 만들어주는 도구를 제공한다.
    • 텍스쳐 좌표의 u방향을 T, v방향을 B, 법선방향을 N으로한 TBN기저를 정점마다 계산해야한다.
    • 계산된 TBN기저를 세계 공간으로 옮겨서 빛과 법선이 같은 좌표계에 있게 한 후 빛색상을 계산한다.







     

    2. 그림자 매핑(Shadow mapping)
    • 그림자 매핑은 3차원 공간 상에서 생기는 그림자를 모방하는 알고리즘이다.
    • 그림자 매핑을 하는 데 있어서 필요한 첫 번째 작업은 광원의 시점에서 본 장면의 깊이 값들을 버퍼에 기록하는 것이다.
    • 그림자 매핑에 사용되는 깊이 스탠실 버퍼를 그림자 맵(shadow map)이라고 부른다.
    • 그림자 맵의 해상도가 높을수록 그림자의 품질이 올라가지만 연산량과 메모리가 늘어난다.
    • 그림자 맵을 셰이더의 한 입력으로 두어서 그림자 적용 알고리즘을 구현해 그림자를 표현한다.







     

     

    2.1. 직교 투영(Orthographic projection)
    • 직교 투영(정사영)은 투영한 결과 값이 투영하기 전과 같은 투영 방식을 말한다.
    • 그림자 매핑에서 평행광이 만들어 내는 그림자를 본뜰 때에 이 직교 투영이 필요하다.
    • 직교 투영은 전적으로 선형이다. 원근 나누기(w성분)이 없다.
    • 직교 투영 행렬을 곱하면 바로 NDC좌표가 나온다. 원근 투영처럼 원근 나누기가 필요없다.
    • 광원의 시점에서 투영 할 때 절두체 바깥에 있는 기하구조에는 텍스쳐를 입힐 필요가 없다.
    • 직교 투영 행렬에서 W값을 1로 놓으면 원근나누기가 그대로 이므로 직교투영행렬로 사용할 수 있다.
    • 따라서 하나의 셰이더 프로그램으로 원근투영과 직교투영 모두에 사용할 수 있게 되지만 직교 투영시 불필요한 나누기가 수행된다.






     

    2.2. 알고리즘
    • 그림자 매핑 알고리즘의 핵심은 광원의 시점에서 본 장면 깊이를 텍스쳐 대상 렌더링 기법을 이용해 깊이 버퍼에 기록하는 것이다.
    • 이 깊이 버퍼를 그림자 맵이라고 부른다.
    • 장면 깊이를 렌더링 하고 나면 그림자 맵에는 광원 시점에서 본 모든 픽셀들의 깊이 값이 담기게 된다.
    • 그림자 맵이 완성되면 카메라 시점에서 렌더링 하되, 각 픽셀p 계산에서 광원과 픽셀 사이의 거리 d를 먼저 계산한다.
    • 카메라 시점에서 픽셀을 렌더링 할 때, 해당 픽셀을 지나는 물체의 광원과의 거리를 비교해서 해당 물체보다 깊이가 낮은 물체가 있으면 그림자 안에 있는 것으로 판정한다.






     

     

    2.3. 편향과 앨리어싱(Bias and Aliasing)
    • 그림자 맵의 해상도는 유한하기 때문에 광원 시점에서 본 장면 깊이의 이산적 표본화(Discrete sampling)라고 볼수 있다.
    • 따라서 그림자 여드름(shadow acne)라고 불리는 앨리어싱 문제가 발생한다.
    • 일정한 편향치(Bias)를 그림자 맵 깊이들에 더해서 깊이 값들을 일괄적으로 이동시키면 계단현상이 완화된다.
    • 편향치를 너무 크게 잡으면 그림자와 물체가 분리되는 피터 팬 효과(Peter-panning)이 발생한다.
    • 광원 방향을 기준으로 삼각형의 기울기가 클수록 편향치도 커야 하기 때문에 모든 기하구조에 대해 다른 편향치를 적용해야 한다.
    • 다각형마다 광원에 대한 다각형의 기울기를 을아내서 기울기에 비례하는 기울기 비례 편향치(slope-scaled-bias)를 구해야한다.






     

     

    2.4. 비율 근접 필터링(PCF)
    • 투영 텍스쳐 좌표가 그림자맵의 한 텍셀과 정확하게 일치하지 않는 문제가 발생한다. 색상 텍스쳐에서는 겹선형 보간으로 해결한다.
    • 그림자 맵에서는 겹선형 보간으로 해결할 수 없다(깊이 값들의 평균을 내면 픽셀이 그림자 안에 있는지 잘못판정 될 수 있기 때문)
    • 마찬가지 이유로 그림자 맵에서는 밉맵도 생성할 수 없다
    • 깊이 값들이 아닌 판정 결과들을 보간해서 이를 해결할 수 있다. 이를 비율 근접 필터링(Percentage closer filtering)이라고 한다.






    728x90