OpenGL Lighting Equation 요약 설명
Latex 연습
Table Of Contents
숙제 4. OpenGL Lighting Equation 요약 설명
20190002 강다혜
OpenGL은 퐁의 조명 모델에 기반을 두고, 각 vertex에 사용할 색을 계산한다. 조명 공식을 통해서 각 각 vertex에 대한 RGBA 색을 구할 수 있는데, RGB 채널과 A 채널은 서로 다른 계산 방식을 취하고, 여기에서는 RGB 채널에 대한 계산만 다룬다.
OpenGL의 조명 공식은 크게 물질 자체의 방사 색깔, 전역 앰비언트 반사, 그리고
n
\bold{c} =
n
물질의 방사 색은
\bold{e}_{cm}
\bold{a}_{cm}
\bold{a}_{cs}
\bold{a}_{cm} * \bold{a}_{cs}
\bold{c} = \bold{e}_{cm} + \bold{a}_{cm} * \bold{a}_{cs} + \sum^{n-1}_{i = 0}
i
조명의 반사 효과는 쉐이딩을 하려는 지점의 꼭지점 좌표
V
\bold{n}
i
광원이 물체에 영향을 미치는 방법으로는 앰비언트 반사, 난반사, 정빈사의 3가지가 있다. 위의 조명 공식에서
\bold{a}_{cm} * \bold{a}_{cli} + (\bold{n}\odot \overrightarrow{\bold{\text{VP}}}_{pli})\bold{d}_{cm} * \bold{d}_{cli} + (f_i)(\bold{n}\odot \bold{\hat{h}}_i)^{s_{rm}}\bold{s}_{cm} * \bold{s}_{cli}
부분은
i
위 공식에서
\bold{a}_{cm} * \bold{a}_{cli}
i
\bold{a}_{cm}
\bold{a}_{cli}
i
다음으로 난반사의 계산식은
(\bold{n}\odot \overrightarrow{\text{VP}}_{pli})\bold{d}_{cm} * \bold{d}_{cli}
\overrightarrow{\text{VP}}_{pli}
\text{P}_1
\text{P}_2
\overrightarrow{\text{P}_1\text{P}_2}
\text{P}_1
\text{P}_2
w
w_1, w_2
w_1, w_2
\overrightarrow{\text{P}_1\text{P}_2}
\text{P}_1
\text{P}_2
w_2
\overrightarrow{\text{P}_1\text{P}_2}
\text{P}_2
w_1
\overrightarrow{\text{P}_1\text{P}_2}
\text{P}_1
w_1, w_2
\overrightarrow{\text{P}_1\text{P}_2}
\text{P}_2 - \text{P}_1
이러한 정의를 통하여
\overrightarrow{\text{VP}}_{pli}
\text{V}
w
\text{P}_{pli}
w
w
\overrightarrow{\text{VP}}_{pli}
\bold{n}
\bold{n}\odot \overrightarrow{\text{VP}}_{pli}
\bold{d}_{cm}
\bold{d}_{cli}
i
정반사의 계산식은
(f_i)(\bold{n}\odot \bold{\hat{h}}_i)^{s_{rm}}\bold{s}_{cm} * \bold{s}_{cli}
해프웨이 벡터
\bold{h}_i
\bold{h}_i = \left \{ \begin{array}{cc} \overrightarrow{\text{VP}}_{pli} + \overrightarrow{\text{VP}}_{e}, \qquad\quad v_{bs} = \text{TRUE,} \\ \overrightarrow{\text{VP}}_{pli} + (0\;0\;1\;0)^t,\quad v_{bs} = \text{FALSE}\end{array} \right.
여기서 해프웨이 벡터는 광원에 대한 방향과 관찰자 방향의 중간 방향으로의 단위 벡터로 정의되는데, 광원에 대한 방향은
\overrightarrow{\text{VP}}_{pli}
v_{bs}
\text{TRUE}
\text{P}_e = (0\;0\;0\;1)^t
\text{V}
\overrightarrow{\text{VP}}_{e}
v_{bs} = \text{FALSE}
z_e
(0\;0\;1\;0)^t
\bold{\hat{h}}_i
정반사 또한 난반사처럼 광원이 표편의 앞쪽에서 빛을 비추는 경우만 고려하기 때문에,
f_i
f_i
\bold{n}
\overrightarrow{\text{VP}}_{pli}
\bold{s}_{cm}
\bold{s}_{cli}
i
이렇게
i
\bold{a}_{cm} * \bold{a}_{cli} + (\bold{n}\odot \overrightarrow{\bold{\text{VP}}}_{pli})\bold{d}_{cm} * \bold{d}_{cli} + (f_i)(\bold{n}\odot \bold{\hat{h}}_i)^{s_{rm}}\bold{s}_{cm} * \bold{s}_{cli}
att_i
spot_i
(att_i)(spot_i)[\bold{a}_{cm} * \bold{a}_{cli} + (\bold{n}\odot \overrightarrow{\bold{\text{VP}}}_{pli})\bold{d}_{cm} * \bold{d}_{cli} + (f_i)(\bold{n}\odot \bold{\hat{h}}_i)^{s_{rm}}\bold{s}_{cm} * \bold{s}_{cli}]
을 반사 색깔로 사용한다.
att_i
att_i = \left \{ \begin{array}{cc} {1 \over {k_{Oi} + k_{1i}\parallel\text{VP}_{pli}\parallel + k_{2i}\parallel\text{VP}_{pli}\parallel^2}},\quad \text{P}_{pli}\text{'s}\;w\neq 0, \\ 1.0, \qquad\qquad\qquad\qquad\text{otherwise}\end{array} \right.
광원이 무한의 거리만큼 떨어진 평행 광원인 경우,
\text{P}_{pli}
w
att_i
\text{d}
\parallel\text{d}\parallel
\parallel\text{VP}_{pli}\parallel
k_{0i}
i
k_{1i}
i
k_{2i}
i
spot_i
i
spot_i = \left \{ \begin{array}{cc} (\overrightarrow{\text{P}_{pli}\text{V}}\odot\bold{\hat s}_{dli})^{s_{rli}} c_{rli} \neq 180.0 \;\&\; \overrightarrow{\text{P}_{pli}\text{V}}\odot\bold{\hat s}_{dli} \geq \text{cos}c_{rli},\\ \qquad 0.0, \qquad\quad c_{rli} \neq 180.0 \;\&\; \overrightarrow{\text{P}_{pli}\text{V}}\odot\bold{\hat s}_{dli} < \text{cos}c_{rli},\\ 1.0, \qquad\quad c_{rli} = 180.0\qquad\qquad\qquad\qquad\quad\end{array} \right.
스폿 광원의 절단 각도
c_{rli}
spot_i
\text{V}
\overrightarrow{\text{P}_{pli}\text{V}}
\text{cos}c_{rli}
spot_i
\text{cos}^{s_{rli}}\psi
(\overrightarrow{\text{P}_{pli}\text{V}}\odot\bold{\hat s}_{dli})^{s_{rli}}
이러한 과정을 거쳐서
i
n
\big( \sum^{n-1}_{i = 0}(att_i)(spot_i)[\bold{a}_{cm} * \bold{a}_{cli} + (\bold{n}\odot \overrightarrow{\bold{\text{VP}}}_{pli})\bold{d}_{cm} * \bold{d}_{cli} + (f_i)(\bold{n}\odot \bold{\hat{h}}_i)^{s_{rm}}\bold{s}_{cm} * \bold{s}_{cli}] \big)
\big( \bold{a}_{cm} * \bold{a}_{cs} \big)
\big( \bold{e}_{cm} \big)
\bold{c} = \bold{e}_{cm} + \bold{a}_{cm} * \bold{a}_{cs}+ \sum^{n-1}_{i = 0}(att_i)(spot_i)[\bold{a}_{cm} * \bold{a}_{cli} + (\bold{n}\odot \overrightarrow{\bold{\text{VP}}}_{pli})\bold{d}_{cm} * \bold{d}_{cli} + (f_i)(\bold{n}\odot \bold{\hat{h}}_i)^{s_{rm}}\bold{s}_{cm} * \bold{s}_{cli}]