計算機速成課 第二十七集 3D 圖形
阿新 • • 發佈:2022-05-15
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的多個核心可以高速訪問