Math

๊ณต๊ฐ„์˜ ์ˆ˜ํ•™

ํ˜„์‹ค ์„ธ๊ณ„์˜ ๊ณต๊ฐ„์€ ํ•˜๋‚˜์ง€๋งŒ, ๊ฐ€์ƒ ๊ณต๊ฐ„์€ ๋ฌดํ•œํ•˜๋‹ค.

๊ณต๊ฐ„์ด๋ž€ ์–ด๋–ค ๋ฌผ์งˆ ๋˜๋Š” ๋ฌผ์ฒด๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๊ฑฐ๋‚˜ ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋Š” ์žฅ์†Œ

ํ–‰๋ ฌ (Matrix)

์„ ํ˜• ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋„๊ตฌ

  • ์ปดํ“จํ„ฐ์—๊ฒŒ ๊ฐ€์ƒ๊ณต๊ฐ„์„ ๋น ๋ฅด๊ฒŒ ๋ณ€ํ™”์‹œํ‚ค๋„๋ก ์ง€์‹œํ•˜๋Š” ์ผ์ข…์˜ ๋ช…๋ น์–ด

  • ๊ณต๊ฐ„์„ ๋ณ€ํ™˜ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋“ค์€ ๋‹ค ํ–‰๋ ฌ์— ๋Œ€์‘๋œ๋‹ค.

์›ํ•˜๋Š” ๊ณต๊ฐ„ ๋ณ€ํ™˜์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ–‰๋ ฌ์ด ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์–ด์ง€๊ณ , ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•ด์•ผํ•˜๋Š”์ง€ ๊ธฐ๋ณธ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๋Š”๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

ํ‰๋ฉด์˜ ๋ฐฉ์ •์‹

ax + by + cz + d = 0

  • ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ‰๋ฉด์„ ์‚ฌ์šฉํ•ด์„œ ๊ณต๊ฐ„์•ˆ์— ์ž์‹ ์˜ ์˜์—ญ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ ์นด๋ฉ”๋ผ ์˜์—ญ์„ ์ œ์–ดํ•˜๋Š” ์ ˆ๋‘์ฒด(Frustum)๊ฐ€ ์žˆ๋‹ค.

์ ˆ๋‘์ฒด(Frustum)๋ž€, 6๊ฐœ์˜ ํ‰๋ฉด์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, 3D ๊ณต๊ฐ„์—์„œ ์นด๋ฉ”๋ผ ์˜์—ญ์— ๋‹ด๊ธด ๋ถ€๋ถ„๋งŒ ๊ฑธ๋Ÿฌ๋‚ด ์‹ค์ œ๋กœ ๋ Œ๋”๋ง์‹œํ‚ค๋Š” ๋งค์ปค๋‹ˆ์ฆ˜์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

๋ฌผ์ฒด์˜ ์ˆ˜ํ•™

๊ฐ€์ƒ ๊ณต๊ฐ„์˜ ์ฒด๊ณ„์™€ ๋ฌผ์ฒด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ์ˆ˜ํ•™

์•„ํ•€์กฐํ•ฉ

aP1+bP2=a(x1,y1,1)+b(x2,y2,1)=(ax1,by1,a)+(bx2,by2,b)=(ax1+bx1,ay1+by2,a+b)aP_1 + bP_2 \\ = a(x_1, y_1, 1) + b(x_2,y_2,1)\\ = (ax_1,b y_1, a) + (bx_2,by_2,b) \\= (ax_1 +bx_1, ay_1 + by_2 , a+b)

๋งŒ์•ฝ a+b=1a + b = 1์ธ ๊ฒฝ์šฐ ๊ทธ ๋‘ ์ ์„ ๋” ํ–ˆ์„ ๋•Œ ํ•ญ์ƒ ์ ์ด ๋œ๋‹ค.

