컴퓨터공학/Computer Graphics

Illumination Models and Surface-Rendering Methods - 2

Pyxis 2024. 8. 25. 17:08

[ Illumination Models and Surface-Rendering Methods - 2 ]

 

[ Surface Lighting Effects ]

그래픽스에서 빛의 효과를 세가지로 분류.

 

- Diffuse Reflection (난반사)

표면이 거칠어 반사각이 표면에 따라 다 달라짐

사방팔방으로 고르게 반사됨.

ex) A4 용지의 경우 자세히 보면 엄청 울퉁불퉁해서 난반사가 일어나므로 보는 방향에 상관없이 동일한 밝기와 색깔이 나타남.

 

- Specular Reflection (정반사)

Highlight와 관련 있음.

ex) 매끈한 구슬의 경우 광원이 닿지 않는 곳은 hightlight보다 intensity가 덜하기 때문에 상대적으로 어두워 보인다.

 

- Ambient Light (주변광)
직접적으로 반사되어 들어온 빛이 아니라 다른 곳에서 반사되어 온 빛이 눈까지 들어오는 것을 말함.

ex) 낮에 불을 꺼도 아무것도 안보이는 것이 아니라 어느정도 보이는 경우

 

Specular + Diffuse + Ambient의 세가지 빛의 효과가 더해져서 Object의 표면 밝기가 정해지는 것 !

 

 

 

[ Basic Illumination Models ]

Approximation of illumination

현실 세계를 완벽하게 시뮬레이션 하는 것은 힘드므로 대략적인 흉내를 내는 것.

real-time을 위해 가장 단순한 light source 모델 사용 : point source

 

[ Ambient Light ]

간접적으로 도달하는 빛 (일반적인 밝기)

20%라면 어떤 Object여도 20%는 무조건 도달한다.

 

- Intensity Parameter : Ia

 

Diffuse reflection (난반사)의 간단한 형태로도 볼 수 있음.

빛의 방향이나 Object의 표면의 성질(거칠기)와 연관없음.

 

[ Diffuse Reflection ]

현실에선 불가능하지만, 가장 이상적인 난반사를 불러일으키는 반사체를 가정해보자.

여기서 반사되는 표면은 빛이 도달했을 때, 표면에서 모든 방향으로 똑같은 양을 고르게 반사시켜주는 표면

 

이 모델에서 Ideal diffuse reflectors는 Lambertian reflectors라고도 부른다.

→ 계산이 Lambert's cosine law에 기반하기 때문

Lambert's cosine law : 어떤 영역에서 반사되어 나가는 에너지가 그 표면의 법선벡터와 이루는 각도에 비례하게 된다는 법칙.

Ideal Diffuse Reflectors를 생각해봤을 때, 반사되어 나가는 Intensity는 프로젝션된 면적에 대한 방출되는 에너지가 된다.

→ 결과가 상수인 것을 통해 빛의 각도에 상관없이 모든 방향에서 동일한 빛의 강도를 가진다는 걸 알 수 있음.

 

Diffuse Reflection : 보는 방향과 무관하게 물체 표현이 동일한 밝기를 가진다.

 

[ Diffuse Reflection Coefficient ]

컴퓨터 그래픽스에서는, 모든 surface가 ideal diffuse reflector를 갖는다고 가정.

 

각각의 Surface에 대해서, parameter Kd라는 것을 설정해줄 것인데, 이것은 어떤 surface에 도달한 빛을 얼마나 흡수하고, 또 얼마나 반사할 것인지 결정해주는 파라미터이다.

parameter Kd

diffuse로 흡수/반사되는 비율

[0 <= Kd <= 1]

0 : 반사X, 1 : 전부 난반사

 

이제 ambient light에 Kd를 적용시킬 수 있는데, 그 식은 다음과 같이 간단히 나타낼 수 있다.

 

