學習3D繪圖基本觀念,首先要理解空間座標,以及空間中的位移、旋轉、縮放;其次是觀察並思考模型的外形、明暗、色彩是如何呈現。

影響模型外觀的因素有好幾個,包括:

  1. 幾何外型,也就是 mesh 參數
  2. 材質,由 materials 參數所控制
  3. 材質又細分為顏色(color/tint)、紋理(texture)、粗糙度(roughness)…等10幾個屬性
  4. 照在模型表面的燈光(Light)或環境景象(IBL, Image-Based Lighting)
  5. 模型所在位置與面向哪個角度
  6. 使用者視角(也就是虛擬鏡頭的位置與角度)

以上每個因素都必須經過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)。