ํ•ด๋‹น ์กฐ๊ฑด์„ ์ƒ์‹œํ™”์‹œํ‚จ๋‹ค๋ฉด P=aP1+(1โˆ’a)P2P = aP_1 + (1 -a)P_2 ์ฆ‰, a๊ฐ’๊ณผ๋Š” ๋ฌด๊ด€ํ•˜๊ฒŒ ๋งˆ์ง€๋ง‰ ์ฐจ์›์˜ ๊ฐ’์€ 1์ด ๋œ๋‹ค.

  • ์ฆ‰, ์ ๊ณผ ์ ์„ ๋” ํ–ˆ์„ ๋•Œ ์–ธ์ œ๋‚˜ ์•„ํ•€๊ณต๊ฐ„์˜ ์ ์„ ๋ณด์žฅํ•œ๋‹ค.

  • ๋‘ ์ ์„ ์กฐํ•ฉํ–ˆ์„ ๋•Œ ์ƒˆ๋กœ์šด ์ ์„ ๋งŒ๋“œ๋Š” ๊ณต์‹์ด ๋œ๋‹ค.

๋ฉด์„ ์ƒ์„ฑ ํ•˜๋Š” ์ˆ˜ํ•™

์  3๊ฐœ๋ฅผ ์กฐํ•ฉํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜

P=aP1+bP2+(1โˆ’aโˆ’b)P3P = aP_1 + bP_2 + (1 - a - b)P_3

  • ์„ธ ์ ์„ ์กฐํ•ฉํ•œ ๊ฒฐ๊ณผ๋Š” ํ‰๋ฉด์„ ๋งŒ๋“ค์–ด ๋‚ธ๋‹ค.

  • ์„ธ ์ ์— ์‚ฌ์šฉ๋˜๋Š” ๊ณ„์ˆ˜์˜ ๊ฐ’์˜ ๋ฒ”์œ„๋ฅผ 0 ~ 1๋กœ ์ œํ•œํ•˜๊ฒŒ ๋˜๋ฉด ์„ธ ์ ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์˜์—ญ ๋‚ด๋ถ€์— ์œ„์น˜ํ•˜๋Š” ์ ์„ ์ƒ์„ฑํ•˜๋Š”๋ฐ ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์‚ผ๊ฐํ˜•์˜ ์˜์—ญ์ด ๋œ๋‹ค.

  • ์ด ์‚ผ๊ฐํ˜•์ด ๋ชจ์—ฌ ๋ฌผ์ฒด๋ฅผ ๊ตฌ์„ฑํ•˜๊ฒŒ ๋˜๊ณ  ์ด๊ฒƒ๋“ค์„ ํ•˜๋‚˜์”ฉ ๊ทธ๋ ค์ฃผ๋Š” ๊ฒƒ์ด ๊ฒฐ๊ตญ ๊ทธ๋ž˜ํ”ฝ์˜ ์›๋ฆฌ์ด๋‹ค.

  • ์ด๋Ÿฐ ์‚ผ๊ฐํ˜•์˜ ์ •๋ณด๋ฅผ ๋ชจ์•„๋‘” ๊ฒƒ์„ Mesh๋ผ๊ณ  ํ•œ๋‹ค.

์™œ ์ ์ด ์•„๋‹Œ ์‚ผ๊ฐํ˜•์œผ๋กœ ๋ฌผ์ฒด๋ฅผ ๊ทธ๋ฆด๊นŒ?

  • ์ ์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋ฌผ์ฒด๋ฅผ ๊ฐ€๊นŒ์ด์„œ ๋ณด๋Š” ๊ฒฝ์šฐ ์ ๋“ค์ด ํผ์ง€๊ฒŒ ๋˜๋ฉด์„œ ๋ฌผ์ฒด์˜ ๋ฐ€๋„๊ฐ€ ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค.

  • But ์‚ผ๊ฐํ˜•์œผ๋กœ ๋ฌผ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์˜์—ญ์„ ์„ค์ •ํ•œ ๋‹ค์Œ ์‚ผ๊ฐํ˜• ๋‚ด๋ถ€์— ํ”ฝ์…€์˜ ๊ณ„์ˆ˜๋ฅผ ๊ตฌํ•˜๊ณ  ๊ฐ๊ฐ ์น ํ•ด์ฃผ๊ฒŒ ๋œ๋‹ค๋ฉด ์ •๋ฐ€ํ•˜๊ฒŒ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

  • ์‚ผ๊ฐํ˜•์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์˜์—ญ์„ ์น ํ•ด์ฃผ๋Š” ๊ฒƒ์„ ํ”ฝ์…€ํ™”(Rasterization) ๋ผ๊ณ  ํ•œ๋‹ค.

