들어가며
컴퓨터 그래픽에서 빛은 어떻게 구현하는걸까 라는 궁금증에서 시작하는 글입니다.
빛의 반사, 확산, 굴절, 투과는 어떻게 컴퓨터상에서 렌더링되는걸까요? ? ?
빛이란 무엇일까
우리는 매일 태양이 떠오를 때 눈부신 햇빛을 받으며 하루를 시작하고, 밤이 되면 형광등이나 LED 조명을 켜며 일상생활을 이어갑니다. 빛은 우리 생활에 필수적입니다. 그러나 우리가 매일 접하는 이 빛, 과연 무엇일까요?
빛을 과학적으로 정의하면, 이는 전자기파의 한 형태입니다. 우리가 눈으로 인식하는 가시광선뿐만 아니라, 자외선(UV), 적외선(IR), 그리고 X선과 같은 빛도 모두 전자기파에 속합니다. 빛은 특별한 성질을 가지고 있는데, 바로 파동성과 입자성을 동시에 가진다는 것입니다. 이 특성을 파동-입자 이중성이라고 부르며, 이는 빛이 단순히 하나의 개념으로 정의되지 않는다는 것을 뜻합니다.
물리학적으로 깊게 들어가면 제가 이해를 못하니, 자세히 작성하지 않겠습니다. ㅎ
그렇다면 물리 기반 렌더링(Physically Based Rendering, PBR) 에서의 빛이란 무엇일까
물리 기반 렌더링(Physically Based Rendering, PBR)에서의 빛은 현실 세계에서 빛이 물체와 상호작용하는 방식에 대한 물리적 법칙을 그래픽스에서 시뮬레이션하는 중요한 요소입니다. PBR의 핵심 개념은 빛과 재질의 상호작용을 물리적으로 정확하게 표현하는 것입니다. 이는 전통적인 렌더링 방식보다 훨씬 사실적이며 일관된 시각적 결과를 제공합니다.
1. PBR에서 빛의 역할
PBR에서 빛은 물체의 표면과 상호작용하며, 다음과 같은 방식으로 물체의 시각적 특성을 결정합니다:
- 빛의 반사: 물체의 표면에서 빛이 어떻게 반사되는지를 결정합니다. 재질의 특성에 따라 빛이 매끄럽게 반사되거나, 산란될 수 있습니다. 금속성 재질은 대부분의 빛을 반사하지만, 비금속성 재질은 빛을 확산시켜 고르게 분산된 빛을 나타냅니다.
- 조명 계산: PBR은 광원에서 방출된 빛이 물체에 도달할 때까지의 경로와 물체 표면에서의 반사/흡수 과정을 물리적으로 정확하게 계산합니다. 이를 통해 다양한 광원 환경에서도 일관된 조명 효과를 얻을 수 있습니다.
PBR에서 빛의 반사와 산란을 계산하는 과정은 주로 BRDF(Bidirectional Reflectance Distribution Function)를 기반으로 하며, 이는 물리적인 법칙에 따라 빛이 물체와 상호작용하는 방식을 수학적으로 모델링합니다. 반사와 산란은 각각 재질의 특성과 입사각, 반사각에 의해 결정됩니다.
1. 반사(Reflection) 계산
반사는 빛이 표면에 닿은 후 반사되는 과정으로, 물리적으로 다음과 같은 방식으로 계산됩니다.
Specular Reflection
Specular Reflection는 매끄러운 표면에서 빛이 특정 각도로 반사되는 것을 말합니다. 이는 거울과 같은 표면에서 주로 발생하며, 반사각은 입사각과 동일하게 나타납니다.
PBR에서는 Cook-Torrance 모델을 사용하여 Specular Reflection를 사용합니다. 이 모델은 입사광과 반사광 사이의 각도, 그리고 표면의 미세한 거칠기를 고려하여 빛의 반사량을 계산합니다.
Cook-Torrance (쿡-토런스) 반사 모델 [2]
Cook-Torrance 반사 모델은 1982년에 Robert Cook과 Kenneth Torrance가 제안한 것으로, Phong 및 Blinn-Phong 모델보다 더 물리적으로 현실에 가까운 빛 반사를 시뮬레이션하는 모델입니다.
이 모델은 플러그형 구조를 채택해 다양한 방정식을 조합하여 사용할 수 있는 유연성을 가지고 있으며, 다양한 재질을 효과적으로 표현할 수 있습니다. Phong 모델이 주로 플라스틱이나 일부 금속을 표현하는 데 적합한 반면, Cook-Torrance 모델은 훨씬 더 넓은 범위의 재질을 표현할 수 있습니다.
이 모델은 오늘날에도 여전히 널리 사용되며, 특히 물리 기반 렌더링(PBR)에서 사실적인 빛 반사와 재질 표현을 위해 많이 활용됩니다.
Cook-Torrance 반사 모델의 주요 요소
- Fresnel 반사(Fresnel Effect): 입사각에 따라 반사광의 세기가 달라집니다. 큰 입사각일수록 더 많은 빛이 반사되며, 이는 Fresnel 방정식을 통해 계산됩니다.
- 지오메트리 함수(G): 빛이 표면에 닿았을 때 그 표면의 거칠기와 장애물에 의해 반사가 방해받는 정도를 고려한 함수입니다.
- 분포 함수(D): 미세한 표면의 거칠기에 따른 빛의 반사 분포를 설명하는 함수입니다. 이는 표면의 법선 벡터와 입사광의 각도를 기반으로 계산됩니다. 일반적으로 GGX나 Beckmann 분포를 사용합니다.
Cook-Torrance 모델에서 스펙큘러 반사는 다음과 같은 식으로 계산됩니다.
- L_o는 관찰자에게 반사되는 빛의 양,
- F는 Fresnel 반사 효과,
- G는 지오메트리 함수,
- D는 표면 거칠기의 분포 함수,
- L_i는 입사광,
- N은 표면의 법선 벡터,
- V는 관찰자의 방향 벡터,
- L은 광원의 방향 벡터입니다.
2. 산란(Diffuse Reflection) 계산
산란은 빛이 물체 표면에서 여러 방향으로 퍼지는 현상으로, 주로 비금속성 물체에서 발생합니다. 이 과정에서 빛이 고르게 분산되어 물체가 부드럽게 보이게 됩니다.
람버트 반사 모델(Lambertian Reflection)
- 산란 반사는 램버트 모델(Lambertian Reflectance Model)을 통해 계산됩니다. 이 모델은 빛이 모든 방향으로 균일하게 확산되는 것으로 가정하며, 물리적으로 매우 간단한 수학적 표현을 사용합니다.
- 램버트 반사는 물체의 표면에서 빛이 표면의 각도에 따라 고르게 반사되는 현상을 모델링하며, 다음과 같은 간단한 식으로 계산됩니다
- L_o는 관찰자에게 도달하는 확산 반사광
- k_d는 확산 반사의 계수(물체의 색상이나 재질에 따라 달라짐),
- L_i는 입사광,
- N은 표면의 법선 벡터입니다.
이 모델은 확산 반사가 물체 표면의 법선 벡터와 입사광의 각도에 의존한다는 것을 나타내며, 법선과 입사광의 내적(dot product)을 사용하여 계산됩니다. 램버트 모델은 매우 간단하지만, 현실적으로 정확한 산란을 표현하는 데 한계가 있기 때문에 PBR에서는 이 기본 모델을 사용하면서도 추가적인 효과를 함께 고려합니다.
Fresnel 반사(Fresnel Effect)
- Fresnel 방정식은 빛이 표면에 닿을 때 입사각에 따라 반사되는 빛의 양이 달라지는 현상을 설명합니다. 입사각이 작을 때는 반사가 거의 일어나지 않지만, 큰 입사각에서는 반사가 더 강해집니다.
- Fresnel 반사는 특히 물과 유리 같은 투명한 표면에서 중요한 역할을 하며, 금속성 재질에서도 반사광의 강도를 계산하는 데 사용됩니다.
- Fresnel 효과의 계산
여기서 F_0는 수직으로 입사할 때의 반사율을 나타내며, 이 값은 재질의 특성에 따라 결정됩니다.
거칠기(Roughness)
- PBR에서는 표면의 거칠기가 중요한 역할을 합니다. 거칠기 값은 표면의 미세 구조를 반영하며, 거칠면은 빛을 더 확산시키고 부드럽게 반사시킵니다. 매끄러운 표면은 빛을 더 선명하게 반사합니다.
- 거칠기는 스펙큘러 반사와 확산 반사 모두에 영향을 미치며, 주로 GGX 분포를 사용해 거칠기를 모델링합니다.
실시간에서의 최적화
현실적인 반사와 산란을 계산하는 데는 높은 계산 자원이 필요하기 때문에, 실시간 렌더링에서는 BRDF를 근사화하거나 사전 계산된 반사 맵(reflection maps), 조명 맵(light maps) 등을 사용하여 최적화합니다.
참고 자료
[1] https://lifeisforu.tistory.com/366
[2] https://graphicscompendium.com/gamedev/15-pbr