끝
여기까지 오신 것을 축하드립니다! 눈치채셨는지 모르겠지만, 지금까지의 조명 관련 챕터들을 통틀어 OpenGL 자체에 대해 새롭게 배운 내용은 유니폼 배열 접근법 같은 몇 가지 사소한 것들을 제외하고는 거의 없었습니다. 지금까지의 조명 관련 챕터들은 모두 셰이더를 조작하고 다양한 기법과 방정식을 활용하여 사실적인 조명 효과를 구현하는 것에 관한 것이었습니다. 이는 셰이더의 강력한 기능을 다시 한번 보여줍니다. 셰이더는 매우 유연하며, 여러분은 단 몇 개의 3D 벡터와 설정 가능한 변수만으로도 놀라운 그래픽을 만들어낼 수 있다는 것을 직접 경험했습니다!
지난 몇 장에서 여러분은 색상, 퐁 조명 모델(주변광, 확산광, 반사광 포함), 오브젝트 재질, 설정 가능한 조명 속성, 확산 및 반사 맵, 다양한 유형의 조명, 그리고 이 모든 지식을 결합하여 완벽하게 조명된 장면을 만드는 방법에 대해 배웠습니다. 다양한 조명, 재질 색상, 조명 속성을 실험해보고, 약간의 창의력을 발휘하여 자신만의 환경을 만들어 보세요.
다음 장에서는 앞서 논의한 조명 모델에서 매우 잘 어울리는 더욱 고급스러운 기하학적 형태를 장면에 추가할 것입니다.
용어
- Color vector (색상 벡터): 빨강, 초록, 파랑(RGB) 성분의 조합을 통해 현실 세계의 색 대부분을 묘사하는 벡터. 물체의 색은 해당 물체가 흡수하지 않고 '반사'한 색상 성분을 의미함.
- Phong lighting model (퐁 조명 모델): 주변광(Ambient), 난반사광(Diffuse), 경면광(Specular) 성분을 계산하여 현실의 조명을 근사하는 모델.
- Ambient lighting (주변광/환경광): 직접적인 조명이 없더라도 물체가 완전히 검게 보이지 않도록 모든 물체에 적은 양의 밝기를 부여하여 전역 조명(Global Illumination)을 근사하는 것.
- Diffuse shading (난반사 셰이딩): 정점이나 프래그먼트가 광원과 직선으로 정렬될수록 빛이 강해지는 방식. 법선 벡터를 사용하여 광원과의 각도를 계산함.
- Normal vector (법선 벡터): 표면에 수직인 단위 벡터.
- Normal matrix (법선 행렬): 모델(또는 모델-뷰) 행렬에서 이동(Translation) 성분을 제외한 3x3 행렬. 비균일 스케일(Non-uniform scaling) 적용 시 법선 벡터가 왜곡되지 않고 올바른 방향을 향하도록 역전치(Inverse-transpose) 연산을 거친 행렬.
- Specular lighting (경면광): 관찰자가 표면에 반사된 광원을 정면으로 마주할수록 형성되는 하이라이트. 관찰자의 방향, 빛의 방향, 그리고 하이라이트의 산란 정도를 결정하는 신니즈(Shininess) 값을 기반으로 함.
- Phong shading (퐁 셰이딩): 퐁 조명 모델을 '프래그먼트 셰이더'에서 적용하는 방식.
- Gouraud shading (고로 셰이딩): 퐁 조명 모델을 '정점 셰이더'에서 적용하는 방식. 정점 수가 적으면 부자연스러운 결과(Artifact)가 나타나며, 시각적 품질을 희생하는 대신 효율성을 얻음.
- GLSL struct (GLSL 구조체): 셰이더 변수들을 담는 C 언어 스타일의 컨테이너. 주로 입력, 출력, 유니폼 변수들을 조직화하는 데 사용됨.
- Material (재질): 물체가 반사하는 주변광, 난반사광, 경면광의 색상. 물체가 가지는 고유의 색을 결정함.
- Light properties (광원 속성): 광원이 가진 주변광, 난반사광, 경면광의 강도(Intensity). 광원이 각 성분별로 어떤 색상과 세기로 빛날지를 정의함.
- Diffuse map (디퓨즈 맵): 프래그먼트 단위로 난반사 색상을 설정하는 텍스처 이미지.
- Specular map (스펙큘러 맵): 프래그먼트 단위로 경면광의 강도/색상을 설정하는 텍스처 맵. 물체의 특정 부분에만 하이라이트가 나타나게 할 수 있음.
- Directional light (방향성 광원): 방향만 존재하는 광원. 무한히 먼 거리에 있다고 가정하므로 모든 빛줄기가 평행하며, 씬 전체에서 방향 벡터가 동일하게 유지됨(예: 태양).
- Point light (점 광원): 씬 내에 특정 위치를 가지며, 거리에 따라 빛이 희미해지는 광원.
- Attenuation (감쇠): 거리에 따라 빛의 세기가 줄어드는 과정. 점 광원과 스포트라이트 계산에 사용됨.
- Spotlight (스포트라이트): 특정 방향으로 원뿔 형태의 빛을 쏘는 광원.
- Flashlight (플래시라이트): 관찰자의 시점과 방향에 위치시킨 스포트라이트.
- GLSL uniform array (GLSL 유니폼 배열): 유니폼 값들의 배열. C 언어의 배열과 유사하지만 동적 할당이 불가능함.