림 효과(혹은 림 라이팅(lighting))은 3차원 공간에 있는 물체의 가장자리에 특정 색이나 빛을 강조하여 돋보이게 하는 기법을 의미한다. 림 효과가 적용된 물체는 보다 입체적으로 보이며, 배경과 잘 구분되는 특징을 가진다.
림 효과를 적용하는 방법은 비교적 간단하다. 림 효과가 적용된 물체는 가장자리에 특정 색이 강조된다. 이는 곧 물체를 바라보는 관찰자의 시점과 물체의 노멀 벡터 사이의 각을 통해 림 효과를 통해 강조할 부분을 결정할 수 있다는 것을 의미한다.
노멀 벡터 $n$은 물체의 가장자리로 갈수록 물체의 버텍스에서 관찰자의 시점으로 향하는 벡터 $e$와 이루는 각이 커질 것이다. 이는 곧 $n$과 $e$를 내적했을 때 얻을 수 있는 값이 0에 가까워진다는 것을 의미한다. 반대의 경우에는 1에 가까워질 것이다. 이를 이용하면 물체의 버텍스에 얼만큼의 림 효과를 적용할 수 있을지를 다음과 같이 구할 수 있다.
// 물체 관련 정보
float3 vertexPos;
float3 vertexNormal;
float3 vertexColor;
// 관찰자 관련 정보
float3 eyeWorld;
// 림 효과 관련 정보
float3 rimColor;
float rimStrength;
float rimPower;
// 관찰자의 시점으로 향하는 벡터
float3 toEye = normalize(eyeWorld - vertexPos);
// 림 효과 적용량 계산
float rim = 1.0 - dot(vertexNormal, toEye);
rim = pow(rim, rimPower);
// 림효과 적용
vertexColor = vertexColor + (rimColor \* rimStrength \* rim);
rim
은 특정 버텍스에 대해 림 효과를 얼만큼 적용할지 계산한 값을 의미한다. 물체의 가장자리로 갈 수록 이 값은 1에 가까워질 것이고, rimPower
를 이용하여 거듭제곱을 수행하면 물체 가장자리의 색을 강조할 수 있게 된다. 이렇게 구한 rim
값은 림 효과를 통해 강조할 색을 의미하는 rimColor
, 림 효과의 강도를 의미하는 rimStrength
와 곱하여 기존 물체의 색 vertexColor
에 더해주면 림 효과가 적용된 최종 색을 구할 수 있다.
'그래픽스' 카테고리의 다른 글
1인칭 시점(First Person View) 구현하기 (1) | 2024.06.10 |
---|---|
yaw, pitch, roll (0) | 2024.06.09 |
퐁(Phong) 반사 (0) | 2024.06.01 |
조명(Lighting) (0) | 2024.06.01 |
Spinning Cube (0) | 2024.05.17 |