學習3D繪圖基本觀念,首先要理解空間座標,以及空間中的位移、旋轉、縮放;其次是觀察並思考模型的外形、明暗、色彩是如何呈現。
影響模型外觀的因素有好幾個,包括:
以上每個因素都必須經過CPU或GPU計算,簡單地說,螢幕上呈現的每一個像素顏色,都是上面所有因素的計算結果,這個計算過程稱為渲染(Rendering)。
在第6課的範例中,我們大多採用簡單材質(SimpleMaterial),簡單材質雖然也是基於物理渲染,但只有色調(color)、金屬性(metallic)、粗糙度(roughness)、線框(triangleFillMode)等屬性。
相對於簡單材質,物理材質(PhysicallyBasedMaterial)的屬性比較完整,包括:
# | 屬性名稱 | 子屬性 | 說明 | 章節 |
---|---|---|---|---|
1 | baseColor | tint, texture | 基礎色調 | 6-6a |
2 | roughness | scale, texture | 粗糙度 | 6-7c |
3 | metallic | scale, texture | 金屬性質(反光特性) | 6-6a |
4 | normal | texture | 法線貼圖 | 6-7c |
5 | emissiveColor | color | 發光色調 | |
發光強度預設值1.0 | ||||
材質.emissiveIntensity = 1.0 | 6-7c | |||
6 | ambientOcclusion | texture | 漫射遮罩 | - |
7 | specular | scale, texture | 高光 | - |
8 | clearcoat | scale, texture | 透明漆(清漆) | - |
9 | clearcoatRoughness | scale, texture | 透明漆+粗糙度 | - |
10 | clearcoatNormal | texture | 透明漆+法線貼圖 | - |
11 | name | - | 賦予材質名稱 | - |
12 | opacityThreshold | - | 透明度門檻(若低於或等於門檻,則為0.0;若高於門檻,則為1.0) | - |
13 | blending | .opaque | ||
.transparent(opacity:) | 與背景混合方式(透明、不透明) | 6-7c | ||
14 | triangleFillMode | .fill | ||
.lines | 顯示線框(lines)或渲染材質 | 6-7c |
子屬性中,tint(色調)、color(顏色)需要輸入 UIColor 值,scale (大小尺度)是浮點數(通常是正規化到0.0~1.0之間)。
texture(紋理)類型比較特殊,要先匯入圖檔,再用 TextureResource 產出,這種方式稱為「貼圖」或「貼皮」,參考以下範例(材質4、材質5)。