Ambient Light의 Intensity Parameter로 0.2가 되어 20%의 빛이 무조건 도달한다고 하더라도, Diffuse Parameter인 Kd에 따라 얼마만큼 난반사를 시키는지 정해져서 최종적으로 ambient light에 의해 난반사되어 나오는 빛의 강도인 Iambdiff (Intensity of ambient diffuse)가 되는 것이다.

 

light source로 부터의 incident light의 양은 light source direction에 대한 surface의 방향에 의해 정해진다.

왜냐하면, 빛의 방향에 perpendicular한 surface라면 빛이 들어왔을 때 가장 많이 받고, 빛이 비스듬하다면 더 적게 받기 때문이다.

그러므로 amount of incident light on a surface from a source with intensity I l 을다음과 같이 모델링할 수 있다.

I l이라고 하는 것은 light source로 부터 나오는 intensity를 의미하는 것인데, 예를 들어 광원에서 빛이 100% 나온다면 I l은 1이 되는 것이다.

그리고 빛이 비추는 방향과 물체의 surface에 perpendicular한 방향이 이루는 각도 세타를 이용해서, surface에 도달하는 빛의 intensity를 구할 수 있게 된다.

 

즉, (1)빛이 표면에 얼마만큼 도달하는지, (2)도달한 빛이 표면에 얼마만큼 흡수되고, 반사되는지, (3) 빛이 표면의 수직인 벡터와 얼마만큼의 각을 이루는지, 이 3가지를 통해 최종적인 Diffuse Reflection의 Intensity를 구할 수 있게 된다.

위 식에서 cos θ를 다시 나타낼 수 있는데,

 

Surface에 대한 unit normal vector N과, point source에 대한 unit vector인 L을 가정했을 때, 두 벡터가 이루는 각 θ 는 N * L로 나타낼 수 있다.

그러므로,

====================================

====================================

 

(* L은 light-source과 surface의 각 position을 통해 구할 수 있다.)

 

 

최종적으로, ambient intensity와 point-source intensity 계산을 결합하여 특정 surface position에서의 diffuse reflection을 구할 수 있게 된다.

 

여기서 N * L의 값에 따라 나누는 이유는, 수학적으로 각이 90도를 넘어가게 되면 Intensity가 음수를 갖게 되는데, 실제로는 그러면 안되므로 90도 이상일 경우, Intensity를 0으로 처리하는 것이다.

 

OpenGL같은 라이브러리는 ambient light에 해당하는 파라미터인 K a를 따로 두어, K d와 K a가 모두 관여하게 된다.

K a : ambient light에 해당하는 파라미터 (ambient light의 기본 intensity인 I a를 추가적으로 조절)

I a : ambient light의 세기를 조절하는 파라미터

K d : diffuse reflector에 해당하는 파라미터 (surface에 도달한 빛을 얼마나 흡수/반사할지 결정)

 

→ Ambient와 Diffuse가 결합된 형태를 한 번에 다루는 것.

 

 

[ Specular Reflection and the Phong Model ]

 

[ Specular Reflection ]

빛나는 표면에서 볼 수 있는 밝은 부분을 의미하는데, 정확하게는 specular reflection angle 주변으로 집중되어 있는 영역에서 입사광이 반사되는 것을 의미함.

 

specular reflection angle의 입사각과 반사각은 동일함.

R : 이상적인 specular reflection angle의 방향을 가리키는 unit vector

L : light source를 향하는 unit vector

V : view point를 가리키는 unit vector

 

완벽한 거울같은, ideal reflector에서는 입사각에 맞춰서 반사되어 나가겠지만, 실제로는 그렇지 않기 때문에 정확하게 R 방향이 아니라, R 방향 주변으로 반사가 일어남.

그래서 specular reflection angle 주변으로 집중된 영역에서 반사가 일어난다고 정의되는 것.

 

