WebGL
WebGL์ด๋
khronos ๊ทธ๋ฃน์ ์ํด ๋ง๋ค์ด์ง ์น ํ์ค์ด๋ค. webGL์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ํ๋์จ์ด์ GPU๋ฅผ ์ฌ์ฉํ์ฌ <canvas> ์์ ์์์ ์คํ๋๋ค. WebGL API๋ OpenGL ES 2.0์ ๊ธฐ๋ฐ์ผ๋ก ํ๊ณ ์๋ค. ์ฆ, WebGL์ ๋ฐ์คํฌํ ๋ฟ๋ง ์๋๋ผ TV๋ ๋ชจ๋ฐ์ผ ๋ฑ ๋ค์ํ ๊ธฐ๊ธฐ ํ๊ฒฝ์์๋ ๋ฌด๋ฆฌ ์์ด ์๋ํ๋ค. ๋จ, ํด๋น ๋ธ๋ผ์ฐ์ ๋ฒ์ ์ด WebGL์ ์ง์ํ๋ ๋ฒ์ ์ธ์ง ํ์ธํด์ผ ํ๋ค. WebGL์ ๋ธ๋ผ์ฐ์ ์์์ ๋ทฐ์ด์ ์ํธ์์ฉํ ์ ์๋ 3D ๊ทธ๋ํฝ์ ๋ ๋๋งํ ๋ ์ฌ์ฉํ๋ค.
OpenGL
OpenGL
ES๋ ๋ชจ๋ฐ์ผ ์์คํ
์ด๋ ์๋ฒ ๋๋์์ 2D, 3D ๊ทธ๋ํฝ์ ๋ ๋๋งํ ์ ์๊ฒ ํด์ฃผ๋ ํฌ๋ก์ค ํ๋ซํผ API์ด๋ค. ์ํํธ์จ์ด์ GPU ์ฌ์ด์ ์ธํฐํ์ด์ค๋ฅผ ์ง์ํ๋ฉฐ ์ ์ ๋ ฅ ๊ธฐ๊ธฐ์์๋ ์ ์๋ํ๋ ๋ฐ์คํฌํ OpenGL์ ํ์์งํฉ API์ด๋ค.
render 2D content
vertex shader
gl_Position์ด๋ผ๋ WebGL ๋ณ์์ ๊ฐ vertex์ ์์น๋ฅผ ์ ์ฅํ ์ ์๋ค. ํ์์ ๋ฐ๋ผ์๋ vertex์ ์ ์ฉํ 'texel์ ๋ฉด์์ ํ
์ค์ณ ์ขํ'๋ '์กฐ๋ช
๊ณ์'๋ฅผ ๊ฒฐ์ ํด์ผํ ์๋ ์๋ค.
graphic pipeline
vertex buffers
vertex ์์ฒด๋ ์ ์ ์ด๋ผ๋ ์๋ฏธ๋ก, vertex buffers๋ graphics pipeline์์ ๋ ๋๋งํ ํ
์ค์ณ ํฌ์ง์
๊ณผ ์ปฌ๋ฌ, ๊น์ด ๋ฑ์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ vertext๋ค์ ๋ฐฐ์ด์ด๋ค.
vertex shader
vertex buffers๋ฅผ ๋ฐ์, ์คํฌ๋ฆฐ ๊ณต๊ฐ์์ vertex์ ํฌ์ง์
์ ๊ณ์ฐํ๊ณ , ๊ฐ vertex์ ์ปฌ๋ฌ๋ฅผ ๋ถ์ฌํ๊ฑฐ๋ ๊น์ด๋ฅผ ๊ณ์ฐํ๊ธฐ๋ ํ๋ค.
triangle assembly
vertex shader๋ก ๊ผญ์ง์ 3๊ฐ๋ก ๋ง๋ค ์ ์๋ ๋ชจ๋ ์ผ๊ฐํ์ ๋ง๋ค์ด๋ธ๋ค(triangles). ๊ทธ ๋ค์ ๋ชจ๋ ์ผ๊ฐํ์ ์ด์ด ๋ถ์ธ๋ค(triangle strip). ๋งจ ์ฒ์ ๊ผญ์ง์ ๊ณผ ๋ค๋ฅธ ์ผ๊ฐํ๋ค์ด ๋ชจ๋ ์ฐ๊ฒฐ๋๋๋ก ์ผ๊ฐํ์ ์กฐํฉ์ ๋ฐ๊พผ๋ค(triangle fan).
rasterization
๊ฐ ์ผ๊ฐํ์์ ๋ณด์ฌ์ฃผ์ง ์์ ๋ถ๋ถ์ ๋ฒ๋ฆฌ๊ณ , ์ผ๊ฐํ์ ํฝ์
์ฌ์ด์ฆ์ fragments๋ค๋ก ๋๋๋ค. ๋ํ, vertex shader์์ ๊ฐ vertex ๋ถ์ฌํ ์ปฌ๋ฌ๋ฅผ ๋ถ๋๋ฝ๊ฒ ๋ธ๋ ๋ฉํ๋ค.
fragment shader
fragment shader๋ pipeline์์ ๋
๋ฆฝ์ ์ผ๋ก ์คํ๋๋ ํ๋ก๊ทธ๋จ์ด๋ค. rasterization์ ํตํด ๋ง๋ค์ด์ง ํฝ์
fragments๋ค์ vertex shader์ fragment shader์ ์์ํ์ ์ธํ์ผ๋ก ์ฌ์ฉ๋๋ค. fragment shader๋ ์ด value๋ค์ ํตํด ํ
์ค์ณ ๋งคํ, ์กฐ๋ช
, ์๊น๊ณผ ๊น์ด ๋ฑ์ ๊ณ์ฐํ๋ค. ๋
๋ฆฝ์ ์ผ๋ก ์คํ๋๊ธฐ ๋๋ฌธ์ ์ข๋ ์ธ์ฌํ๊ฒ ์ปจํธ๋กคํ์ฌ ๋ ๊ทน์ ์ธ ์ดํํธ๋ฅผ ์๊ฐํํ ์ ์์ง๋ง ๊ทธ๋งํผ ํผํฌ๋จผ์ค์ ๋ง์ ์ํฅ์ ๋ผ์น๋ ํํธ์ด๊ธฐ๋ ํ๋ค.
framebuffer
framebuffer๋ ๋ ๋๋ง์ ๋ง์ง๋ง ๊ฒฐ๊ณผ๋ค. framebuffer๋ ์ฌ๋ฌ ๊ฐ์ buffer๋ฅผ ๊ฐ์ง ์ ์๋ค. ํ๋ ์ด์์ color buffer์ ๋ํด, ๊น์ด ๋ฒํผ์ ์คํ
์ค ๋ฒํผ ๋ฑ์ ๊ฐ์ง๊ณ ์๋ค. ๊น์ด ๋ฒํผ์ ์คํ
์ค ๋ฒํผ๋ framebuffer์ ๊ทธ๋ ค์ง๊ธฐ ์ ์ ์ฌ์ฉ์์ ์ํด ์ต์
๋ํ๊ฒ ํํฐ๋ง๋ ์ ์๋ค.
3D perspective
orthographic(์ ํฌ์๋ฒ)
์๊ทผ๋ฒ๊ณผ ๋ฌ๋ฆฌ, ๋ค๋ฅธ ๊ฑฐ๋ฆฌ์ ์๋ ๋ํ์ ๊ฐ์ ๊ธธ์ด์ ์ ์ผ๋ก ํํํ๋ค. ์ข ๋ ์์ธํ ๋งํ๋ฉด ๋์์ ๋ฉด์ ํํํ๊ฒ, ๊ฑฐ๋ฆฌ์ ์๊ด ์์ด ๊ฐ์ ๊ธธ์ด์ ๋ชจ์์ผ๋ก *์ฌ์ํ๋ค.
*์ฌ์: ๋ํ์ด๋ ์
์ฒด๋ฅผ ๋ค๋ฅธ ํ๋ฉด์ ์ฎ๊น
3d perspective
์๊ทผ๋ฒ(perspective)์ด๋ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ์ด์ง ์๋ก ๋ ์๊ฒ ๊ทธ๋ฆฌ๋ ๊ฒ์ด๋ค. 3D์์ ์๊ทผ๋ฒ์ ๋ํ๋ด๊ธฐ ์ํด์๋ ํด๋ฆฝ ๊ณต๊ฐ ๋ด์ a์ b ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ Z๋ก ๋๋์ด์ผ ํ๋ค.
Clip Space
WebGL์์๋ ๋ฐ์ดํฐ๋ฅผ ์ผ๋ฐ ์ขํ๊ณ๋ก GPU์ ์
๋ก๋ ํ ๋ค์, vertex shader๋ก clip space๋ผ๋ ํน์ํ ์ขํ๊ณ๋ก ์ ํํ๋ค. triangle์ clip space ๋ด์์๋ง ๋ ๋๋ง๋ ์ ์์ผ๋ฉฐ, clip space๋ฅผ ๋ฒ์ด๋๋ฉด ๋ฒ์ด๋ ๋ถ๋ถ๋ง ์๋ฆฌ๊ฒ ๋๋ค. ํด๋ฆฝ ๊ณต๊ฐ์์ ์ฌ์ฉํ๋ ์ด๋ฌํ *์
๋ฐฉ ๋ฏธํฐ ์ขํ๊ณ๋ฅผ NDC(normalized device coordinates)๋ผ๊ณ ํ๋ค. Z ๊ฐ์ด ์์ ์๋ก, ์ฆ ๋ ์์ ๋์ฌ์ ธ์์ ์๋ก ๋ ์์ ๋์ฌ์ง๊ฒ ๋๋ค. (z-index์ ๊ฐ์ ๊ฐ๋
์ด๋ค.)
*์
๋ฐฉ ๋ฏธํฐ: ์ธ์ ๊ณฑ๋ฏธํฐ(m^3)
References
โข
See also
โข


