핵심 개념
빛이나 공이 벽에 부딪혔을 때 튕겨나가는 방향을 구하는 벡터.
입사각과 반사각이 같다.
공식
- V: 입사 벡터 (부딪히는 방향)
- N: 법선 벡터 (벽의 수직 방향, 단위 벡터)
- V·N: 내적 (V의 법선 방향 성분 크기)
직관적 이해
N
↑
V | R
\ | /
\ | /
\ | /
──────────────── 벽
(V·N)N→ V에서 법선 방향 성분만 추출- 이걸 두 배 빼면 → 법선 기준으로 대칭
한 번 빼면 슬라이딩, 두 번 빼면 반사
슬라이딩 벡터와 비교
| 공식 | 결과 | |
|---|---|---|
| 슬라이딩 | V - (V·N)N | 벽에 평행하게 미끄러짐 |
| 반사 | V - 2(V·N)N | 법선 기준으로 대칭 반사 |
게임/셰이더 구현
// C++
Vector3 Reflect(Vector3 V, Vector3 N) {
return V - 2 * Dot(V, N) * N;
}// HLSL (셰이더)
float3 r = reflect(V, N);HLSL의
reflect()함수가 이 계산을 자동으로 해준다.
활용 예시
- 광선 추적(Ray Tracing)에서 빛의 반사 계산
- 총알이나 공이 벽에 튕길 때
- 스페큘러(Specular) 조명 계산