1. 程式人生 > 其它 >計算機速成課 第二十七集 3D 圖形

計算機速成課 第二十七集 3D 圖形

1. 引言

3D 世界中,點的座標不再是兩個點,而是三個點,X, Y, Z

2. 3D 投影:

  • 概念:通過圖形演算法,把3D座標「拍平」顯示到2D螢幕上
  • 分類
    • 正交投影:立方體的各個邊,在投影中互相平行
    • 透視投射:在真實 3D 世界中,平行線段會在遠處收斂於一點,就像遠處的馬路匯聚到一點
    • 網格:一堆多邊形的集合。網格越密,表面越光滑,細節越多
    • 三角形:更常用因為能定義唯一的平面

3. 線框渲染 Wireframe Rendering

所有的點從 3D 轉成 2D 後,就可以用畫 2D 線段的函式,來連線這些點。

4. 掃描線渲染 Scanline Rendering

  • 是一種演算法名稱
  • 作用:填充圖形
  • 1967 年誕生於猶他州大學
  • 填充的速度叫 fillrate (填充速率)

5. 抗鋸齒:

  • 定義:減輕鋸齒的方法
  • 原理:如果畫素在多邊形內部,就直接塗顏色;如果多邊形劃過畫素,顏色就淺一些,這種邊緣羽化的效果,看著更舒服些
  • 使用場景:字型、圖表等

6. 遮擋 Occlusion

  • 在 3D 場景中,多邊形到處都是,但是隻有一部分能看見,因為其他的被擋住了。
  • 原理:使用畫家演算法
    • 是什麼:使用排序演算法,從遠到近排列,然後從遠到近渲染

7. 深度緩衝 Z-Buffering

  • 特點:可以記錄場景中每一個畫素和攝像機的距離

8. Z Fighting 錯誤

兩個多邊形或者多個多邊形距離都一樣的時候,不確定哪一個會畫上面。多邊形會在記憶體中移來移去,訪問順序會不斷變化;另外,計算浮點數有舍入誤差。所以哪一個畫在上面,往往是不可預測的,導致出現 Z-fighting 效果

9. 背面剔除 Back-Face Culling

  • 3D 遊戲中的一個優化
  • 解釋:遊戲角色的頭部或地面,只能看到朝外的一面,為了節省處理時間,會忽略多邊形背面,減了一半多邊形面數

10. 明暗處理

  • 解釋:在 3D 場景中,物體表面應該有明暗變化
  • 表面法線:多邊形面對的方向
  • 平面著色:
    • 最基本的照明演算法
    • 多邊形的邊界非常明顯,看起來不夠光滑
  • 高洛德著色
    • 特點;不只用一種顏色給整個多邊形上色,而是以巧妙的方式改變顏色,得到更好的效果

11. 紋理 Textures

  • 在圖形學中指外觀,而不是手感
  • 演算法:紋理對映
    • 在多邊形中,查詢紋理,從相應區域取平均顏色,並填充多邊形,重複這個過程,就可以獲得紋理

小結:

再大的場景,過程都是一樣的,一遍又一遍,處理所有多邊形。掃描線填充,抗鋸齒,光照,紋理化。

12. 如何加速渲染

  • 為這種特定運算,做專門的硬體來加快速度
  • 把 3D 場景分解成多個小部分,然後並行渲染,而不是按順序渲染

13. 圖形處理單元 GPU

  • 計算機工程師為圖形做的專門處理器
  • 位置:在顯示卡上,周圍有專用的 RAM
  • 所有網格和紋理都在GPU中,讓GPU的多個核心可以高速訪問