Search

WebGL

subtitle
webGL ์ž์Šต
Tags
webGL
Created
2021/04/20
2 more properties

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์˜ ๋ฉด์—์„œ ํ…์Šค์ณ ์ขŒํ‘œ'๋‚˜ '์กฐ๋ช… ๊ณ„์ˆ˜'๋ฅผ ๊ฒฐ์ •ํ•ด์•ผํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
*texel: texture element ๋˜๋Š” texture pixel

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