ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [52] - Lighting(Illumination)
    Graphics 2021. 9. 13. 21:43

     일반적으로 빛을 받는 부분은 밝고 빛을 덜 받는 부분은 상대적으로 어둡습니다. 물체의 뒷면은 빛이 잘 들지 않아 그림자가 생기기도 합니다. 그림자는 따로 배우고 빛이 받는 부분에 대한 Shading을 배워봅니다. Illumination은 기본적으로 광[光]의 변화 및 조건에 따른 색깔[Colour]의 변화에 주된 목적이 있습니다.

    Phong model

    가장 널리 알려지고 자주 사용되는 대표적인 Lighting 모델입니다. 물론 Phong model보다 나은 모델들이 여러 존재하긴 하지만 배우는 입장에선 기본부터 하는 것이 좋다고 생각합니다. Physically Based Rendering(PBR)이라는 스키마도 존재하긴 합니다. 이 Phong model은 크게 네 가지 요소들로 이루어져 있습니다.

    1. Diffuse

    2. Specular

    3. Ambient

    4. Emissive

    Phong 모델은 단순히 어떤 물체의 표면을 향해 내리쬐는 빛의 산란에 대한 요소들을 계산하는 반면에 PBR은 물체의 점도, 표면의 성질 등등 까다로운 조건까지 고려하여 색의 변화를 나타낸다고 합니다. 예를 들면 철판과 목재에 같은 빛을 쏜다고 해도 서로 다른 느낌을 내는 것 같습니다.

    Light Sources

    빛이면 빛이지 무슨 종류가 있는가 생각을 했습니다. 그게 아니고 광원[光原]에 대한 이야기 입니다. 다음과 같이 크게 몇 가지로 따져볼 수 있습니다.

    1. Point Light

    2. Directional Light

    3. Spotlight

    4. Ambient

    Point Light는 한 점에서 모든 방향으로 동일한 빛을 발산하는 광원입니다. 어떤 물체와 광원 간의 거리에 반비례하여 세기는 달라집니다. Directional Light 는 아주 멀리 떨어진 광원을 말하는 것으로 모든 방향, 거리에 완전히 같은 정도의 빛을 쏘게 됩니다. 즉, 이 광원은 너무나 멀리 떨어져 있기 때문에 어떤 Scene에 존재하는 물체들은 모두 한 방향에서 빛을 받게 됩니다. 멀리 떨어진 항성에서 쏟아지는 빛을 받는 행성을 생각하면 됩니다. 마치 무더운 여름에 지상에 있는 사람과 10m 철탑 위에 올라간 사람이 느끼는 햇살의 따가움이 비슷한 것과 같습니다.

    Spotlight는 우리가 생각하는 바로 그 스포트라이트입니다. 이 빛은 한 점에서 출발하여 부채꼴로 확산하여 아주 캄캄한 공간에서 이 형태의 빛이 쏟아지는 것을 관찰하면 마치 Cone처럼 보입니다. 이 빛은 광원에 가까울 수록 또는 Cone 모양의 단면 중 중앙에 가까울 수록 빛의 세기가 높아집니다.

    Ambient는 특이한 형태이며 Constant Light라고도 합니다. 광원이 없더라도 물체 자체가 어느 정도의 빛을 낸다는 가정을 하는 것입니다. 따라서 이 빛의 강도는 늘 동일할 것입니다.

    Phong Model : Diffuse

    난반사의 표현을 일컫는 말입니다. 물체의 표면이 완전히 매끄러운 경우는 드뭅니다. 따라서 어떤 면에 날아든 빛은 대부분 난반사를 하며 해당 난반사의 방향을 구현하는 것이 Diffuse의 목적입니다. 하지만 제아무리 모든 표면이 매끈하지 않고 울퉁불퉁하다고 하더라도 게임이든 뭐든 공간 상의 물체들의 표면을 모조리 구현하는 것은 벅찰 것입니다. 따라서 Lambert's Law라고 해서 존재하는 물체들의 표면의 불균일함이 언제나 일정하여 난반사 된 빛이 균등하게 난반사된다는 가정을 채택합니다. 즉, 반사의 각이 Uniformly distributed하다는 것입니다. 또 한 가지 중요한 특징이 있습니다. 난반사의 각이 균일하기 때문에 카메라의 위치와 상관없이 물체의 밝기가 일정하고 오직  입사각의 영향만 받습니다.

    어떤 물체의 표면에 수직하는 방향으로 향한 벡터를 Normal Vector라고 할 것입니다. 그리고 처음엔 좀 헷갈렸는데 광원으로부터 표면으로 향하는 벡터가 아니라 표면에서 광원으로 향하는 벡터를 Light vector라고 합니다. 그리고 이 벡터 l은 Normalized 된 벡터입니다. 

    l의 방향에 태양이나 광원이 있다고 가정해보면 b,a,c,d순으로 표면이 밝게 보일 것입니다. d는 표면에 빛이 아예 비치질 않기 때문입니다. 

    l과 n의 각에 따라 밝기의 정도가 변하는데 이를 관찰해보면 각이 0 degrees일 때 가장 밝고 예각일 때, 그리고 직각일 때 마지막으로 90 degrees을 넘어갈 때 가장 어둡습니다. 두 개의 벡터와 그 사이각을 통해 이 성질을 가장 적합하게 표현할 수 있는 것은 Dot Product입니다.

    a와 b의 사이의 각이 x라고 할 때, dot product는 a·b·cos(x)로 쓸 수 있습니다. 그런데 cos(x)는 x = 0에서 최대 값이고 x = (90 degrees)에 가까울 수록 값이 줄어들다가 최소인 0이 됩니다. 하지만 이 때, 각이 90degrees가 넘어가면 빛이 아예 비추지 못하는 상황이기 때문에 음수의 값을 쓰지 말고 그냥 0으로 표현할 것입니다. 난반사된 빛이 없다는 뜻입니다. 간단한 아다마르 곱[Hadamard Product] 계산이 있습니다.

    Phong Model : Specular

    이건 광택에 가까운 표현입니다. 물체의 표면이 빛나게 보이는 것 같은 효과를 줍니다. Diffuse Term에 의해 빛이 물체 표면에 맞고 나오는 색을 결정했다면 Specular term은 해당 표면이 얼마나 번쩍이는지 결정합니다. 이를 위해서는 광원에 의한 빛 벡터와 normal vector을 활용하여 반사 벡터 즉 Reflection vector를 구해야 합니다.

    Phong model : Ambient

    Phong Model : Emissive

    Phong model의 마지막 요소인 Emissive는 광원 뿐만 아니라 물체 자체가 일정한 빛을 낸다는 가정입니다.

    Phong Lighting Model

    Diffuse, Specular, Ambient, Emissive의 식들을 모두 정리하여 합치면 최종적으로 어떤 표면에 빛이 들었을 때 나타나는 정도를 구할 수 있습니다. 즉, 단순 RGB 혹은 RGBA에 빛의 요소가 개입하게 됩니다.

    figure 1a

    이를 DirectX나 OpenGL에서 어디에 삽입하고 어떻게 구현하면 좋을지 생각해봐야 합니다.

    'Graphics' 카테고리의 다른 글

    [53] - Lighting(Illumination) - 2  (0) 2021.09.15
    [51] - imgui  (0) 2021.08.28
    [50] - Texture - 2  (0) 2021.08.26
    [49] - Texture - 1  (0) 2021.08.17
    [48] - Rasterization  (0) 2021.08.13
Designed by Tistory.