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