일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- vs code
- WMS
- CeisumJS
- 세슘JS
- Specular
- Cesium
- Diffuse
- CesiumJS
- Geoserver
- GetTile
- WebMapTileService
- WebMercatorTilingScheme
- glad
- WMTS
- GLFW
- 브이월드
- vscode
- 탄젠트 공간
- lighting model
- WebMapServiceImageryProvider
- visual studio code
- OpenGL
- VBO
- Visual Studio
- GLM
- 지오서버
- 세슘
- Phong
- WebMapService
- V-World
- Today
- Total
엉뚱하고 기발하게
Tangent space(접선 공간) 본문
본 블로그는 개인적인 공부를 목적으로 작성되었습니다.
작성된 블로그의 내용은 다른 사이트, 블로그를 참고하였으며, 저작권 문제가 있다면 수정하겠습니다.
또한 잘못된 내용으로 인한 불이익은 사용자에게 있습니다.
Tangent space가 무엇인지 알기 위해서는 우선 Tangent plane을 알아야 한다.
Tangent plane은 그림과 같이 구의 한 지점에 접하는 면이다. 수학적으로 이해하기 위해서는 이곳을 참고하기 바란다.
Tangent space는 Tangent plane이 구성하는 3차원 공간이라고 할 수 있다.
그림에서와 같이 구의 한 지점 $(\lambda, \phi)$에 접하는 접면(Tangent plane)이 있을 때 접면이 구성하는 3차원 공간($u$-axis, $v$-axis, $w$-axis)을 Tangent space라 할 수 있다. 여기서 $u$-axis, $v$-axis는 평면에 기준을 어떻게 하는가에 따라 Tangent space는 무수히 많아진다.
그래픽스에서는 $u$-axis와 $v$-axis를 Texture coordinate를 사용하여 하나의 Tangent space를 사용한다.
Texture coordinate를 이용한 Tangent space를 구하기위해서 3차원 공간에 삼각형의 세 점 $P_0, P_1, P_2$가 있고, 각 정점의 Texture coordinate $(u_0, v_0), (u_1, v_1), (u_2, v_2)$이 있다고 가정한다.
삼각형의 내에 임의 점을 $Q$라고 했을 때 아래의 식이 성립한다.
$Q - P_0 = (u - u_0)T + (v - v_0)B$
여기서 $T$와 $B$는 우리가 구하고자 하는 Tagent, Bitangent vector이다. 위 식을 다시 삼각형의 각 점에 대해서 풀면 아래와 같이 된다.
$ \begin{align*}
Q_1 &= P_1 - P_0 = (u_1 - u_0)T + (v_1 - v_0)B\\
Q_2 &= P_2 - P_0 = (u_2 - u_0)T + (v_2 - v_0)B\\
\end{align*}$
위 식에서 $(u_1 - u_0) = s_1$, $(v_1 - v_0) = t_1$, $(u_2 - u_0) = s_2$, $(v_2 - v_0) = t_2$로 치환하면 아래와 같이 된다.
$ \begin{align*}
Q_1 &= P_1 - P_0 = s_1T + t_1B\\
Q_2 &= P_2 - P_0 = s_2T + t_2B\\
\end{align*} $
위 식을 행렬 형태로 변경하면 아래와 같이 된다.
$ \begin{bmatrix}
Q_{1x} & Q_{1y} & Q_{1z} \\
Q_{2x} & Q_{2y} & Q_{2z} \\
\end{bmatrix}
= \begin{bmatrix}
s_1 & t_1 \\
s_2 & t_2 \\
\end{bmatrix}
\begin{bmatrix}
T_x & T_y & T_z \\
B_x & B_y & B_z \\
\end{bmatrix} $
위 식에서 우리가 구하고자 하는 $T$와 $B$를 구하기 위해 $\begin{bmatrix} s_1 & t_1 \\ s_2 & t_2 \end{bmatrix}^{-1} $을 양 변에 곱하면 아래 식이 된다.
$ \begin{bmatrix}
s_1 & t_1 \\
s_2 & t_2 \\
\end{bmatrix}^{-1}
\begin{bmatrix}
Q_{1x} & Q_{1y} & Q_{1z}\\
Q_{2x} & Q_{2y} & Q_{2z}\\
\end{bmatrix} =
\begin{bmatrix}
s_1 & t_1 \\
s_2 & t_2 \\
\end{bmatrix}^{-1}
\begin{bmatrix}
s_1 & t_1 \\
s_2 & t_2 \\
\end{bmatrix}
\begin{bmatrix}
T_x & T_y & T_z \\
B_x & B_y & B_z \\
\end{bmatrix} $
위 식을 정리하면 아래와 같이 된다.
$ \begin{bmatrix}
T_x & T_y & T_z \\
B_x & B_y & B_z \\
\end{bmatrix} =
\frac{1} {s_1 t_2 - s_1 t_1}
\begin{bmatrix}
t_2 & -t_1 \\
-s_2 & s_1 \\
\end{bmatrix}
\begin{bmatrix}
Q_{1x} & Q_{1y} & Q_{1z} \\
Q_{2x} & Q_{2y} & Q_{2z} \\
\end{bmatrix} $
위 식에서 $s_1$, $t_1$, $s_2$, $t_2$, $Q_1$, $Q_2$를 알고 있으므로, 우리가 구하고자 하는 $T$, $B$를 구할 수 있다.
bleedmin.blogspot.com/2012/04/blog-post_6395.html
www.slideshare.net/QooJuice/normal-mapping-79468987
https://kimdw819.tistory.com/entry/구현한-범프-매핑-설명탄젠트-공간
m.blog.naver.com/sensr7086/10073107199