Rendering Pipeline
π« Q
- κ·Έλν½μ€ API μ΄ν΄: OpenGL, DirectX, Vulkan λ±μ κ·Έλν½μ€ APIμ λν κΉμ μ΄ν΄.
- 3D μν: 벑ν°, νλ ¬, νν°λμΈ λ±μ μ¬μ©ν 3D λ³νκ³Ό κ΄λ ¨λ μνμ μ΄ν΄.
- λ λλ§ κΈ°μ : 리μΌνμ λ λλ§, λ μ΄ νΈλ μ΄μ±, ν¬μ€νΈ νλ‘μΈμ± λ±μ κΈ°μ μ λν μ§μ.
- νΌν¬λ¨Όμ€ μ΅μ ν: κ·Έλν½μ€ μ±λ₯μ λΆμνκ³ μ΅μ ννλ λ₯λ ₯.
- κ·Έλν½ apiλ₯Ό μ°λ건 taκ° μ μμμΌνλ μμμ΄κ³
- ν΄λΌμͺ½μ 3dλ¬Όμ²΄κ° 2dμ’νλ‘ μ΄λ»κ² λ λλ§ λλ κ³Όμ νκ³ cpuμ μΌμ gpuκ° μ΄λ»κ² μ²λ¦¬νκ³ μλ€ μ λ μλ©΄ λλκ±°μ§
π« Rendering Pipeline
κ·Όλ³Έμ μΌλ‘ μμ΄λμ μμμ μλ βκ·Έλν½ μν°μ€νΈλ€μ΄ μνλ 3Dμ μ§κ°μ μμ λ‘κ² μ μ΄νλλ‘ νμβ λΌλ κ²μ΄ λͺ©ν μ»΄ν¨ν° κ·Έλν½μ€ (Computer Graphics) λ λλ§ νμ΄νλΌμΈ (Rendering Pipeline : λ λλ§ μμ) μ΄κ²μ μ΄ν΄νλ©° μμ΄λμ μ μ νλ¦μ μκ² λκ³ , μ¬λ¬ κ°μ§ λ°μν μ μλ λ¬Έμ μ ν΄κ²°, μ΅μ νμλ λμμ΄ λ©λλ€
𫧠μ€λΈμ νΈ λ°μ΄ν° λ°μμ€κΈ°
GPUλ λ²ν
μ€ (Vertex : μ μ ) λ‘ μ΄λ£¨μ΄μ§ 물체μ λ°μ΄ν° κ°μ λ°μμ΅λλ€.
μμ§ νλ©΄μλ μ무κ²λ μ‘΄μ¬νμ§ μκ³ , κ·Έλν½ μΉ΄λ λ΄λΆμ κ°μΌλ‘λ§ μ‘΄μ¬νλ λ°μ΄ν°μΌ λΏμ
λλ€.
(μλ°ν λ§νλ©΄, μμ§μΌλ‘ λμ΄κ°λ κ²μ λ²ν
μ€ λ°μ΄ν° λΏμ΄λ€. βλ©΄κΉμ§ μμ±λ λͺ¨λΈλ§β λͺ¨μ΅μΌλ‘ 3D λͺ¨λΈλ§ λ°μ΄ν°κ° λμ΄κ°λ κ²μ΄ μλλ€.)
λ²ν
μ€λ μΈλ±μ€ λλ² (Index number), ν¬μ§μ
(Position), λ
Έλ© (Normal), μ»¬λ¬ (Color) λ±μ μ 보λ₯Ό κ°μ§κ³ μλ€.
GPUλ λ²ν
μ€μ μ 보λ€μ κ°μ§κ³ λ²ν
μ€λ€μ΄ μ΄μ΄μ§ μΌκ°ν λ©΄μ μμ±νκ² λ κ²μ
λλ€.
μ€λΈμ νΈμ κΈ°λ³Έμ μΈ ννκ° κ°μΆμ΄μ‘κ³ , μ΄ μ 보λ€μ λ²ν
μ€ μμ΄λλ‘ λκΈΈ μ€λΉκ° λμμ΅λλ€.
𫧠λ²ν μ€ μμ΄λ (μ μ μμ΄λ)
μ΄ λ°μ΄ν°λ₯Ό κ°μ§κ³ 본격μ μΈ μμ΄λ© μμ
μ΄ κ°λλκΈ° μμν©λλ€.
μ΄ μμ΄λμμλ λ°μ΄ν°λ₯Ό κ°μ§κ³ μ’ν λ³νμ νκ² λ©λλ€.
μ΄ λκ° κ·Έλν½ μν°μ€νΈλ€μ΄ μ²μμΌλ‘ μμ΄λλ₯Ό μ μ΄νλ λ°μ΄ν°μ μ κ·Όνκ² λλ κ²
κ°μ’
λ²ν
μ€ μ°μ°μ μμ λ‘κ² μ‘°μ ν μ μκ² λ©λλ€.
2.1
λ²ν
μ€μ μμΉ κ°μ νμ¬ λ‘컬 (Local) μ’νκ³ μνμ
λλ€.
λ‘컬 μ’νκ³λ λ¬Όμ²΄κ° κ°μ§κ³ μλ βμκΈ°μ€μ¬μ μΈβ μμΉ κ°μ μλ―Έν©λλ€.
μ€λΈμ νΈ λ³λ‘ κ°μ§κ³ μλ λ³ΈμΈμ νΌλ΄μ΄ 0, 0, 0 μμΉ κ° (μ€μ¬κ°)μΈ μνμ
λλ€.
μ¬κΈ°μμλ κ²μ μμ μ‘΄μ¬ν μ μλ λ€λ₯Έ μ€λΈμ νΈμ μμΉλ μ ν κ³ λ €λμ§ μμμ΅λλ€.
μ¦ λͺ¨λ μ€λΈμ νΈλ€μ μκΈ°κ° μΈμμ μ€μ¬μΈ μνμ
λλ€.
νμ¬ μΉ΄λ©λΌκ° μμ΄μ κ·Έλ΄ μΌμ μκ² μ§λ§, λ§μ½ κ·Έλ¦Όλλ‘ λͺ¨λν°μ μ¬λ¬ μ€λΈμ νΈλ€μ΄ μΆλ ₯λλ€λ©΄ λ§μΉ κ·Έλ¦Όμ²λΌ μλ‘ ν κ³³μ λμ μμ±λμ΄ μν¨ λͺ¨μ΅μΌ κ²μ
λλ€. μλνλ©΄, λͺ¨λ μ€λΈμ νΈλ€μ μμ μ΄ μΈκ³μ μ€μ¬μ΄λ©°, μμ μ΄ μλ κ³³μ΄ μμ (0, 0, 0)μ΄λΌκ³ μκ°νκΈ° λλ¬Έμ
λλ€.
μ λν°μμλ μ΄ λ‘컬 (Local) μ’νκ³λ₯Ό μ€λΈμ νΈ (Object) μ’νκ³λΌκ³ λ λΆλ¦
λλ€.
2.2
μ΄μ μ¬κΈ°μ βμλ λ³ν νλ ¬(μλ μ’νκ³)(맀νΈλ¦μ€ : Martrix)β μ κ³±ν΄μ€μΌλ‘μ¨, λ‘컬 μ’νκ³λ₯Ό μλ μ’νκ³λ‘ λ³νν΄μ€λλ€.
μλ μ’νκ³λ, μ λ μ’νμΈ μλ μ’νκ³μ μμΉλ‘λΆν° κ° λ¬Όμ²΄μ μλμ μμΉ κ°μ μλ―Έν©λλ€.
μλ μ’νκ³μμλ μ€μ μ΄ μλμ μ€μ¬μ μ΄ 0, 0, 0μ΄λ©°, λ€λ₯Έ 물체λ€μ μ¬κΈ°μ μΌλ§λ λ¨μ΄μ Έ μλμ§λ‘ ννλ©λλ€.
μ¬κΈ°μ κ° μ€λΈμ νΈλ€μ λ μ΄μ μκΈ°κ° μΈμμ μ€μ¬μ΄ μλλ κ²μ μκ² λ©λλ€.
μ λν°μμλ μ΄ μλ (World) μ’νκ³λ₯Ό `λͺ¨λΈ(Model)βμ΄λΌκ³ λΆλ¦
λλ€.
κ·Έλ μ§λ§ μ¬μ ν μΉ΄λ©λΌκ° μκΈ° λλ¬Έμ νλ©΄μ μΆλ ₯ν μ μλ μνμ
λλ€.
λ¨Έλ¦Ώμμμλ§ μ‘΄μ¬νλ€κ³ μκ°νλ©΄ λ©λλ€.
2.3
μλ νλ ¬λ‘ λ³νλ 물체λ€μ μ΄μ μ΄ μλμ μμΉ κ°μ κ°μ§κ² λμμ΅λλ€.
κ·Έλ¬λ μ¬κΈ°μ μμ§ κ³ λ €λμ§ μμ κ²μ΄ μλλ°, λ°λ‘ βμΉ΄λ©λΌβ μ
λλ€.
μλμ μ‘΄μ¬νλ κ²μ μκ² μ§λ§, μΉ΄λ©λΌκ° μμΌλ©΄ νλ©΄μ λ³΄μΌ μ μμ΅λλ€.
κ·Έλμ μλ μ’νκ³μ λ²ν
μ€λ€μ μ΄μ λ€μ βμΉ΄λ©λΌ νλ ¬β λ‘ κ³±ν΄μ μλ μ’νκ³μμ μ΄κ³ μλ μ€λΈμ νΈμ λ²ν
μ€ μμΉ κ°λ€μ΄ μΉ΄λ©λΌμ μ€μ¬μ μΌλ‘λΆν°μ μλμ κ±°λ¦¬λ‘ λ€μ μ°μ°λ©λλ€.
μ¦, μ΄ μΈκ³μμλ μΉ΄λ©λΌμ μ€μ¬μ μ΄ 0, 0, 0μ΄λ©°, λ€λ₯Έ 물체λ€μ μ¬κΈ°μμ μΌλ§λ μλμ μΌλ‘ λ¨μ΄μ Έ μλμ§λ‘ ννλ©λλ€.
λλμ΄ λ¬Όμ²΄λ€μ νλ©΄μ λ³Ό μ μκ² λμμ§λ§, μκ·Όκ°μ κ³ λ €λμ΄ μμ§ μμ΅λλ€.
μΉ΄λ©λΌ νλ ¬μ βλ·° (View)βλΌκ³ λΆλ¦¬λ©°, μ€μκ·Έλν½ νλ‘μ μ
(Orthographic Projection) μ΄λΌ λΆλ¦¬κΈ°λ ν©λλ€.
κ·Έλ¦¬κ³ μ΄ μμ λΆν° λͺ¨λν°μ μΆλ ₯νλ κ²μ΄ κ°λ₯ν μνκ° λ©λλ€. μΉ΄λ©λΌκ° μμΌλ λ§μ
λλ€.
γ΄(λ¬Όλ‘ μΆλ ₯μ μν΄μλ ν½μ
μμ΄λκΉμ§ μμκ° μ§νλμ΄μΌ ν©λλ€.)
2.4
μ΄λ κ² μΉ΄λ©λΌ νλ ¬λ‘ μ λ ¬λ λ²ν
μ€λ€μ, λ€μ νλ² βνλ‘μ μ
(Projection) νλ ¬βλ‘ κ³±ν΄μ§λλ€.
γ΄ (μ΄ κ²½μ°λ νΌμ€νν°λΈ (Perspective) νλ‘μ μ
μΌ κ²½μ°μ μΌμ΄λλ μμμ΄κ³ , μ€μκ·Έλν½ νλ‘μ μ
λ±μ κ²½μ°μμλ μΌμ΄λμ§ μλ μμμ
λλ€. νΌμ€νν°λΈ νλ‘μ μ
μ μ¬μ©νλ κ²μ΄ μΌλ°μ μ΄λ―λ‘ μ΄λ κ² μ€λͺ
νμμ΅λλ€. )
βνλ‘μ μ
νλ ¬β μ΄λ μκ·Όκ°μ λΆμ¬ν΄μ£ΌκΈ° μν λ°©λ²μΌλ‘, μΉ΄λ©λΌμμ λ¨Ό κ³³μ μ’νμ§ κ²μ²λΌ λ²ν
μ€ μμΉλ₯Ό μ‘°μ ν΄μ£Όλ κ²μ
λλ€. μ¬μ€μμΌλ‘ μΉ΄λ©λΌμμ λ©μλ‘ ν¬κΈ°κ° μμμ§λ λ¬Όμ²΄κ° λκ² μ§μ.
κ·Έλ¦¬κ³ λλμ΄ μ°λ¦¬κ° νν λ³Ό μ μλ λ·°μ λͺ¨μ΅μ΄ λμμ΅λλ€.
2.FIN
μ¬κΈ°κΉμ§μ μμ μ κ·Έλλ‘ λͺ¨λν°μ μΆλ ₯νλ€λ©΄ μ¬μ ν ν μ€μ³λ μμλ μλ, λ§ κ·Έλλ‘μ ν΄λ¦¬κ³€ λ©μ΄λ¦¬κ° μμ±λ©λλ€. νλ©΄μ μ°ν μ μλ μ€λΉλ λμμ§λ§, μ΄ μ€λΈμ νΈλ μμ§ ν½μ μμ΄λλ₯Ό κ±°μΉμ§ μμκΈ° λλ¬Έμ κ²°κ³Όμ μΌλ‘ μ°λ¦¬κ° λͺ¨λν°λ‘ λ³Ό μλ μλ λ¨μ§ 3D 곡κ°μμ μ‘΄μ¬νλ μ€λΈμ νΈμΌ λΏμ λλ€. γ΄ [λ¬Όλ‘ , μ΄ λ²ν μ€ μμ΄λ λ¨κ³μμ λΌμ΄νΈ (Light : μ‘°λͺ )λ₯Ό μ°μ°νλ©΄ βλ²ν μ€ λΌμ΄νΈβ λΌλ λ§€μ° κ°λ³κ³ λΆμ νν λΌμ΄νΈκ° μ°μ°λ μ μκΈ΄ ν©λλ€. μ΄ κΈ°λ² μ€ κ°μ₯ μ λͺ ν κ²μ κ³ λΌμ°λ μμ΄λ© (Gouraud Shading) μ΄λΌλ κ²μ΄ μμΌλ©° κ²°κ³Όλ¬Όμ 44p κ·Έλ¦Όκ³Ό κ°μ΅λλ€.]
𫧠λμ€νΈλΌμ΄μ Έ (Rasterizer)
γ΄ [μ΅κ·Ό Direct-Xμμλ μ¬κΈ°μ μ¬λ¬ κ°μ§μ μμ΄λκ° μΆκ°λ‘ λ€μ΄κ°λλ€. λ²ν μ€ μμ΄λμ ν½μ μμ΄λμ μ€κ°μ μμΉνλ μ΄ μμ΄λλ ν μμ΄λ (Hull Shader), ν μ Έλ μ΄ν° (Tessellator), λλ©μΈ μμ΄λ (Domain Shader), μ§μ€λ©νΈλ¦¬ μμ΄λ (Geometry Shader), μ»΄ν¨νΈ μμ΄λ (Compute Shader) λ±μ΄ μμ΅λλ€. νμ§λ§ μ΄ μ± μ μν°μ€νΈλ₯Ό μν μ± μ΄λ―λ‘, μΌλ¨ λ€μ΄λ νΈX 9 μ λμ κΈ°μ΄μ μΈ μμ€μΌλ‘ λ€λ£¨μμ΅λλ€.] μ΄μ¨λ μ°λ¦¬λ μ΄λ κ² μ’νκ³κ° μ‘°μ λ λ²ν μ€λ₯Ό μ΄μ©ν΄μ νλ©΄μ μ€λΈμ νΈλ₯Ό μΆλ ₯ν μ€λΉκ° λμμ΅λλ€. μ΄λ²μλ λͺ¨λν°μ μ΄ μ€λΈμ νΈλ₯Ό μΆλ ₯ν΄μ€ κ²μ λλ€. κ·Έλμ μ΄ μ€λΈμ ν°κ° λͺ¨λν°μμ ννλ λ μ΄λ ν½μ λ‘ ννλ κ²μΈμ§λ₯Ό λνλ΄λ μ₯μΉλ₯Ό κ±°μΉκ² λλλ° μ΄κ±Έμ λμ€ν°λΌμ΄μ Έ(Rasterizer)λΌ λΆλ₯΄λ©°, 2D ν½μ λ‘ ννλλ μΈκ³λ‘ λμ΄μ€κ² λ©λλ€.
μ΄μ 3D μ€λΈμ νΈλ λͺ¨λν°μ 보μ΄λλ‘ βν½μ (Pixel)βμ΄ λμκ³ μ΄ κ³Όμ μ βλμ€ν°νβλΌκ³ ν©λλ€. 3Dλ‘ μλ βμκ³ μβμ 촬μνλ μκ° κ·Έ μκ³ μμ 2D μ΄λ―Έμ§κ° λλ―μ΄, 3D μ΄λ―Έμ§κ° 2D μ΄λ―Έμ§κ° λλ μκ°μ λλ€. λͺ¨λν°μ 보μ΄λ €λ©΄ 2D μ΄λ―Έμ§λ‘ λ§λ€μ΄μΌ νλ λ§μ λλ€. γ΄ ( μ΄ λͺ¨λ μμ μ΄ λ§€ νλ μλ§λ€ μΌμ΄λλ κ²μ λλ€, )
μ΄λ κ² μνμ μΈ κ°μ κ³΅κ° μμμ μ μ²΄λ‘ λ λλ μ€λΈμ νΈλ ν½μ μ΄ λκ³ , λλμ΄ ν½μ μμ΄λμμ μ΄ ν½μ μ μ κ·Όν μ μκ² λμμ΅λλ€.
𫧠ν½μ μμ΄λ (Pixel Shader) / νλ κ·Έλ¨ΌνΈ μμ΄λ (Fragment Shader)
μ΄λ κ² λͺ¨λν°κΉμ§ λμ΄μ¨ 3D κ·Έλν½ λ°μ΄ν°λ 본격μ μΌλ‘ νλ©΄μ ν½μ λ‘ μ°νκ² λ©λλ€. λ¬Όλ‘ μμ§ ν μ€μ³λ μκ³ λΌμ΄ν λ μλ μνμ λλ€. γ΄ (λ²ν μ€ μμ΄ν° λ¨κ³μμ λΌμ΄ν μ μ°μ°νμ§ μμλ€λ©΄ λ§μ λλ€.) μ΄μ μ¬κΈ°μμ ν½μ μμ΄λκ° κ°λλλ©΄μ μ‘°λͺ κ³Ό ν μ€μ³, κ·Έλ¦Όμμ κ°μ’ νΉμν¨κ³Ό λ±μ μ°μ°νκ² λλ κ²μ λλ€.
κ·Έλ¬λ―λ‘ μ΄ νλ‘μΈμ€λ₯Ό μμ° κ°λ΅νκ² μ λ¦¬ν΄ λ³΄λ©΄ λ€μκ³Ό κ°μ΅λλ€. λ¬Όλ‘ μ€μ λ λλ§ νλ‘μΈμ€κ° μ΄λ κ² κ°λ΅νμ§ μμ΅λλ€λ§, κ·Έλν½ μν°μ€νΈ μ μ₯μμλ μ°μ μ¬κΈ°κΉμ§λ§ μμλμ΄λ ν° λμμ΄ λ κ²μ λλ€. μ μ λ°μ΄ν° => [GPU (λ²ν μ€ μ °μ΄λ - μ μ μ’ν λ³ν) = μ μ μμΉ > (λ μ€ν°λΌμ΄μ ) = ν½μ μμΉ > (ν½μ μ °μ΄λ - ν½μ μμκ²°μ )] => ν½μ μμ=
λ€λ μμ λ λλ§ νμ΄νλΌμΈ 곡λΆκ°
λ‘컬 λ·° - μλ λ·° - μΉ΄λ©λΌ λ·° μ ν κ³Όμ ?
κ·Έλ¦Όμ λ§λ€κΈ°?
μ °μ΄λμμ μ μ μ΄λ ν½μ κ³μ°. ex) μ μ μ °μ΄λμμ λͺ¨λΈ μ΄λ»κ² λ§λ€κ³ , νλ©΄μ λμ°κΈ° μ μ ν½μ λ§λ€ κΉμ΄ κ°μκ±° μ겨μ λ Έλ© λ§΅ν νλκ±°.
λμΆ© μ΄λ° κ²λ€ μ΄ν΄νλ©΄ λ λλ§ νμ΄ν λΌμΈ μΌμΆ μ΄ν΄νλ€κ³ μκ°νλ©΄ λ¨?
λ€ μ’νκ³κ° κ³μ λ³νλλ° κ·Έ λͺ μΉλ€μ΄λ μννλ μμ λ€ μλ©΄λ κΊΌκ°μμ λμ°¨μ’νκ³λ νΌμ€νν°λΈ λλ°μ΄λμ ν xyzwκ°μ΄ λμ§ μλκ² μ€μνλ―