만약 ideal reflector에서 빛이 반사된다면, specular reflection angle인 R 방향으로만 반사가 일어나게 되는데, 이 경우 view point V가 R과 정확히 일치해야만(이루는 각이 0이어야민) 눈에서 highlight를 관찰할 수 있게 된다.

하지만, 현실에서는 ideal relfector는 거의 없다고 봐도 되기 때문에 R 방향 주변으로 반사가 일어나 그 많은 빛중 하나가 V와 겹쳐 눈에 들어오게 되는 것이다.

 

그러므로, R과 V가 이루는 각이 작을수록 더 좁은 영역으로 집중해서 반사가 이루어지고, 눈이 반사되는 빛을 관찰할 수 있는 확률이 줄어들게되고, 반대로 각이 클수록 더 넓은 영역으로 퍼져서 반사가 이루어지고, 눈이 반사되는 빛을 관찰할 수 있는 확률이 높아지게 된다는 뜻이 된다.

 

→ R과 V가 이루는 각 φ가 중요하다는 의미

 

[ Phong specular-reflection model ]

specular reflection은 Phong specular-reflection model을 사용함.

specular reflection range를 계산하기 위한 empirical model(경험적인 모델)

 

ns는 surface의 타입에 따라 결정되는데, ^ns가 커질수록 φ가 조금만 커져도 cos 값이 엄청 작아지게 된다.

→ ns가 클수록 좁은 범위를, 작을수록 넓은 범위를 가지게된다.

ns가 클수록 완벽한 거울에 가까워 이상적으로 반사한다는 의미가 되는 것이다.

 

specular reflection의 intensity는 cos^ns φ에 비례 하게 된다.

빛이 들어오는 입사각인 θ도 specular reflection intensity에 영향을 주게 되는데, W(θ)는 reflector의 재질이 어떤 것이냐에 따라 입사각에 대해 반사되는 정도가 다르다는 것을 나타내는 것이다.

→ W(θ)를 이용해서 reflector의 재질에 따라 specular-relfection coefficient를 결정짓게 해주는 것.

W(θ)는 각 재질별로 입사각에 따라 달라지긴 하는데, 대부분 상수로 취급해도 큰 문제는 없기 때문에 이를 재질에 따라 상수인 ks로 바꿔도 된다.

 

Diffuse와 마찬가지로 light source와 view point가 surface normal vector에 대해 이루는 각이 90도 이상일 경우, 반사되지 말아야 하므로 V * R > 0 and N * L > 0 조건이 붙게 되는 것이다. (negative intensity는 존재하면 안되므로)

 

N : 이전에 언급됐었음, surface에 대한 normal vector

L : (light source - surface position)

V : (viewpoint - surface position), view point에서 surface position을 빼서 unit vector로 만들어서 구함.

 

R : (2N * L)N - L

R과 L vector를 더할 경우, 그 합 벡터는 L을 N에 대해 내적한 것의 2배의 길이를 갖는 N 방향 벡터에 해당한다.

 

그러므로 

2N*L은 스칼라이므로 N을 다시 곱해주는 것.

 

[ The simplified Phong model ]

다시 Phong specular-relfection model 식을 보자.

 

결과적으로, V * R이 큰 영향을 미치는 것을 알 수 있는데, 평면의 모든 점에서 이 dot product가 다시 이루어 져야 한다는 의미가 된다.

Diffuse Reflection은 본질적으로 난반사기 때문에 view point에 해당하는 V에 상관없이 한 번만 계산되면 되는 것인데, Specular Reflection은 surface마다 view point에 해당하는 V가 달라질 때 마다 다른 값이 나오므로, surface의 모든 점마다 dot product를 다시 해야하기에 연산량이 매우 많은 것이다.

 

그래서 이것을 simplify해보자는 것이 Blinn-Phong Model이다.

specular reflection의 범위를 계산하기 위해 L과 V을 이등분하는 위치에 halfway vector라고 하는 H를 추가한다.

 

