[SceneKit專題]12-Shadows陰影

蘋果API搬運工發表於2017-12-25

說明

本系列文章是對<3D Apple Games by Tutorials>一書的學習記錄和體會

此書對應的程式碼地址

SceneKit系列文章目錄

不是所有燈光型別都有陰影,只有spot(點光源)和directional(方向光源)才有投射陰影能力.

QQ20170409-142240@2x.png

Directional shadows方向光源陰影

方向光源在投射陰影時比較奇怪,因為節點的scale屬性在很大程度上決定了陰影的範圍.方向光源是平行光,所以陰影大小和光源距離無關,這就是為什麼要用scale屬性來控制下投影的可見範圍. 如果你使用了方向光源,但是卻看不到陰影,很可能你需要調整節點的scale屬性.

QQ20170411-203954@2x.png

下面的圖片就展示出調整方向光源節點的scale屬性對陰影的影響:

QQ20170411-204017@2x.png

當scale設定為1時,可以清晰看到方塊陰影,當增加為2時,能看到圓形的身體,但是仍然沒有手,鼻子和頭.最終增加到5時,才能看到所有的身體部分,甚至是尖尖的鼻子.

QQ20170411-205426@2x.png

  • Behaviour(行為):決定光源是否投射陰影.
  • Color(顏色):決定陰影顏色,可以修改顏色和透明度等級.
  • Sample radius(樣本半徑):產生若干疊加的陰影貼圖,值小則陰影銳利,值大則陰影邊緣柔軟.
  • Near/Far clipping(近/遠裁剪):超出範圍的任何物體將不會產生陰影.當有效能問題時應該設定
  • Scale(比例):決定產生陰影貼圖的解析度,scale為1將產生最高的解析度,當scale越高產生的解析度越低.
  • Sample count(樣本數):該引數和Sample radius(樣本半徑)引數共同作用.數值越大陰影邊緣越柔軟.
  • Bias(斜紋):有時候陰影渲染會出現問題,常稱為shadow acne.可以用該屬性來修復錯誤.

QQ20170411-213711@2x.png

QQ20170411-213724@2x.png

Spot shadows點光源陰影

QQ20170411-213847@2x.png
其中各個屬性的作用同方向光源陰影一樣.

QQ20170411-214006@2x.png

相關文章