어떤 표면의 한 점에서, 그 점을 포함하는 접평면에 수직인 단위벡터이다.
단위벡터이므로 크기는 보통 1로 정규화 되어있고, 방향은 표면의 바깥쪽을 향한다.
표면이 어느 방향을 바라보고 있는지를 결정하며, 광원과 표면의 각도에 따라 빛의 세기 및 그림자, 반사, 하이라이트 등을 사실적으로 표현하는 데 사용한다.
삼각형의 법선: 세 점 가 있을 때 외적을 이용해 방향을 구하고, 정규화를 통해 단위 벡터로 변환한다.
여기서 ×는 벡터 외적이다.
정점 법선은 그 정점을 공유하는 면 법선들의 평균으로 정의됨
입력 단계 (정점 데이터 준비)
모델 파일(예: FBX, OBJ)에 저장된 정점 위치 + 정점 법선이 GPU로 전달된다.
버텍스 셰이더(Vertex Shader)
정점 좌표와 정점 법선을 모델 공간 → 월드 공간 → 뷰 공간으로 변환한다.
정점 법선이 이후 조명 계산에 사용될 수 있도록 넘겨준다.
래스터화(Rasterization)
삼각형 내부 픽셀을 생성한다.
이때 정점에 있던 법선들이 보간되어 픽셀별 표면 법선이 만들어진다.
픽셀 셰이더(Pixel Shader / Fragment Shader)
보간된 표면 법선과 광원(Light) 방향, 카메라 방향을 사용하여 조명 공식(Phong, Blinn-Phong 등) 계산한다.
결과적으로 픽셀마다 밝기, 색상, 하이라이트(광택) 등이 결정된다.
최종 출력
모든 픽셀의 색상이 합쳐져 부드럽게 음영 처리된 3D 모델이 화면에 렌더링된다.