위 식에서 V * R대신 N * H로 대체한다.

어차피 L과 R, N은 고정인데 R에 대해 V가 이루는 각이 줄어든다고 가정해보자. 그러면 H또한 L과 V의 이등분선(bisector)이므로 비례하여 줄어들게 된다.

→ 정확하진 않지만 비례하여 변경되는 근사치를 사용할 수 있게 되는 것이다.

 

1) light source가 surface로 부터 충분히 멀고, 2) viewing direction이 고정되어 있다고 두 가지 조건을 걸어보자.

이 경우 L, V, H가 전부 상수가 되어 Polygon Table에 있던 N에 대해서 H를 dot product 하는 것 한 번만하고, 매 번 dot product를 다시 하지 않아도 된다는 성능적 이점을 갖게 된다.

→ 표면의 모든 점마다 dot product를 재계산할 필요가 없어지면서 외관적으로 큰 차이를 느끼지 못하는 이점을 가짐.

 

2) 조건은 사실 Orthogonal Projection에 해당하는 것인데, Perspective Projection에서 vieiwng direction이 고정되어 있다고 가정하고 계산해도 시각적으로 크게 차이나지 않게 된다.

 

 

 

[ Combined Diffuse and Specular Reflections ]

위에서 알아본 3가지 Ambient, Diffuse, Specular Relfections을 합쳐서 surface에 대해 작용하는 빛의 영향을 한번에 나타낼 수 있다.

 

[ Diffuse and Specular Reflections from Multiple Light Sources ]

light source가 여러 개 있는 경우, 각자 계산한 것을 다 더해서 적용시키면 된다.

 

[ Transparent Surfaces ]

 

[ Light Refraction ]

Realistic displays of a transparent material are obtained by modeling the refraction path of a ray of light through the material.

투명한 material의 사실적인 표시는 material을 통과하는 빛의 굴절 경로를 모델링함으로써 얻을 수 있다.

 

빛은 반사뿐만 아니라 굴절이 일어날 수도 있는데, 굴절은 surface의 투명도에 따라서 발생한다.

완전히 불투명한 surface는 굴절이 일어나지 않는데, 투명한 surface에 빛이 도달하면 일부는 굴절하고, 또 일부는 반사하게 됨.

빛의 속도는 material마다 다르므로, 굴절된 빛(refracted light)의 경로는 입사된 빛(incident light)과 다르다.

 

 

- The direction of the refracted light

θr : 굴절되는 빛의 방향은, "angle of refraction"이라고 하는, surface normal vector N과 이루는 각으로 정의 됨.

material마다 정해져 있는 고유한 index of refraction이 있고 이것은 진공에서의 빛의 속도에 대한 현재 material에서의 굴절 비율을 나타낸 것.

 

index of refraction : The ratio of the speed of light in a vacuum to the speed of light in the material.

 

Angle of refraction, θr : Snell의 법칙으로 계산가능, 

Snell의 법칙으로 인해 굴절되는 빛의 방향, angle of refraction이 계산 됨 : 

Snell의 법칙으로 Unit Transmission Vector(굴절 방향 벡터) T를 계산할 수 있음. (계산된다는 것만 알아도 충분)

 

[ Total surface Intensity ]

k t는 transmission 되는 정도를 나타내는 coefficient (i.e. : 70%, 30%) 

 

 

[ Shadows ]

object의 3차원 위치를 알 수 있게 해주는 중요한 시각적 단서.

 그림자가 없다면 현실감을 느끼지 못하게 됨.

 

그림자 영역을 표시하기 위해서, Visibility detection method가 사용된다.

Light source에 view point를 위치시키고, 어느 영역이 보이지 않는지 판단하면 그 영역이 그림자가 있어야할 영역이 된다.

 

 

 

 

 

 

 

 

[ Reference ]

Computer Graphics with OpenGL 4th edition, Hearn, Baker