์‚ผ๊ฐํ˜•์— ๋Œ€ํ•œ ์ˆ˜ํ•™์€ ์„ธ๊ฐœ์˜ ์ ๊ณผ ๊ฐ ์ ์— ๋Œ€์‘๋˜๋Š” ๊ณ„์ˆ˜๋“ค๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

  • ์ด ๊ณ„์ˆ˜๋“ค์€ 0~1์˜ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง„๋‹ค.

  • ์–ด๋–ค ์ ์ด 1์ด๋ผ๋ฉด ๋‚˜๋จธ์ง€๋Š” ๋ฌด์กฐ๊ฑด 0์ด ๋˜์–ด์•ผ ํ•œ๋‹ค.

  • ์ฆ‰, ์„ธ ๊ฐœ์˜ ์ ์„ ๊ฐ€์ง€๊ณ  ๋ฐฉ์ •์‹์„ ํ†ตํ•ด ๋งŒ๋“ค์–ด์ง„ ์ƒˆ๋กœ์šด ์ ์€ ์‚ผ๊ฐํ˜•์„ ๊ตฌ์„ฑํ•˜๋Š” ์„ธ ์  ์ค‘ ์–ด๋””์— ๊ฐ€๊นŒ์šด์ง€ ๊ทธ ๋น„์ค‘์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

  • ๋งŒ์•ฝ ๋ชจ๋“  ๊ณ„์ˆ˜์˜ ๊ฐ’์ด 1/3 ์ด๋ผ๋ฉด ๋งŒ๋“ค์–ด์ง„ ์ ์€ ์‚ผ๊ฐํ˜•์˜ ์ •์ค‘์•™์— ์œ„์น˜ํ•˜๊ฒŒ ๋œ๋‹ค.

  • ์ด ๊ณ„์ˆ˜๋“ค์„ ๋ชจ์•„ ์ขŒํ‘œ๋ฅผ ๋งŒ๋“ ๊ฒƒ์ด ๋ฌด๊ฒŒ์ค‘์‹ฌ์ขŒํ‘œ(Barycentric coordinate)๋ผ ํ•œ๋‹ค.

    • ์‚ผ๊ฐํ˜•์˜ ๋ฌด๊ฒŒ์ค‘์‹ฌ ์ขŒํ‘œ๋ฅผ ์ด์šฉํ•ด ํ”ฝ์…€์˜ ์ƒ‰์ƒ์„ ๊ฒฐ์ •ํ•  ๋•Œ ๊ฐ ์ ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ˜ผํ•ฉํ•ด์„œ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

    • ์‚ผ๊ฐํ˜•์˜ ํ…์Šค์ณ๋ฅผ ์˜ค๋ ค ๋ถ™์ผ ๋•Œ์—๋„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์ขŒํ‘œ๋ฅผ UV ์ขŒํ‘œ๋ผ ํ•œ๋‹ค.

  • ์‚ผ๊ฐํ˜•์„ ๊ตฌ์„ฑํ•˜๋Š” ์„ธ ์ ์— ์ƒ‰์ƒ์ด๋‚˜ UV ์ •๋ณด๋“ค์„ ๋„ฃ์–ด์„œ ์‚ผ๊ฐํ˜• ๋‚ด๋ถ€๋ฅผ ์น ํ•˜๋Š” ๋‹ค์–‘ํ•œ ํšจ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด ๋‚ผ ์ˆ˜ ์žˆ๋‹ค

  • ์‚ผ๊ฐํ˜•์„ ๊ตฌ์„ฑํ•˜๋Š” ์„ธ ์ ์—๋‹ค๊ฐ€ Color, UV, Normal, tangent ๋“ฑ ๋ถ€๊ฐ€์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์€ ๊ฐ๊ฐ์˜ ์ตœ์ข…์ ์ธ ์ ์˜ ๋ฐ์ดํ„ฐ ๋ฌถ์Œ์„ ์ •์ (Vertex)์ด๋ผ ํ•œ๋‹ค.

