BRDF (Bidirectional Reflectance Distribution Function) BTDF (Bidirectional Transmittance Distribution Function) BSDF (Bidirectional Scattering Distribution Function) 빛이 표면에서 어떻게 산란되거나 투과되는지를 설명하는 광학적인 특성을 나타내는 함수 빛의 상호작용을 모델링하고 시뮬레이션 하는데 사용되며, 빛과 재질간의 상호작용을 정확하게 모델링 하여 실제와 유사한 시각적 결과를 생성하는데 사용됩니다. BSDF는 빛의 산란 및 투과 특성을 설명하는 함수이며, BSDF 함수는 일반적으로 .hlsl 셰이더 코드내에서 사용되어 물체의 표면 속성과 조명 환경에 따라 빛의 상호작용을 정의 하고 모델링합니다. 빛의 입사 방향, 반사 방향 또는 투과 방향, 입사 각도 등을 고려하여 빛의 산란 및 투과 특성을 계산합니다. 이러한 계산은 Pixel Shader 또는 Vertex Shader 에서 수행될 수 있습니다.
BRDF 는 표면에 입사하는 빛이 얼마나 반사되는지를 설명합니다. BRDF 는 입사 각도, 표면의 입사 방향과 반사 방향의 차이, 표면 속성 등을 고려하여 반사되는 빛의 분포 를 나타냅니다. BRDF 는 빛의 표면 상 반사를 설명하기 위해 주로 사용됩니다.
BTDF 는 표면을 통과하는 빛이 어떻게 흡수되거나 산란되는지를 설명합니다. BTDF 는 표면에 입사한 빛이 표면 내부로 어떻게 투과되는지와 표면 내부에서 나오는 빛이 어떻게 산란되는지를 나타냅니다. BTDF 는 빛의 투과와 흡수를 설명하기 위해 주로 사용됩니다.
BSDF 는 BRDF 와 BTDF 를 포괄하는 개념으로, 입사한 빛이 어떻게 산란되거나 투과되는지를 모두 설명합니다. BSDF 는 입사각도, 표면의 입사방향과 반사, 투과방향의 차이, 표면 속성 등을 고려해서 빛의 산란과 투과의 분포를 나타냅니다. BSDF 는 빛의 상호작용을 종합적으로 설명하는 유용한 도구로 사용됩니다.
Normal 은 법선 벡터 을 의미하며, 방향을 이용하여 면의 앞 뒤를 구분할 수 있기때문에 음영처리의 중요한 역할을 합니다. 벡터란것은 힘이나 속도 가속도 같은 것을 화살표 방향으로 표시하는 것인데, 3D 에서는 빛이 면에 닿아서 반사되어 뻗어나가는 방향이라고 생각 하면 되고, 방향에 따라 부드럽게 보이기도 하고 평평하게 보이기도 하고 복잡하게 표현되면 디테일한 양감을 ㅗ보이게 되는 것입니다. 이런 뻗어나가는 벡터값이 Vertex 에서 시작되면 Vertex Normal 이라고 하고 면에서 시작되면 Polygon Normal 이라고 한다. Normal 을 조정하면서 우리는 빛이 물체로부터 반사되는 방식을 바꿀 수 있습니다. 이것이 Normal 입니다. Texture 를 사용하여 3D Object 에서 반사되는 빛의 방향을 구부려 실제보다 더 복잡하게 보이게 하는 것입니다. 빛의 바운스를 조정하여 3D 물체가 실제보다 더 복잡하게 생긴 것처럼 보이도록 합니다. Vertex 는 하나 혹은 여러개의 Normal 을 가질 수 있습니다. 만약 그것이 하나의 Normal 을 가지고 있다면, 그것을 우리는 Averaged Vertex Normal 두개 이상의 Normal 을 가지고 있다면, 그것을 우리는 Split Vertex normal 이라고 부릅니다. 최근까지 각 3D 프로그램은 애버리지버텍스 노멀을 계산하는 방법을 자체적으로 사용했는데 그건 각각의 프로그램에서 이렇게 계산된 노멀이 다른 3D 프로그램에서 결과가 다르게 보일 수 있다는 것을 의미합니다. 똑같이 Average Normal 을 했는데도 결과 다를 수 있다는 것이죠
Normal Map 을 베이킹 할 때 우리는 기본적으로 베이킹 프로그램에서 LowPolygon 의 Normal 방향을 HighPolygon 의 방향과 일치하도록 지시합니다. 그래서 LowPolygon 의 모델은 HighPolygon 모델에서 처럼 빛이 Bounce 됩니다. 베이킹 프로그램은 LowPolygon 의 Normal 방향에 따라 베이크 됩니다. LowPolygon 의 Normal 방향에 따라 HighPolygon 의 쉐이딩이 모두 Normal Map 이라고 불리는 Texture 에 저장됩니다. 따라서 우리는 LowPolygon 의 Normal 을 제어할 필요가 있는 것입니다. HighPolygon 이 좋아 보인다는 것은 Normal 들이 좋고 Baking 하기에도 충분히 괜찮다는 것을 의미합니다.