퐁 반사는 빛과 물체의 상호작용을 통해 물체의 음영을 계산하는 모델이다. 퐁 반사에서는 물체의 재질과 물체로 들어오는 빛과의 상호작용을 계산하여 최종적인 색을 결정한다. 계산에 필요한 요소들과 방법은 다음과 같다.
// 광원
// direction: float3, position: float3 ...
Light L;
// 관찰자의 시점
float3 worldEye;
// 물체의 위치
float3 worldPos;
// 물체의 노멀 벡터
float3 normal;
// 재질
// ambient: float3, diffuse: float, specular: float ...
Material mat;
// 1. 물체로 들어오는 빛의 세기 계산(= ambient light)
// directional light라고 가정함
float3 toLight = -L.direction;
float3 ndotl = dot(toLight, normal);
float lightStrength = max(ndotl, 0.0);
// 2. specular light 계산
float3 proj = dot(-L.direction, normal) * normal;
float3 reflection = L.direction + (2 * proj);
float3 toEye = worldEye - worldPos;
float specular = mat.specular * max(dot(reflection, toEye), 0.0);
// 최종 결과
float3 color = mat.ambient + (mat.diffuse + mat.specular) * lightStrength;
'그래픽스' 카테고리의 다른 글
yaw, pitch, roll (0) | 2024.06.09 |
---|---|
림(rim) 효과 (0) | 2024.06.03 |
조명(Lighting) (0) | 2024.06.01 |
Spinning Cube (0) | 2024.05.17 |
원근 투영 행렬 유도하기 (0) | 2023.10.06 |