ํ•˜๋‚˜์˜ ๋ฌผ์ฒด๋ฅผ ํ™”๋ฉด์— ๊ทธ๋ ค๋‚ด๋Š” ๊ณผ์ • ์š”์•ฝ

  1. ๋ฌผ์ฒด๋ฅผ ์„ธ ๊ฐœ์˜ ์ •์ ์œผ๋กœ ๊ตฌ์„ฑ๋œ ์‚ผ๊ฐํ˜•์œผ๋กœ ๋ถ„๋ฆฌ

  2. ๋ถ„๋ฆฌ๋œ ์‚ผ๊ฐํ˜•์„ ๊ฐ๊ฐ ๊ทธ๋ ค์„œ ํ™”๋ฉด์„ ์ฑ„์šด๋‹ค.

  • ์ด ๊ณผ์ •์€ ์ •ํ˜•ํ™” ๋˜์–ด์žˆ๊ธฐ ๋–„๋ฌธ์— ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค. (๊ทธ๋ž˜ํ”ฝ์นด๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ)

  • ์ด ๊ณผ์ •์—์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ปค์Šคํ…€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•˜๋Š” ํ•จ์ˆ˜ ์ •์  ์…ฐ์ด๋”, ํ”ฝ์…€ ์…ฐ์ด๋”๊ฐ€ ์žˆ๋‹ค.

1. ์ •์  ์…ฐ์ด๋”(Vertex Shader)

  • ์‚ผ๊ฐํ˜•์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ ์ •์ ์˜ ์ตœ์ข… ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ํ•จ์ˆ˜

2. ํ”ฝ์…€ ์…ฐ์ด๋”(Pixel Shader)

  • ์‚ผ๊ฐํ˜• ๋‚ด๋ถ€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ ํ”ฝ์…€์˜ ์ตœ์ข… ์ƒ‰์ƒ์„ ๊ฒฐ์ •ํ•˜๋Š” ํ•จ์ˆ˜

ํšŒ์ „์˜ ์ˆ˜ํ•™ (์‚ผ๊ฐํ•จ์ˆ˜์™€ ํšŒ์ „ํ–‰๋ ฌ)

์‚ผ๊ฐํ•จ์ˆ˜

  • ๊ธฐ์ค€ ์œ„์น˜์—์„œ ์–ผ๋งˆ๋งŒํผ์˜ ๊ฐ์„ ์ด์šฉํ•ด์„œ ํšŒ์ „ํ–ˆ๋Š”์ง€๋ฅผ ํšŒ์ „ํ•œ ๊ฐ’๊ณผ ๋ฐ˜์ง€๋ฆ„์„ ์‚ฌ์šฉํ•ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋‹จ์œ„ ์›์˜ ๋ฐ˜์ง€๋ฆ„์˜ ํฌ๊ธฐ๊ฐ€ 1 ์ด๋ผ๋ฉด ์›์ƒ์˜ ์œ„์น˜ํ•œ ํ•œ ์ ์— ๋Œ€ํ•ด ์‚ผ๊ฐํ•จ์ˆ˜๋กœ ํ‘œํ˜„์„ ํ•˜๋ฉด sin(ฮธ) โ†’ ๋†’์ด, cos(ฮธ) โ†’ ๋ฐ‘๋ณ€์ด ๋œ๋‹ค.

์‚ผ๊ฐ๋น„

  • ๋†’์ด๋น—๋ณ€\frac{๋†’์ด}{๋น—๋ณ€} ๋ฐ‘๋ณ€๋น—๋ณ€\frac{๋ฐ‘๋ณ€}{๋น—๋ณ€}๋†’์ด๋ฐ‘๋ณ€\frac{๋†’์ด}{๋ฐ‘๋ณ€} ์‚ผ๊ฐ๋น„์˜ 3๊ฐ€์ง€ ์ข…๋ฅ˜

  • ์ด๋Ÿฌํ•œ ๋น„์œจ์„ ์›์œผ๋กœ ํ™•์žฅํ•ด์„œ ํ•จ์ˆ˜๋กœ ํ‘œํ˜„ํ•œ๊ฒƒ์ด ์‚ผ๊ฐํ•จ์ˆ˜์ด๋‹ค.

    sin(ฮธ) => ๋†’์ด๋น—๋ณ€\frac{๋†’์ด}{๋น—๋ณ€}

    cos(ฮธ) => ๋ฐ‘๋ณ€๋น—๋ณ€\frac{๋ฐ‘๋ณ€}{๋น—๋ณ€}

    tan(ฮธ) => ๋†’์ด๋ฐ‘๋ณ€\frac{๋†’์ด}{๋ฐ‘๋ณ€}

Last updated