← 생활 속 수학

기술 기하

3D 게임은 면의 밝기를 어떻게 정할까 · 공간벡터의 내적

빛과 면의 법선이 이루는 각의 코사인만큼 밝다. 내적 한 번이면 계산된다

3D 게임 속 물체는 작은 삼각형 면 수천 개로 이루어져 있다. 빛이 비칠 때 어떤 면은 밝고 어떤 면은 어둡게 칠해야 입체로 보인다. 컴퓨터는 면마다 「얼마나 정면으로 빛을 받는가」를 계산해 밝기를 정하고, 그 계산이 공간벡터의 내적이다.

면이 빛을 얼마나 정면으로 받는지는 내적 한 번으로 계산된다.

면이 바깥을 향하는 방향을 길이 1인 법선벡터 n으로, 면에서 빛을 향하는 방향을 길이 1인 벡터 l로 둔다. 두 벡터가 이루는 각을 θ라 하면 면이 받는 빛의 세기는 cos θ에 비례한다. 길이가 1인 두 벡터의 내적은 n · l = cos θ이므로, 성분끼리 곱해 더하는 계산 한 번으로 밝기가 나온다.

n 빛 l n · l ≈ 0.577
면의 법선 n(파랑)과 빛의 방향 l(주황)이 이루는 각의 코사인이 밝기다. l이 (1, 1, 1) 방향이면 n · l ≈ 0.577이다.

바닥 면의 법선이 n = (0, 0, 1)이고 빛이 바로 위에서 오면 l = (0, 0, 1)이라 n · l = 1, 가장 밝다. 빛이 대각선 방향 (1, 1, 1)에서 오면 길이를 1로 맞춘 l = (1, 1, 1) ÷ √3과의 내적은 1 ÷ √3 ≈ 0.577, 약 58%의 밝기다. 내적이 0 이하이면 빛이 면의 뒤쪽에서 오는 것이니 그 면은 그림자 속에 있다.

이 계산법은 18세기 수학자 람베르트의 이름을 따 람베르트 반사라 부른다. 그래픽 카드는 이런 내적을 1초에 수십억 번 계산한다. 공간벡터의 성분 계산이, 화면 속 공의 둥근 느낌과 그림자를 만드는 가장 기본적인 공식이다.

이어서 학습하기