---
title: TA技術名詞
---
```
/==============================================================================\
|| ||
|| ______ ______ ______ __ __ __ __ __ ______ ______ __ ||
|| /\__ _/\ ___\/\ ___\/\ \_\ \/\ "-.\ \/\ \/\ ___\/\ __ \/\ \ ||
|| \/_/\ \\ \ __\\ \ \___\ \ __ \ \ \-. \ \ \ \ \___\ \ __ \ \ \____ ||
|| \ \_\\ \_____\ \_____\ \_\ \_\ \_\\"\_\ \_\ \_____\ \_\ \_\ \_____\ ||
|| \/_/ \/_____/\/_____/\/_/\/_/\/_/ \/_/\/_/\/_____/\/_/\/_/\/_____/ ||
|| ||
|| ______ ______ ______ __ ______ ______ ||
|| /\ __ \/\ == /\__ _/\ \/\ ___\/\__ _\ ||
|| \ \ __ \ \ __\/_/\ \\ \ \ \___ \/_/\ \/ ||
|| \ \_\ \_\ \_\ \_\\ \_\\ \_\/\_____\ \ \_\ ||
|| \/_/\/_/\/_/ /_/ \/_/ \/_/\/_____/ \/_/ ||
|| ||
\==============================================================================/
```
# 技術名詞知識庫
遊戲常會用到的技術名詞與基礎知識學習的小文件。
作者本人也還在學習,資料來源或知識點不正確的地方歡迎指正。
## 坐標系 Coordinate System
常見坐標系
1. 笛卡爾座標系
2. 極座標系
3. 圓柱坐標系
4. 球座標系
5. 齊次座標系
### 笛卡爾座標系 Cartesian
***:bulb:3D軟體中最被廣泛使用的坐標系統,以 X , Y 二軸為基礎,向三維延伸 Z軸***
### 極座標系 Polar
***:bulb:以笛卡爾坐標系為基礎 (x, y) 加上夾角 ( θ ) 來判斷點的特定位置。***
### 圓柱坐標系 Cylindrical
***:bulb:以極坐標系為基礎,向 **Z** 軸延伸的三維坐標系統,通過逕向距離、方位角和高度來描述位置,表示為 ( ρ , φ , z )***
### 球坐標系 Spherical
***:bulb:以極坐標系為基礎,向 **Z** 軸延伸的三維坐標系統,通過逕向距離、方位角和高度來描述位置,表示為 ( ρ , θ , φ )***
### 齊次座標系 Homogeneous
***:bulb:齊次坐標系是一種用於投影幾何的坐標系統,是一個可以將電腦中的3D世界投影在螢幕上的關鍵技術 ( 實現透視 )。例外可以將 TRS ( Translate, Rotate, Scale ) 的數值變換組合成單一矩陣,在處理大量點或複雜變換序列時能顯著減少計算量。***
## 模型 Model
### 頂點 Vertex
組成一個模型的各種屬性,以最基礎的: 點、線、面為基礎來組成一個polygon (polygon最小單位是三角形)
:bulb: ***Vertex 一個點***
通常在各種軟體下具有以下屬性:
**位置**
在空間中表示位置的2D或3D座標。
**顏色**
通常是漫反射或鏡面反射的RGB值,用來表示表面顏色或預先計算好的光照資訊。
**反射率**
頂點處表面的反射性質,例如鏡面反射指數、金屬度、菲涅耳值等。
**材質座標**
也稱為UV座標,用來控制表面的材質貼圖,可能包含多層貼圖。
**法線向量**
這些向量定義了頂點位置上的曲面方向,用於光照計算(如Phong著色)、法線貼圖或置換貼圖,也用來控制細分曲面。
**切線向量**
這些向量也定義了頂點處的曲面方向,同樣用於光照計算、法線貼圖、置換貼圖及細分控制。
**骨骼權重**
用於分配至骨骼的權重,控制骨架動畫中的變形。
**混合形狀(Blend shapes)**
可指定多組位置向量,並在時間上進行混合,常用於臉部動畫。
### 幾何邊 Edge
:bulb: ***連接兩個頂點的線段,是構成多邊形的基本元素。***
- **有向邊**:具有方向性的邊,用於定義多邊形的內外側和法線方向。
- **共享邊**:被兩個相鄰面共用的邊,在網格拓撲中用來維持連續性。
- **邊界邊**:只屬於一個面的邊,通常位於模型的邊緣或洞口處。
### 幾何面 Face
:bulb: ***由三個或多個邊圍成的封閉平面區域,是3D模型表面的基本單位。***
- **三角面 (Triangle)**:最簡單且穩定的面,保證為平面,是GPU渲染的標準單位。
- **四邊面 (Quad)**:四個頂點構成的面,建模時常用,但渲染前會被分解成三角面。
- **法線向量**:垂直於面的向量,決定面的朝向,用於光照計算和背面剔除。
### 幾何形 Polygon
:bulb: ***由多個邊圍成的封閉幾何圖形,是3D建模的基礎構成單位。***
- **三角形 (Triangles)**:最穩定的多邊形,永遠是平面,是即時渲染的標準格式。
- **四邊形 (Quads)**:建模時的主流選擇,便於編輯和細分,但需轉換為三角形才能渲染。
- **N-gons**:超過四個頂點的多邊形,可能不是平面,容易產生著色和變形問題,應避免使用。
### 網格 Mesh
:bulb: ***由頂點、邊和面組成的三維幾何結構,是3D物體的數學表示方式。***
- **頂點數據**:包含位置、法線、UV座標、顏色等屬性資訊。
- **拓撲結構**:定義頂點如何連接形成邊和面的關係網絡。
- **邊界完整性**:良好的網格應該是封閉的,沒有洞洞或重疊面。
### 蒙皮模型 SkinnedMesh
:bulb: ***綁定到骨骼系統的網格模型,能夠透過骨骼動畫產生自然的變形效果。***
- **骨骼權重**:每個頂點對不同骨骼的影響程度,決定變形的平滑度。
- **綁定姿勢**:模型與骨骼建立關聯時的初始狀態,作為變形計算的基準。
- **即時變形**:遊戲引擎中由GPU即時計算頂點位置,實現流暢的角色動畫。
---
### UV映射
:bulb: ***UV映射是在三維建模中將2D圖像投影到3D表面以進行紋理映射的過程。字母U和V用來表示紋理貼圖上的坐標軸***
UV就像是將一個盒子攤平後在上面畫圖,以此讓立體的圖形上面有顏色與圖案
拆UV就是將立體形攤平的過程
## 路徑 Paths
### 路徑 Path
:bulb: _**在2D或3D空間中定義運動軌跡的一系列點或曲線。**_ 路徑廣泛應用於:
- **相機動畫**:引導相機沿著預定路線飛行。
- **角色或物體移動**:讓角色沿著設定好的路徑巡邏,或讓飛彈沿著軌跡飛行。
- **程序化生成**:作為生成道路、河流或牆壁的基礎。
### 曲線 Curve
:bulb: _**一條不完全是直線的線條,由數學公式定義。**_ 曲線是路徑的基礎組成部分,讓運動和形狀更加平滑自然。
### Linear Line 曲線
:bulb: _**連接兩個點的最簡單形式——直線。**_ 在兩點之間進行均勻、無變化的過渡。在動畫中表現為勻速運動。
### Bezier Line 貝茲曲線
:bulb: _**一種由一系列「控制點」定義的參數曲線,在計算機圖形學中被廣泛用於創建平滑、可控的曲線。**_
- **起點和終點**:曲線的頭尾。
- **控制點(Handles)**:不一定在曲線上,但像磁鐵一樣「拉動」曲線,決定其形狀和弧度。
- **階數**:
- **二次貝茲曲線**:由3個點定義(起點、1個控制點、終點)。
- **三次貝茲曲線**:由4個點定義(起點、2個控制點、終點),這是最常用的一種,提供了豐富的造型能力。
貝茲曲線是繪圖軟體(如Illustrator)、3D建模軟體和動畫工具中編輯曲線和路徑的標準工具。
## 骨架綁定和動畫 Animation & Rigging
### 綁定 Rig
:bulb: _**為3D模型創建一個數位骨架(Skeleton)和一套控制系統的過程。**_ Rig 不僅僅是骨骼,它是一個完整的系統,讓動畫師可以高效地操縱模型。一個好的Rig包含:
- **骨骼/關節(Bones/Joints)**:構成骨架的基本單位,定義了模型的運動樞紐。
- **控制器(Controls)**:動畫師實際操作的對象(通常是曲線圖形),用來間接驅動骨骼,避免直接選取骨骼的麻煩。
- **約束(Constraints)**:定義物件之間關係的規則,實現複雜的連動,如IK、父子關係等。
- **客製化屬性**:在控制器上添加的自訂參數,用於控制如「握拳」、「微笑」等複雜姿態。
### 權重 Skin
:bulb: _**也稱為蒙皮(Skinning)或權重繪製(Weight Painting),是將模型的網格(Mesh)「附加」到骨架上的過程。**_ 這個過程決定了當骨骼移動時,模型的表面如何變形。
- **權重值(Weight Value)**:每個頂點(Vertex)都可以被一個或多個骨骼影響。權重值(0到1之間)定義了某根骨骼對該頂點的影響程度。
- **例如**:肘部的頂點可能同時受到50%上臂骨和50%下臂骨的影響,這樣在彎曲手臂時,變形會更加平滑自然。如果權重分配不當,會導致穿模、扭曲等問題。
### 歐拉角 EulerAngle
:bulb: _**一種在三維空間中表示物體方向(Orientation)的方法,它使用三個獨立的旋轉角度值。**_ 這三個角度通常是圍繞物體的局部X、Y、Z軸進行的旋轉,例如 `(Pitch, Yaw, Roll)`。
- **優點**:直觀,容易理解和使用。三個數字就能定義一個旋轉。
- **缺點**:存在 **萬向節死鎖(Gimbal Lock)** 問題。在特定的旋轉順序下,當第二個旋轉軸旋轉90度時,會導致第一個和第三個旋轉軸對齊,從而失去一個旋轉自由度。這會讓動畫師無法做出預期的旋轉,導致動畫出現突然的翻轉或卡頓。
為了解決萬向節死鎖,現代動畫和遊戲引擎通常在內部使用 **四元數(Quaternion)** 來處理旋轉計算,只在需要向用戶顯示時才轉換為歐拉角。
### TCB-splines ( Tension, Continuity, Bias )
:bulb: _**一種由 Kochanek-Bartels 提出的樣條曲線,允許動畫師透過三個直觀的參數——張力(Tension)、連續性(Continuity)和偏移(Bias)——來微調關鍵幀之間的插值動畫,而無需直接操作複雜的切線。**_
- **張力 (Tension)**:控制曲線的「鬆緊」程度。高張力會讓曲線變得更尖銳、更緊繃,趨向於直線;低張力則會讓曲線更圓滑、更鬆弛。
- **連續性 (Continuity)**:控制曲線在經過關鍵幀時的「平滑度」。調整此參數可以讓轉角處產生尖角或平滑過渡。
- **偏移 (Bias)**:控制曲線在關鍵幀前後的「走向趨勢」。可以用來產生動畫的「預備」(undershooting)或「過衝」(overshooting)效果,讓動態更具節奏感。
### 萬向節死鎖 Gimbal Lock
:bulb: _**使用歐拉角(Euler Angles)進行旋轉時,因特定旋轉順序導致其中一個旋轉軸與另一個軸重疊,從而失去一個旋轉自由度的現象。**_ 這會讓動畫在特定角度下無法正常旋轉,產生突然的翻轉或卡頓。
- **發生原因**:當中間的旋轉軸(例如Y軸)旋轉了90度時,會導致第一個(X軸)和第三個(Z軸)旋轉軸對齊在同一個平面上。
- **後果**:動畫師會感覺「鎖住」了,無法單獨控制某個軸向的旋轉,導致動畫路徑出錯。
- **解決方案**:現代3D軟體在內部計算旋轉時,普遍使用 **四元數(Quaternion)** 來完全避免萬向節死鎖的問題。
### 動畫循環 Loop
:bulb: _**讓一段動畫的結尾無縫銜接到開頭,從而可以無限次重複播放,常用於製作待機、行走、跑步等持續性動作。**_
- **製作關鍵**:確保動畫的第一幀和最後一幀的姿勢、位置和狀態完全相同,或能夠平滑過渡。
- **應用場景**:
- **角色動畫**:角色的待機呼吸、行走、跑步循環。
- **環境動畫**:飄動的旗幟、流動的水、旋轉的風扇。
- **UI動畫**:加載中的旋轉圖標。
### 動態混和 Motion Blend
:bulb: _**一種將多個獨立的動畫片段(Animation Clips)平滑地結合起來,以創造出更自然、更多樣化的角色動作的技術。**_ 這是現代遊戲引擎中實現角色流暢運動的核心功能。
#### 一維動態混和 1D Blend
:bulb: _**根據單一參數(如速度)來混合兩個或多個動畫。**_
- **範例**:將「走路」和「跑步」動畫混合。當速度參數為0時,角色播放走路動畫;當速度為1時,播放跑步動畫;當速度為0.5時,則播放一個混合了走路和跑步的中間姿態。
#### 二維動態混和 2D Blend
:bulb: _**根據兩個獨立的參數(如速度和方向)來混合多個動畫,通常用於更複雜的運動控制。**_
- **範例**:使用一個二維混合空間(Blend Space),X軸代表方向(-1為左,1為右),Y軸代表速度(0為站立,1為跑步)。這樣就可以混合「向前走」、「向後走」、「向左跑」、「向右跑」等多個動畫,讓角色在任意方向上都能流暢地移動。
### 動畫重新指定 Animation Retargeting
:bulb: _**將一套為特定骨架(Source)製作的動畫,應用到另一個不同體型、不同比例的骨架(Target)上的過程。**_ 這項技術可以大幅節省為每個角色單獨製作動畫的時間和成本。
- **核心原理**:通過 **骨架映射(Skeleton Mapping)**,建立兩個骨架之間骨骼的對應關係,並在播放時自動調整動畫數據,以適應目標骨架的比例。
- **應用場景**:
- 將同一套「走路」動畫應用於男性、女性、怪物等多個不同角色。
- 將動作捕捉(Motion Capture)數據應用到3D角色上。
### 烘焙動畫 Bake Animation
:bulb: _**將程序化、有約束或由物理模擬生成的複雜動畫,轉換為在時間軸上每一幀都擁有關鍵幀(Keyframe)的過程。**_ 就像把需要複雜計算的蛋糕配方「烘焙」成一個可以直接食用的實體蛋糕。
- **目的**:
- **相容性**:消除對特定約束或模擬器的依賴,方便將動畫導出到不同的軟體或遊戲引擎(如Unity, Unreal Engine)。
- **效能**:將複雜的即時計算轉換為簡單的關鍵幀數據,能大幅提升播放時的效能。
- **穩定性**:將物理模擬等不確定性的結果固定下來,確保每次播放的動畫都完全一致。
### 動畫狀態機 Animation State Machine
:bulb: _**一個用來管理和控制角色在不同動畫狀態(如待機、走路、跳躍)之間如何轉換的視覺化流程圖。**_ 它是遊戲中實現複雜但清晰的角色動畫邏輯的核心工具。
- **狀態(State)**:代表一個具體的動作,如「攻擊」或「防禦」,通常對應一個動畫片段。
- **轉換(Transition)**:定義從一個狀態切換到另一個狀態的「規則」和「條件」。例如,當玩家按下「攻擊」按鈕時,角色就從「待機」狀態轉換到「攻擊」狀態。
- **優點**:將複雜的動畫邏輯視覺化,讓開發者可以直觀地設計、管理和調試角色的行為,而不需要編寫大量的程式碼。
## 約束 Constraints
### 位置約束 Position Constraint
:bulb: _**將一個物件(被約束者)的位置「鎖定」到另一個或多個物件(目標)上。**_ 當目標移動時,被約束者會自動跟隨其位置變化,從而簡化複雜的連動動畫。
- **應用場景**:
- **角色綁定**:讓角色的手精確地握住武器,無論武器如何移動。
- **物件互動**:讓一個物體(如杯子)始終保持在另一個物體(如托盤)的表面上。
- **攝影機跟隨**:讓攝影機自動跟隨主角移動。
### 旋轉約束 Orientation Constraint
:bulb: _**將一個物件(被約束者)的旋轉方向「鎖定」到另一個或多個物件(目標)上。**_ 當目標旋轉時,被約束者會自動跟隨其方向變化,常用於處理關節和機械連動。
- **應用場景**:
- **角色綁定**:讓角色的腳踝隨著腳步控制器正確地旋轉。
- **機械動畫**:製作多個齒輪之間精確的連動旋轉。
- **道具互動**:確保角色手中的道具(如槍、手電筒)始終朝向正確的方向。
### 路徑約束 Path Constraint
:bulb: _**將一個物件的運動軌跡約束在一條預先定義好的曲線(Path)上。**_ 這就像讓火車沿著固定的軌道行駛,是製作平滑且可控的運動路徑的關鍵工具。
- **應用場景**:
- **相機動畫**:製作電影般的運鏡,讓相機沿著設定好的路線飛行或環繞。
- **物體運動**:讓車輛沿著公路行駛,或讓飛彈沿著預設的彈道飛行。
- **角色動畫**:讓角色沿著指定的路線巡邏或移動。
### 瞄準約束 LookAt ( Aim )
:bulb: _**自動調整一個物件的旋轉,使其始終「注視」或「瞄準」另一個目標物件。**_ 這是實現自動追蹤和角色眼神控制的常用工具。
- **應用場景**:
- **角色動畫**:讓角色的眼睛或頭部始終跟隨一個目標(如一個飛過的物體),讓角色表現得更生動。
- **機械動畫**:控制監視器、砲塔或聚光燈,使其能自動追蹤目標。
- **遊戲玩法**:在遊戲中實現敵人的自動瞄準功能。
## 燈光類型 Type of lights
### 方向性光源 Directional Light
:bulb: _**一種模擬無限遠處光源(如太陽)的光源類型,其所有光線都以平行的方向傳播,且光照強度不會隨距離衰減。**_
- **特性**:
- **位置無關**:光源在場景中的位置不影響光照效果,只有旋轉(方向)才重要。
- **均勻光照**:為整個場景提供均勻、一致的光照和陰影方向。
- **應用場景**:最常用於模擬戶外環境的陽光或月光,是大型開放世界場景的基礎光源。
### 點光源 Point Light
:bulb: _**模擬從空間中一個點向所有方向均勻發射光線的光源,類似於現實生活中的燈泡。**_
- **特性**:
- **全向性**:光線向四面八方發射,因此光源的旋轉不影響光照效果。
- **距離衰減**:光照強度會隨著與光源距離的增加而減弱,離得越遠,照得越暗。
- **應用場景**:常用於模擬燈泡、蠟燭、火把、魔法特效等局部照明效果。
### 區域光 Area Light
:bulb: _**一種模擬具有實際面積和形狀(如矩形、圓形)的光源,而非一個無限小的點。**_ 這是產生柔和、逼真陰影的關鍵。
- **特性**:
- **柔和陰影**:由於光源有面積,物體無法完全將其遮擋,因此會在陰影邊緣產生自然的柔和過渡效果(半影)。光源面積越大,陰影越柔和。
- **物理真實感**:能更準確地模擬現實世界的光源,如窗戶、天花板燈具或攝影棚的柔光箱。
- **應用場景**:常用於室內場景、建築視覺化和產品渲染,以達到高度真實的光照效果。
### 環境光 Ambient Light
:bulb: _**一種基礎光照模型,用於模擬那些並非來自特定方向,而是均勻散佈在整個場景中的非直射光線。**_ 它的作用是確保場景中沒有任何物體是完全黑暗的。
- **特性**:
- **無方向性**:均勻地照亮場景中的所有物體,無論其表面朝向何方。
- **奠定基調**:為整個場景提供一個基礎亮度,並可透過調整其顏色來營造整體氛圍(如微弱的藍光模擬夜晚)。
- **應用場景**:幾乎用於所有3D場景中,以避免陰影區域過於黑暗,讓畫面看起來更自然。它通常與其他光源結合使用。
### 全局光照 GI (Global Illumination)
:bulb: _**一組模擬光線在3D場景中多次反射、折射等行為的演算法,旨在創造更逼真的光照效果。**_ 它不僅考慮直接光照,還模擬間接光照,使場景更具真實感。
- **特性**:
- **柔和陰影**:產生更自然、柔和的陰影邊緣。
- **色彩滲透**:光線從有顏色的物體表面反射後,會將該顏色「染」到周圍的物體上。
- **間接照明**:即使沒有被光源直接照射的區域,也會因為環境中反彈的光線而被照亮,避免死黑。
- **應用場景**:廣泛應用於電影、動畫、建築視覺化和現代遊戲中,以提升畫面的真實感和沉浸感。
## 特效 VFX
### 粒子 Particle
:bulb: ***模擬大量微小物體行為的視覺效果系統,用於創造火焰、煙霧、雨雪等自然現象。***
- **粒子發射器 (Emitter)**:定義粒子產生的位置、方向、數量和頻率的控制器。
- **生命週期**:每個粒子從產生到消失的時間,期間可改變大小、顏色、透明度等屬性。
- **物理模擬**:包含重力、風力、碰撞等物理效果,讓粒子運動更加真實自然。
- **渲染優化**:通常使用廣告牌技術和實例化渲染來提升大量粒子的繪製效能。
## 物理 Physics
### 碰撞 ( 行為 ) Collision
:bulb: _**指兩個碰撞器(Collider)在物理引擎中發生接觸或重疊的「事件」。**_ 當碰撞發生時,物理引擎會觸發對應的腳本函式(如OnCollisionEnter),讓開發者可以編寫後續的邏輯,例如扣血、播放音效或產生特效。
### 碰撞器 Collider
:bulb: _**附加在遊戲物件上的一個隱形幾何形狀,用來定義該物件的物理邊界,是物理引擎進行碰撞偵測的基礎。**_ 它的形狀可以很簡單(如方塊、球體),也可以很複雜(如與模型完全一致的網格碰撞器)。
### 關節點 Joint
:bulb: _**一種物理組件,用來將兩個剛體(Rigidbody)連接在一起,並限制它們之間的相對運動,就像人體的關節一樣。**_ 透過不同類型的關節(如鉸鏈、彈簧),可以創造出門、鏈條、吊橋等複雜的物理結構。
### 剛體 Rigid Body
:bulb: _**賦予遊戲物件物理屬性(如質量、阻力)的組件,使其能夠接受物理引擎的控制。**_ 一旦物件擁有了剛體,它就會受到重力影響,並能透過施加力(Force)來移動,表現出真實的物理行為。
### 布娃娃系統 Ragdoll physics
:bulb: _**一種程序化動畫技術,透過將角色模型的多個部分分別綁定到一套由剛體(Rigidbody)和關節(Joint)組成的骨架上,來模擬逼真的「布偶」效果。**_ 當角色死亡或被擊飛時,動畫會從預設動作切換到物理模擬,產生自然倒下或翻滾的動態效果。
## 材質與貼圖 Texture maps
### 凹凸貼圖, 法線貼圖 Bump Map, Normal Map
:bulb: _**兩者都是在不增加模型多邊形數量的前提下,為物體表面創造凹凸細節的技術,但原理不同。**_
- **凹凸貼圖 (Bump Map)**:使用灰階圖像儲存高度資訊。它在渲染時「欺騙」光照計算,讓表面看起來有起伏,但實際上並沒有改變模型的幾何形狀,因此在物體輪廓處會失效。
- **法線貼圖 (Normal Map)**:使用RGB圖像直接儲存每個像素的法線向量方向。它能提供更精確、更豐富的光影細節,是現代遊戲中製造表面細節的主流技術。
### 噪點 Noise
:bulb: _**指一系列透過演算法產生的偽隨機圖案,常用來為特效和材質增添自然、不重複的細節。**_ 著名的噪點演算法如柏林噪點(Perlin Noise)和單純形噪點(Simplex Noise),被廣泛應用於製作雲霧、火焰、水面、地形紋理等程序化內容。
### 貼圖覆蓋 Decal
:bulb: _**一種將一個獨立的紋理「投射」或「貼」在另一個物體表面上的技術,就像貼紙一樣。**_ 它允許在不修改物體基礎材質的情況下,添加額外的細節,例如牆上的彈孔、地面的血跡、塗鴉或標誌。
### 立方體貼圖 Cubemap
:bulb: _**一種由六張正方形貼圖組成的特殊紋理,這六張圖分別對應一個立方體的六個面,用來捕捉和呈現一個點周圍的360度環境。**_ 主要應用於:
- **天空盒 (Skybox)**:模擬無限遠的背景,如天空、宇宙或遠景。
- **環境反射 (Environment Mapping)**:為金屬、玻璃等光滑物體提供逼真的環境反射效果。
### 材質捕捉貼圖 MatCap
:bulb: _**材質捕獲(Material Capture)的簡稱,是一種快速的著色技巧,它將一張預先渲染好的球形材質貼圖,根據模型表面相對於攝影機的角度直接映射上去。**_ 這種方法可以非常高效地模擬出複雜的光照和材質效果(如金屬、玉石),常用於3D雕刻軟體中的快速預覽,或在效能有限的設備上實現風格化渲染。
### 環境光遮蔽 Ambient Occlusion
:bulb: _**一種模擬間接光照下「接觸陰影」的著色技術,用來計算模型上每個點被周圍幾何體遮擋的程度。**_ 它可以有效地加深縫隙、角落和物體接觸處的陰影,讓光影細節更豐富,大幅提升模型的立體感和真實感。
### 貼圖紋理 Texture
:bulb: _**一張被應用於3D模型表面的2D圖像,用來提供顏色、圖案、細節和材質屬性。**_ 透過UV映射,可以將這張平面圖像「包裹」在立體的模型上,賦予其豐富的視覺外觀。
## 貼圖壓縮 Texture compression
### DXT
:bulb: _**也稱為 S3 Texture Compression (S3TC) 或區塊壓縮 (Block Compression, BC),是一系列專為 GPU 設計的有損貼圖壓縮演算法。**_ 它將貼圖分割成 4x4 像素的區塊進行壓縮,廣泛應用於PC平台。
- **BC1 (DXT1)**:壓縮 RGB 或 1-bit Alpha 貼圖。
- **BC3 (DXT5)**:支援平滑的 Alpha 色版。
- **BC7**:提供更高品質的壓縮,但檔案稍大。
- **優點**:解壓縮速度極快,硬體支援廣泛 (PC)。
- **缺點**:在行動裝置上並非通用標準。
### ETC
:bulb: _**Ericsson Texture Compression,專為行動裝置設計的貼圖壓縮標準,是 OpenGL ES 的一部分。**_
- **ETC1**:只支援 RGB 貼圖,不支援 Alpha 色版。是早期安卓設備的標準格式。
- **優點**:在支援的行動裝置上硬體解壓縮效率高。
- **缺點**:不支援透明度,品質相對基礎。
### ETC2
:bulb: _**ETC1 的後續版本,作為 OpenGL ES 3.0 標準的一部分,並向下相容 ETC1。**_
- **主要改進**:增加了對 RGBA 貼圖的完整支援,並提供了更高品質的壓縮選項。
- **應用**:是現代大多數 Android 設備的標準壓縮格式。
### ASTC
:bulb: _**Adaptive Scalable Texture Compression,由 ARM 和 AMD 開發的次世代貼圖壓縮技術,被視為目前最靈活、最高效的格式。**_
- **核心特性「可變區塊大小」**:允許開發者根據需求在 4x4 到 12x12 的區塊大小之間自由選擇,從而在壓縮率和視覺品質之間做出精確的權衡。
- **優點**:
- 極高的靈活性與壓縮率。
- 品質優於舊格式。
- 已被現代所有主流平台(包含 PC 與行動裝置)的 GPU 廣泛支援。
### RTX Neural Texture
:bulb: _**這是一項基於神經網路(AI)的次世代貼圖壓縮技術,目前更多是作為技術展示,如NVIDIA的實時神經紋理壓縮(NTC)。**_
- **原理**:利用神經網路模型,以極高的壓縮率壓縮紋理數據,並在解壓縮時由專用硬體(如RTX GPU的Tensor Cores)實時重建細節。
- **目標**:在大幅縮減高解析度紋理儲存空間的同時,維持極高的視覺保真度,為未來更精細的遊戲世界提供可能性。
## 光照系統 Lighting systems
### 基於圖片的光照 Image-based lighting
:bulb: _**一種使用環境貼圖(通常是Cubemap或球形貼圖)來為3D場景提供光照的技術。**_ IBL會從這張貼圖中提取資訊,模擬出極其逼真的環境光、間接光照和反射效果。這使得即使沒有放置傳統光源,物體也能自然地融入周圍環境中,是實現PBR渲染真實感的關鍵技術之一。
### 基於物理的渲染 Physically Based Rendering
:bulb: _**一套旨在透過模擬真實世界的光照物理學,來實現逼真、可信畫面的著色和渲染方法論。**_ PBR的核心思想不是單一的特定演算法,而是遵循幾個關鍵原則:
- **能量守恆**:物體反射的光量不能超過它接收到的光量。
- **金屬/非金屬工作流**:將材質明確地區分為金屬(導體)和非金屬(電介質),它們的光學屬性截然不同。
- **微表面理論**:所有表面都有微小的凹凸不平(粗糙度),這會影響光線反射的模糊或銳利程度。
- **菲涅爾效應**:視角越是掠過表面(掠射角),其反射率就越高。
### 雙向反射分佈函數 BRDF
:bulb: _**Bidirectional Reflectance Distribution Function,是PBR(基於物理的渲染)中的核心數學函數。**_ 它精確地描述了光線從一個方向射入,然後從另一個方向射出時,在物體表面上是如何反射的。一個典型的PBR BRDF(如Cook-Torrance模型)由三個主要部分組成:
- **法線分佈函數 (D)**:描述微觀表面法線的朝向分佈。
- **幾何函數 (G)**:描述微觀表面因自我遮擋而產生的光線衰減。
- **菲涅爾方程 (F)**:描述在不同視角下表面的反射率。
### 布林 馮 光照模型 Blinn-Phong Shading
:bulb: _**對傳統馮氏光照模型的改良與優化。**_ 它不使用「反射向量」,而是引入了一個「半向量」(Halfway Vector,即光線方向與視角方向的中間向量)。透過計算表面法線與半向量的夾角來生成高光,這種方法在計算上更為高效,並且能產生更柔和、更寬的高光,避免了馮氏模型在某些掠射角度下可能出現的瑕疵。
### 馮 光照模型 Phong shading
:bulb: _**一種早期的、非物理基礎的光照模型,主要用於產生清晰的鏡面高光(Specular Highlight)。**_ 它通過計算「視線方向」和「光線完美反射方向」之間的夾角來決定高光的強度。雖然在視覺上能產生不錯的效果,但它不遵循能量守恆等物理規律,在許多情況下會產生不自然的塑膠感。
### 卡通渲染 Cel Shading / Toon Shading
:bulb: _**一種非擬真渲染(Non-Photorealistic Rendering, NPR)技術,旨在模仿手繪動畫或漫畫的視覺風格。**_ 它的核心是將連續平滑的光照色階「量化」成幾個離散的硬邊色塊,從而消除柔和的陰影過渡,創造出扁平、簡潔的卡通感。通常還會結合輪廓線描邊來增強效果。
## 渲染與著色方法 Render & Shading
### 渲染流水線 Rendering Pipeline
:bulb: ***指 GPU 將 3D 場景數據(如模型、材質、燈光)轉換為最終在螢幕上顯示的 2D 影像的一系列處理階段。*** 這個過程像一條工廠流水線,每個階段都有專門的任務,大致可分為:
- **應用階段 (Application Stage)**:由 CPU 處理,準備好幾何數據、材質、紋理等,並將其發送給 GPU。
- **幾何階段 (Geometry Stage)**:在 GPU 上執行,包括頂點著色、細分、幾何著色等,處理模型的形狀和位置。
- **光柵化階段 (Rasterization Stage)**:將 3D 的幾何圖元(如三角形)轉換為螢幕上的像素片段(Fragments)。
- **片段/像素階段 (Fragment/Pixel Stage)**:對每個像素片段進行著色計算(如光照、紋理採樣),並進行深度測試、混合等操作,最終輸出像素顏色。
### HLSL, GLSL, Cg
:bulb: ***三種主流的用於編寫著色器(Shader)的高階程式語言,讓開發者可以自訂渲染流水線中的可程式化階段。***
- **HLSL (High-Level Shading Language)**:由微軟開發,主要用於 DirectX 圖形 API,是 Windows 和 Xbox 平台的標準。
- **GLSL (OpenGL Shading Language)**:由 Khronos Group 管理,用於 OpenGL 和 Vulkan 圖形 API,是跨平台(包括 Windows, macOS, Linux, Android, iOS)的標準。
- **Cg (C for Graphics)**:由 NVIDIA 開發,旨在成為一種跨平台、跨 API 的語言,語法與 HLSL 非常相似。雖然它曾被廣泛使用,但現在已基本被 GLSL 和 HLSL 取代。
### 頂點函式 Vertex Function
:bulb: ***渲染流水線中「幾何階段」的第一個可程式化部分,也稱為頂點著色器(Vertex Shader)。*** 它會對從 CPU 傳來的每一個頂點(Vertex)執行一次。
- **核心任務**:
- **坐標變換**:將模型的局部坐標(Local Space)依次轉換到世界坐標(World Space)、視圖坐標(View Space),最終轉換為裁剪坐標(Clip Space),以確定頂點在螢幕上的位置。
- **傳遞數據**:將頂點的屬性(如 UV 坐標、法線、顏色)處理後,傳遞給後續的片段著色器。
### 片段函式 Fragment Function (Pixel Function)
:bulb: ***渲染流水線中「片段/像素階段」的可程式化部分,也稱為片段著色器(Fragment Shader)或像素著色器(Pixel Shader)。*** 它會為光柵化後產生的每一個「片段」(可以理解為潛在的像素)執行一次。
- **核心任務**:
- **計算最終顏色**:根據從頂點著色器傳來的內插數據(如紋理UV、法線、顏色),進行紋理採樣、光照計算、霧效混合等操作,最終決定該像素在螢幕上顯示的顏色。
- **深度與模板寫入**:可以修改片段的深度值(Z-depth),或執行 `discard` 指令來直接拋棄該片段,實現透明物件的剔除等效果。
### 材質 Material
:bulb: ***一種將著色器(Shader)與其所需參數(如紋理、顏色、數值)結合起來的資源。*** 材質定義了一個物體表面的具體外觀。一個著色器可以被多個不同的材質使用,每個材質都可以設定自己獨特的參數,從而用同一套著色器邏輯創造出千變萬化的視覺效果(如木頭、金屬、塑膠等)。
### 細分曲面 Tessellation
:bulb: ***一項在 GPU 上動態地將低多邊形網格(Low-Poly Mesh)細分成更多、更小的三角形的技術,用以在不增加原始模型複雜度的情況下,生成平滑、高細節的曲面。***
- **運作方式**:它在渲染流水線的「幾何階段」中運作,包含三個部分:
- **外殼著色器 (Hull Shader)**:決定要將一個面細分成多少塊。
- **細分器 (Tessellator)**:根據外殼著色器的指令,實際生成新的頂點。
- **域著色器 (Domain Shader)**:計算新生成頂點的最終位置,通常會結合置換貼圖(Displacement Map)來添加真實的幾何細節。
- **應用**:常用於製作平滑的角色模型、細緻的地形和需要動態改變細節層次的物體。
### 霧 Fog
:bulb: ***一種模擬大氣霧或霾效果的圖形技術,透過將遠處物體的顏色與指定的「霧色」進行混合,來營造場景的深度感和氛圍。*** 物體距離攝影機越遠,其顏色受霧的影響就越大。這不僅能提升畫面的真實感,也是一種常用的優化手段,可以用來隱藏遠景的渲染裁切邊界。
### 光照貼圖 Lightmap
:bulb: ***一張預先計算並儲存了場景中靜態物體光照資訊的紋理。*** 對於不會移動的物體和光源,它們之間複雜的光照、陰影和全域光照(GI)效果可以被「烘焙」(Bake)到光照貼圖上。在遊戲執行時,引擎只需將物體的基礎紋理與光照貼圖相乘,即可得到逼真的光影效果,極大地降低了即時光照計算的效能開銷。
### 透明與混合 AlphaTest, AlphaBlend, Multiplicative, Additive
:bulb: ***一組用於處理半透明物體或特效的渲染技術。***
- **Alpha 測試 (Alpha Test)**:一種「全有或全無」的剔除方式。它會檢查每個像素的 Alpha 值,如果不符合設定的條件(例如 Alpha 值低於 0.5),該像素就會被完全拋棄,不寫入任何緩衝區。這適用於製作葉片、鐵絲網等具有硬邊緣、不需半透明效果的鏤空物體。
- **Alpha 混合 (Alpha Blend)**:實現「半透明」效果(如玻璃、水)的標準方法。它會根據像素的 Alpha 值,將該像素的顏色與背景顏色進行混合。最常見的混合公式為:`最終顏色 = (來源色 * Alpha) + (背景色 * (1 - Alpha))`。使用此技術通常需要將透明物件由後往前排序渲染,才能得到正確的效果。
- **加法混合 (Additive)**:將來源像素的顏色值直接「疊加」到背景色上,常用於製作火焰、光暈、魔法等發光特效,因為它會使畫面變得更亮。
- **乘法混合 (Multiplicative)**:將來源像素的顏色值與背景色「相乘」,常用於製作汙漬、濾鏡或陰影等需要使畫面變暗的效果。
### 繪製調用 Drawcall , Pass
:bulb: ***Drawcall 是 CPU 向 GPU 發出的一個「繪製指令」,要求 GPU 渲染一批頂點。而 Pass 則是 Shader 中定義的一次完整的渲染流程。***
- **繪製調用 (Draw Call)**:每次 Drawcall 都會帶來一定的 CPU 開銷,因為 CPU 需要準備好數據和渲染狀態(如材質、貼圖、Shader)再通知 GPU。如果場景中的 Drawcall 過多,CPU 可能會成為效能瓶頸。因此,「批次處理(Batching)」等優化技術就是為了將多個小物體的繪製請求合併成單一個 Drawcall。
- **通道 (Pass)**:一個 Shader 可以包含多個 Pass。例如,在 Forward Rendering(前向渲染)中,一個物體可能會在第一個 `ForwardBase` Pass 中繪製主光源和環境光,然後在額外的 `ForwardAdd` Pass 中為每個額外的燈光再繪製一次。每個 Pass 都會產生一次 Drawcall。
### Z深度 Z-depth, Z-test, Z-early
:bulb: ***三個密切相關的深度處理概念,是現代3D渲染中處理物體可見性的核心技術。***
- **Z-depth (Z深度)**:指從攝影機到物體表面的距離值,通常以浮點數或整數形式儲存。這個深度值決定了物體在3D空間中相對於觀察者的遠近關係,是判斷物體遮擋順序的基礎數據。
- **Z-test (深度測試)**:比較新繪製像素的深度值與已儲存深度值的過程。當GPU準備繪製新像素時,會將其深度與深度緩衝區中的現有值比較,只有通過特定條件(如更近)的像素才會被繪製並更新深度值。
- **Z-early (早期深度測試)**:在片段著色器執行前就進行深度測試的優化技術。如果像素註定會被遮擋,GPU可以提早將其剔除,避免執行昂貴的著色計算,大幅提升渲染效能。
### 背面剔除 Face Culling
:bulb: ***一種基礎的渲染優化技術,指示 GPU 不要繪製多邊形的「背面」。*** 一個多邊形有正面和背面,通常由其頂點的環繞順序(順時針或逆時針)決定。在渲染實心物體時(如角色、建築),我們永遠看不到其內部,因此這些朝向內部的背面多邊形可以被安全地剔除,不進入後續的渲染流程。這能輕易地減少場景中近一半需要處理的多邊形數量。
### 渲染隊列 Render Queue
:bulb: ***一個讓開發者可以明確控制物體渲染先後順序的機制。*** 每個材質都可以被指定一個數值,引擎會根據這個數值將物體放入不同的「隊列」中。通常,引擎會先繪製所有不透明物體(如 `Geometry` 隊列),然後再繪製所有透明物體(如 `Transparent` 隊列)。這個機制對於正確處理透明混合效果至關重要,因為透明物體必須在所有不透明物體之後,並以從後往前的順序繪製。
### 渲染排序 Render Sorting
:bulb: ***為了提升效能和保證渲染結果正確,而對繪製指令(Draw Call)進行排序的過程。*** 主要有兩種策略:
- **不透明物體排序 (為效能)**:通常會先按材質或著色器分組,以最小化渲染狀態的切換開銷。在每個組內,再盡可能地「由前到後(Front-to-Back)」排序,以便最大化利用 Early-Z 剔除,減少 Overdraw。
- **透明物體排序 (為正確性)**:必須嚴格地「由後到前(Back-to-Front)」排序。這是因為 Alpha 混合的結果與順序有關,如果不先畫遠處的透明物體,近處的透明物體就無法與其正確地混合。
### 過度繪製 Overdraw
:bulb: ***指在單一畫格的渲染過程中,同一個螢幕像素被重複繪製多次的現象。*** 例如,先畫了一面牆,再畫牆前面的人物,那麼被人物遮擋的牆壁像素就被「過度繪製」了。雖然適度的 Overdraw 無可避免,但過高的 Overdraw(尤其是由多層半透明粒子特效或UI疊加造成)會嚴重消耗 GPU 的記憶體頻寬和填充率,是行動裝置和VR遊戲中常見的效能瓶頸。
## 後處理 Post processing
### 顏色分級 Color Grading
:bulb: ***一個在渲染完成後,對整個畫面進行色彩調整以營造特定藝術風格、情緒或氛圍的過程。*** 它不僅僅是修正顏色(色彩校正),更是透過調整對比度、飽和度、色相和亮度來賦予畫面電影般的質感,例如讓場景呈現溫暖的復古色調或冷冽的科幻風格。
### 色調映射 Tonemapping
:bulb: ***一項將高動態範圍(High Dynamic Range, HDR)的顏色數據,轉換並壓縮到顯示器所能呈現的低動態範圍(Low Dynamic Range, LDR)內的過程。*** HDR 能夠儲存比螢幕亮白更亮、比螢幕純黑更暗的光照資訊。色調映射的任務就是以一種保留最多細節和對比度的方式,將這些「超額」的光影資訊「擠壓」到可視範圍內,避免亮部過曝或暗部細節丟失。
### 泛光 Bloom
:bulb: ***一種模擬現實世界中,明亮光源在攝影機鏡頭上產生的光暈或散射效果的後處理。*** 它會選取畫面中亮度超過某個閾值的區域,將其模糊化後再疊加回原圖上,從而讓強光(如燈泡、太陽、爆炸)看起來更加耀眼、更具氛圍感。
### 動態模糊 Motion Blur
:bulb: ***一種模擬快速移動的物體或攝影機在現實中所產生的模糊拖影效果的技術。*** 它可以極大地增強動畫和運動的流暢感與速度感,讓畫面看起來更自然、更具電影感。動態模糊通常分為兩種:基於物體移動的「物件模糊」和基於攝影機移動的「攝影機模糊」。
### 景深效果 DOF (Depth Of Field)
:bulb: ***一種模擬攝影機鏡頭對焦原理的後處理效果。*** 它會使焦點內的物體保持清晰,而焦點前後的背景或前景則會變得模糊。景深效果不僅能提升畫面的真實感和電影感,還可以用來引導玩家的視線,突出場景中的重要物體。
### 咖馬校正 Gamma Correction
:bulb: ***一種校正數位影像亮度與人眼感知之間差異的技術。*** 電腦螢幕顯示亮度的方式與人眼感知光線的方式不同(螢幕是線性的,人眼是非線性的)。如果沒有 Gamma 校正,渲染出的影像會顯得對比度過高,暗部和亮部細節遺失。此技術透過套用一個 Gamma 函數,將計算機生成的線性顏色空間轉換為人眼能正確感知的顏色空間,確保影像的亮度和對比度看起來自然、正確。
### 螢幕空間環境光遮蔽 SSAO (Screen Space Ambient Occlusion)
:bulb: ***一種在螢幕空間(即最終畫面)中即時計算環境光遮蔽效果的後處理技術。*** 它不依賴場景的完整幾何數據,而是僅使用深度緩衝區(Z-buffer)來估算每個像素被其鄰近像素遮擋的程度。被遮擋越多的地方(如角落、縫隙),就會被疊加更深的陰影。SSAO 能在不需複雜的光照烘焙下,快速地為場景增加豐富的接觸陰影和立體感,但有時會產生不夠精確或有雜訊的瑕疵。
### 反鋸齒 Anti-Alising
:bulb: ***一組用來平滑、消除 3D 物件邊緣和紋理上「鋸齒」的技術。*** 由於螢幕是由方形像素組成的網格,在顯示斜線或曲線時,會在邊緣產生階梯狀的鋸齒瑕疵(Aliasing)。反鋸齒技術透過各種方法(如超取樣、多重取樣、模糊濾鏡等)對這些邊緣進行柔化處理,使其看起來更平滑、更自然。常見的 AA 技術包括:
- **MSAA (Multi-Sample Anti-Aliasing)**:在多邊形邊緣取多個樣本進行顏色混合,效能與品質平衡較好。
- **FXAA (Fast Approximate Anti-Aliasing)**:一種快速的後處理濾鏡,透過模糊化來平滑邊緣,效能開銷小,但會讓畫面整體 slightly blurrier。
- **TXAA/TAA (Temporal Anti-Aliasing)**:結合前一幀的資訊來穩定畫面並減少閃爍,效果更平滑,但可能產生鬼影(Ghosting)。
### 環境光遮蔽 Ambient Occlusion
:bulb: ***一種模擬和加深模型上縫隙、角落和物體接觸處陰影的著色技術,用以增強深度感和真實感。*** 與SSAO不同,此處的AO通常指更高品質、非即時的計算方式,例如:
- **烘焙AO (Baked AO)**:在開發階段預先計算好靜態物體的遮蔽資訊,並存儲在紋理(光照貼圖)或頂點顏色中。這種方法效能極高,品質也最好,但只適用於靜態物體。
- **距離場AO (Distance Field AO)**:利用符號距離場(SDF)來計算遮蔽,能產生比SSAO更準確、更穩定的柔和陰影,且不受螢幕空間限制的影響。
### 暗角效果 暈影 Vignette
:bulb: ***一種在畫面邊緣和角落產生變暗、失飽和效果的後處理技術,用來模仿相機鏡頭的物理瑕疵。*** 這個效果可以有效地將觀眾的視線引導至畫面中心,增強聚焦感,或為場景營造一種特定的復古、窺視或壓抑的氛圍。
### 白平衡 White Balance
:bulb: ***一種調整影像整體色溫的後處理技術,確保畫面中的「白色」物體在不同光照條件下(如暖色調的燭光或冷色調的日光)都能被正確地還原為白色。*** 在遊戲中,白平衡不僅用於色彩校正,更常被用作一種藝術工具,透過故意偏移色溫來為場景營造特定的氛圍,例如用偏藍的冷色調來表現寒冷,或用偏黃的暖色調來表現溫馨。
### 色調分離 Split Toning
:bulb: ***一種為影像的亮部和暗部分別染上不同色調的色彩技術。*** 例如,可以為畫面的陰影區域染上藍色,同時為高光區域染上黃色或橙色。這種方法源於傳統攝影,能創造出豐富、具有電影感的色彩風格,是顏色分級(Color Grading)中常用的一種進階技巧。
### 色差效應 / 色散效應 Chromatic Aberration
:bulb: ***一種模擬真實相機鏡頭因無法將所有顏色的光線聚焦在同一個點上,而在物體邊緣(尤其是高對比區域)產生紅、綠、藍等顏色條紋的後處理效果。*** 這種「鏡頭瑕疵」效果常用來增加畫面的真實感、混亂感或迷幻感,尤其是在表現醉酒、中毒或使用劣質攝像設備的場景中。
## 優化技術 Optimization techniques
### 多層次細節 LOD ( Level of Detail )
:bulb: ***一種核心的遊戲優化技術,它透過為單一物件準備多個不同複雜度(多邊形數量、材質大小)的模型版本,並根據物件與攝影機的距離來動態切換顯示。*** 當物件靠近時,使用最高細節的模型(LOD0);隨著物件遠離,則依序切換到更簡化的模型(LOD1, LOD2...)。這能大幅降低遠處物件的渲染開銷,減少GPU的負擔,從而顯著提升遊戲的整體幀率。
### 光照貼圖 Light Map
:bulb: ***一種將場景中「靜態」物體的光照效果預先計算(烘焙)並儲存到一張紋理上的優化技術。*** 複雜的光照、陰影和全域光照(GI)效果可以被一次性地烘焙成光照貼圖。在遊戲執行時,引擎無需進行昂貴的即時光影計算,只需將物體的基礎紋理與光照貼圖疊加即可,從而以極低的效能開銷實現逼真的靜態場景光影。
### 方向性光照貼圖 Directional Light Map
:bulb: ***一種比傳統光照貼圖更進階的烘焙技術。*** 除了儲存光照的顏色和強度外,它還額外儲存了每個點上「最主要光線的入射方向」。這使得即使是被烘焙的靜態場景,其表面也能對法線貼圖(Normal Mapping)產生正確的凹凸光影反應,並能表現出真實的鏡面高光(Specular),大幅提升了靜態光照的真實感和細節,代價是需要消耗更多的記憶體。
### 光照探針 Light Probe
:bulb: _**一種為動態物件採集間接光照資訊的技術,使其能自然地融入已烘焙的靜態場景。**_ 它解決了動態物件因無法使用光照貼圖而顯得光照效果不協調的問題。
- **運作方式**:在場景中手動或自動地佈置一系列探針點,形成一個體積。在光照烘焙時,每個探針會 360 度地採樣並儲存該點的間接光資訊。
- **內插計算**:遊戲運行時,當動態物件移動到探針構成的體積內,引擎會根據其位置,對周圍最近的幾個探針的採樣結果進行內插補間,計算出一個平滑過渡的、符合當前位置的間接光照效果,並將其應用於動態物件上。
### 反射探針 Reflection Probe
:bulb: _**一種為反射材質(如金屬、鏡面)提供環境反射影像的技術。**_ 它讓物件能夠「映照」出周遭的環境,大幅提升場景的真實感。
- **運作方式**:在場景的關鍵位置放置一個探針,它就像一台 360 度全景相機,會拍攝其所在位置的環境影像,並將結果儲存成一張立方體貼圖(Cubemap)。
- **反射效果**:遊戲運行時,當帶有反射材質的物件進入探針的影響範圍,其著色器就會查詢這張 Cubemap,根據自身的表面角度來計算出應該呈現的環境反射影像。探針可以被設定為靜態烘焙或即時更新。
### 多重處理 / 多工處理 Multi-Processing
:bulb: ***一種平行運算的方法,透過同時執行多個獨立的「行程 (Process)」來達成。*** 每個行程都有自己完全隔離的記憶體空間,這代表它們不能直接共享資料。這種隔離的特性使得多重處理非常穩固,一個行程的崩潰不會影響到其他行程。在遊戲開發中,此技術常用於建置系統(如 Make)或啟動一個獨立的專用伺服器行程。行程間的通訊(IPC)相對複雜,需要透過網路、管道(Pipes)等機制,但其優點是擴展性極強,因為各個行程可以被分配到不同的 CPU 核心,甚至是不同電腦上執行。
### 多執行緒 Multi-thread
:bulb: ***在單一「行程 (Process)」中同時執行多個「執行緒 (Thread)」。*** 同一個行程中的所有執行緒共享相同的記憶體空間,這使得它們之間的資料共享和通訊非常快速、直接。然而,共享記憶體也是最大的挑戰,若沒有使用鎖(Mutexes)等同步工具小心管理,極易引發競態條件(Race Conditions)和死鎖(Deadlocks)等複雜的程式錯誤。在遊戲中,多執行緒常用於將AI、物理模擬、音效等任務與主渲染迴圈分開,在背景並行處理。雖然在單一電腦上效率很高,但執行緒無法被分發到不同電腦上。一個執行緒的崩潰通常會導致整個應用程式(行程)崩潰。
### 遮擋剔除 Occlusion Culling
:bulb: ***一種效能優化技術,用於剔除(不渲染)那些雖然在攝影機視野內,但被其他不透明物件完全遮擋而不可見的物體。*** 與僅剔除攝影機視野外物體的「視錐剔除」不同,遮擋剔除專門處理被遮擋的情況。引擎通常需要透過預先計算(烘焙)來建立可見性數據,在運行時根據攝影機位置快速判斷,從而避免將被遮擋物體的數據提交給 GPU,在室內或建築密集的場景中能顯著降低繪製調用(Draw Call)數量。
### 靜態批次網格 Static batch mesh
:bulb: ***一種透過將多個靜態物件合併成單一巨大網格來減少繪製調用(Draw Call)的優化技術,也稱靜態批次處理(Static Batching)。*** 對於場景中不會移動、旋轉、縮放且使用相同材質的物件,引擎可以在建置時將它們的幾何體組合。如此一來,渲染時CPU只需發出一次繪製指令,極大降低了CPU負擔。但缺點是會增加記憶體使用,因為合併後的網格需要額外儲存。
### 看板(面向鏡頭的平面圖像)Billboard
:bulb: ***一種使用永遠面向攝影機的 2D 圖像來模擬 3D 物件的技術,常用於效能優化或營造特殊藝術風格。*** 其本質是一個帶有紋理的平面,透過程式使其法線方向始終對齊攝影機視線。常見應用於遠處的樹木、植被,或大量的粒子效果(如煙霧、爆炸),以低廉的成本渲染出視覺上可接受的效果。
### 實例化 Instancing
:bulb: ***一種允許 GPU 使用單一繪製調用(Draw Call)來高效繪製大量相同網格副本的渲染技術。*** CPU 只需將模型數據發送一次給 GPU,然後再提供一個包含每個副本(實例)各自變換矩陣(位置、旋轉、縮放)和屬性(如顏色)的列表。GPU 收到指令後會自行高效地完成所有副本的繪製,極大地降低了 CPU 因重複發送指令而產生的效能瓶頸,特別適用於渲染森林、草地、軍隊等場景。
### 圖形處理器實例化 GPU Instancing
:bulb: ***「GPU Instancing」與「實例化(Instancing)」在本質上是同義詞,它更明確地強調了此過程是利用 GPU 的硬體能力來加速完成的。*** 在現代遊戲引擎的脈絡下,提到 Instancing 通常指的就是 GPU Instancing。相較於可以合併不同網格但要求物件完全靜態的「靜態批次」,GPU Instancing 專門處理相同的網格,但允許每個實例是動態的,且可擁有獨立的材質屬性,是渲染大量重複動態物件的首選方案。
### 著色器細節層級 Shader LOD
:bulb: ***一種根據物件與攝影機的距離,動態切換不同複雜度著色器(Shader)的效能優化技術。*** 物件在遠處時,使用計算量較低的簡化版著色器(例如省略高光、視差等效果);在近處時,才切換回效果最完整的版本。此技術能有效降低 GPU 在像素填充和著色計算上的負擔,尤其在有大量物件和複雜光照的場景中效果顯著。
## 程序化技術 Procedural techniques
### 程序化材質 Procedural Texture
:bulb: ***指不依賴預先製作的點陣圖(Bitmap),而是透過數學演算法在執行期(Runtime)即時生成的紋理。***
- **原理**:通常組合使用各種雜訊函數(如 Perlin Noise)、碎形(Fractals)和其他數學公式來創造出複雜的圖樣。因為是基於演算法,所以可以動態調整參數來改變紋理的外觀。
- **優缺點**:優點是佔用極少的儲存空間、可以生成無限解析度的紋理且易於變化;缺點是計算成本可能較高,且要設計出特定的複雜圖案(如人臉)極為困難。
### 遮罩 Mask
:bulb: ***在電腦圖學中,遮罩是一張灰階圖像或單一顏色通道,用於控制效果、紋理或顏色在特定區域的顯示強度。***
- **原理**:遮罩就像一個過濾器。通常,其白色區域代表效果完全可見(強度為1),黑色區域代表完全不可見(強度為0),而灰色區域則代表半透明或部分強度。
- **應用**:常用於混合多層紋理(例如在模型上繪製汙漬或磨損)、限制著色器效果的範圍(例如只讓物體頂部積雪)、或在後處理中定義效果的作用區域。
### 沃羅諾伊圖 Voronoi
:bulb: ***一種將空間劃分為多個區域的演算法,其生成的圖案類似於細胞、裂紋或水晶結構。***
- **原理**:首先在空間中隨機散佈一組「種子點」。對於空間中的任何一個位置,它都屬於離它最近的那個種子點所在的區域。所有這些區域的集合就構成了一張沃羅諾伊圖。
- **應用**:常用於生成各種自然的或程式化的圖案,例如石頭裂紋、細胞組織、破碎的玻璃、水面焦散效果,或用於程式化地圖生成,劃分勢力範圍等。
## 函數系列 Functions
### 球面諧波 SH
:bulb: _**一組在球面上定義的特殊基函數,可視為傅立葉級數在球面上的擴展,常用於高效地表示低頻率的環境光照。**_
- **原理**:它可以將一個完整的環境光照貼圖(Cube Map)壓縮成極少量的係數(例如,二階 SH 只需要 9 個係數)。在渲染時,原本複雜的積分運算可以被簡化為這些係數與物體表面傳輸函數(也是 SH 係數)的點積運算。
- **應用**:主要用於預計算和渲染來自環境的漫反射間接光照(Irradiance),讓動態物件也能接收到逼真的、來自周遭環境的低頻光影,且計算成本極低。
### 雙向反射分佈函數 BRDF
:bulb: _**一個描述光線與不透明物體表面互動方式的數學函數,是物理渲染(PBR)的核心。**_
- **原理**:給定一個入射光方向、一個觀察方向、表面法線及材質屬性(如粗糙度、金屬度),BRDF 會計算出有多少比例的光被反射到觀察方向。一個物理上可信的 BRDF 必須遵守能量守恆與亥姆霍茲互易性。
- **模型**:在即時渲染中,最常用的模型是 Cook-Torrance BRDF,它將反射分為漫反射(Lambertian)與鏡面反射。鏡面反射項由法線分佈函數(D)、幾何函數(G)與菲涅爾方程式(F)三部分組成,共同模擬微表面理論下的光線反射行為。
### 二維簽名距離函數 2D SDF
:bulb: _**一種在 2D 空間中以數學方式隱式定義形狀的函數。**_
- **原理**:輸入一個 2D 點的座標,此函數會回傳該點到某個形狀「最近邊界」的距離。此距離帶有正負號:負值代表點在形狀內部,正值代表在外部,零則代表正在邊界上。
- **應用**:因為形狀由數學定義而非像素,SDF 可以生成無限解析度、無鋸齒的圖形。透過簡單的 `min/max` 運算,可以對不同 SDF 圖形進行聯集、交集、差集等布林操作,程序化地創造出極複雜的圖案。常用於 Shader 中的 UI 渲染、特效製作與高品質字體渲染。
### 三維簽名距離函數 3D SDF
:bulb: _**2D SDF 在三維空間中的擴展,用來隱式定義一個 3D 物件的體積。**_
- **原理**:輸入一個 3D 點的座標,回傳該點到物體「最近表面」的帶符號距離。
- **應用**:是 Ray Marching 渲染技術的基礎,可以高效地渲染出傳統多邊形網格難以表達的複雜幾何體(如碎形)。近年來在神經網路領域,SDF 被用作一種高品質的 3D 形狀表示法,供神經網路學習與生成。
### 佔據場 Occupancy Field
:bulb: _**一種比 SDF 更簡單的隱式形狀表示法,它只判斷一個點是否被物體「佔據」。**_
- **原理**:輸入一個空間點的座標,函數會回傳一個 0 到 1 之間的機率值。值為 1 代表該點確定在物體內部,值為 0 代表在外部,而 0.5 則被視為物體的表面。
- **與 SDF 的區別**:佔據場只回答「在內還是在外?」的問題,而 SDF 不僅回答這個問題,還提供了「距離表面有多遠?」的精確資訊。因此 SDF 包含的幾何細節比佔據場更豐富。
### 神經輻射場 NeRF
:bulb: _**一種利用神經網路來表示整個 3D 場景的技術,以達成高品質的「新視角合成 (Novel View Synthesis)」。**_
- **原理**:NeRF 學習一個 5D 函數,輸入一個 3D 空間座標 `(x,y,z)` 和一個 2D 觀察方向 `(θ,φ)`,輸出該點在該觀察方向下的顏色(RGB)和體積密度(Volume Density)。透過沿著相機光線對這些點進行體積渲染(Volume Rendering),就能合成出高度逼真的影像。
- **與 SDF/佔據場的區別**:NeRF 的主要目標是「外觀」的重建,而非純粹的「幾何」重建。它的幾何是隱含在體積密度中的,像一團有密度的雲,而不是一個明確的表面。
## 其他 Miscellaneous
### 資產 Asset
:bulb: _**指任何可用於遊戲專案中的媒體或資料檔案,是構成遊戲內容的基本單位。**_
- **範例**:3D 模型(.fbx)、貼圖(.png, .tga)、音效檔(.wav, .mp3)、材質、腳本(.cs)、場景檔案等,都是資產。
- **管理**:這些檔案通常儲存在專案的 `Assets` 資料夾中,Unity 編輯器會為它們生成對應的元資料(.meta 檔案)來管理其匯入設定和依賴關係。
### 遊戲物件 GameObject
:bulb: _**Unity 場景中最基本的物件單位,本身是一個空容器,其所有的功能、行為與外觀都由附加其上的「元件 (Component)」來定義。**_
- **核心概念**:GameObject 是場景中所有實體的基礎。一個角色、一盞燈、一台攝影機、一顆石頭,在場景中都是以 GameObject 的形式存在。
- **元件驅動**:一個 GameObject 必須有名為 `Transform` 的元件,用來定義其在世界中的位置、旋轉和縮放。開發者可以透過添加如 `Mesh Renderer`(渲染模型)、`Rigidbody`(物理模擬)、`Audio Source`(音效播放)或自訂腳本等不同元件,來組合出所需的功能。
### 資產包 Asset Bundle
:bulb: _**一種將多個資產壓縮並打包成一個獨立檔案的系統,主要用於動態內容的載入與管理。**_
- **用途**:允許遊戲在執行期從遠端伺服器或本地端下載並載入新內容,而無需重新安裝整個遊戲。常用於可下載內容(DLC)、遊戲更新、或為了減少初始安裝包大小而將非必要的資產分離。
- **優勢**:能有效管理記憶體,只在需要時載入特定資產。同時也方便了內容的熱更新。
### 借位暫代物 Dummy
:bulb: _**在開發流程中,用來臨時替代最終版本資產的簡易 placeholder 物件。**_
- **目的**:主要用於功能驗證和流程測試。例如,在最終的角色模型還未完成時,程式設計師可以使用一個簡單的膠囊體作為 Dummy 來開發角色的移動、跳躍等功能,確保遊戲邏輯可以先行開發,不被美術產出時程所阻塞。
### 預製件 Prefab
:bulb: _**一種將已設定好元件和屬性的「遊戲物件」保存成可重複使用的樣板資產,是 Unity 中實現模組化與高效工作流程的核心功能。**_
- **原理**:當你將一個場景中的 GameObject 拖曳到專案資料夾時,它就會變成一個 Prefab。你可以從這個 Prefab 創建任意數量的「實例 (Instance)」到場景中。
- **強大之處**:對主要 Prefab 進行的任何修改,都可以選擇性地同步套用到所有從它創建的實例上,極大地簡化了對大量重複物件(如敵人、子彈、場景道具)的管理與更新。
### 天空箱 Skybox
:bulb: _**一個巨大的立方體,其內部貼上了六張無縫拼接的紋理,用來模擬無限遠處的背景,如天空、雲層、遠山或太空。**_
- **原理**:天空箱會圍繞著場景中的攝影機,無論攝影機如何移動或旋轉,天空箱的視覺效果都保持不變,給人一種處於廣闊空間中的感覺。
- **實現**:通常使用一種特殊的材質 (Shader) 來渲染,確保立方體的邊角在視覺上是無縫的,並且不受場景光照的影響。
### 元資料 Metadata
:bulb: _**指用於描述其他資料的資料。在 Unity 的脈絡下,特指專案中與每個資產相關聯的 `.meta` 檔案。**_
- **作用**:`.meta` 檔案儲存了對應資產的所有重要配置資訊,例如貼圖的匯入設定(壓縮格式、是否生成 Mipmap)、模型的縮放係數、以及一個全域唯一的 ID (GUID)。
- **重要性**:這個 GUID 是 Unity 用來追蹤和維護資產之間依賴關係的基礎。因此,在使用版本控制系統(如 Git)進行團隊協作時,`.meta` 檔案必須與其對應的資產檔案一併提交,否則會導致專案中出現大量引用遺失的錯誤。
### 實體-元件-系統架構 ECS
:bulb: _**一種強調資料與邏輯分離的程式設計模式,全名為 Entity-Component-System,主要目標是解決傳統物件導向 (OOP) 在處理大量物件時的效能瓶頸。**_
- **實體 (Entity)**:僅作為一個獨特的識別碼 (ID),本身不包含任何資料或行為。
- **元件 (Component)**:只包含純粹的資料(例如:`Position`、`Velocity`),不包含任何遊戲邏輯。也被稱為 `ComponentData`。
- **系統 (System)**:包含處理元件資料的遊戲邏輯。系統會查詢並遍歷所有擁有特定元件組合的實體,並對其資料進行操作(例如,物理系統會更新所有擁有 `Position` 和 `Velocity` 元件的實體的位置)。
- **優勢**:透過將資料緊湊地排列在記憶體中,能更好地利用 CPU 快取,並易於實現多執行緒平行處理,從而大幅提升效能。
### 數位內容創作工具 DCC
:bulb: _**指用於創建數位媒體內容的專業軟體,全名為 Digital Content Creation Tool。**_
- **範疇**:在遊戲開發領域,這是一個廣泛的術語,涵蓋了製作遊戲資產所需的各種工具。
- **常見範例**:
- **3D 建模與動畫**:Autodesk Maya, 3ds Max, Blender
- **3D 雕刻**:ZBrush, Mudbox
- **2D 影像與貼圖**:Adobe Photoshop, Substance Painter
- **音訊編輯**:Audacity, FMOD, Wwise
- **特效製作**:Houdini, EmberGen
- **流程**:TA(技術美術)經常需要編寫腳本或插件,來串連這些 DCC 軟體與遊戲引擎(如 Unity)之間的工作流程,以實現資產的自動化匯出與匯入。