上一節提到材質物件 SCNMaterial,可說是決定虛擬物體(如3D模型)外觀的最重要因素,要做出逼真的虛擬物件,就必須熟悉材質的操作。材質物件除了上一節提到的3個基本屬性(diffuse, metalness, roughness)之外,還有一個非常重要的屬性,那就是「光照模型」 lightingModel。

首先要注意,光照模型並不是燈光物件(SCNLight)的屬性,而是材質的屬性。所謂「光照模型」是指材質對光線的反應模式,大部分材質都會吸收部分光線並反射其他光線,在表面形成濃淡的光影、色澤與反光,最後呈現視覺所看到的外觀。

要計算3D物體每一點的光線強弱,實在是不容易,過去50年累積非常多理論,目前 SceneKit 支援6種光照模型:

  1. 材質.lightingModel = .constant (恆定)
  2. 材質.lightingModel = .shadowOnly (只計算陰影)
  3. 材質.lightingModel = .lambert (蘭伯特)
  4. 材質.lightingModel = .phong (裴氏)
  5. 材質.lightingModel = .blinn (布林)
  6. 材質.lightingModel = .physicallyBased (物理渲染)

第1種 .constant 恆定光照模型最簡單,3D模型所有地方都受同一亮度的光線照射,不會有任何陰影,這顯然不太真實,但對某些展示場合有用。

第2種 .shadowOnly 光線會穿透3D模型,只顯示影子,通常不會單獨使用。

第3種 .lambert 是最早(1960年)發展出來的光照理論之一,以數學分析光線在物體表面漫射的強弱,形成光影明暗的結果,名稱為紀念一位18世紀法國數學家Johann H. Lambert。

第4種 .phong 是越南人裴祥風(Bui Tuong Phong, 後入美國籍)於1975年發表的光照理論,其數學模型考慮環境光(ambient)、漫射(diffuse)、高光(或稱鏡面反射,specular)以及自發光(emissive)等4個因素,被後人稱為標準光照模型。