本系列文章是對<3D Apple Games by Tutorials>一書的學習記錄和體會git
此書對應的代碼地址github
SceneKit系列文章目錄swift
最終的實時渲染效果圖 數組
通常也就是textures(紋理). 紋理實際是2D圖片按照幾何體內部的紋理座標系展開,包裹在3D幾何體表面.全部Scene Kit內部自帶的初始形狀已經包含了這個座標信息.app
Diffuse map(顏色貼圖,漫反射貼圖):給幾何體一個基本的顏色紋理,不考慮燈光和特效: ide
Normal map(法線貼圖):在上篇文章的燈光裏講過,燈光是使用形狀表面的法向量來決定照亮哪一個面的.系統自帶形狀是使用單一的整個面的向量,而法線貼圖則以RGB值定義了精確到每一個像素的法向量,這樣每一個像素對燈光的反應都不一樣,造成表面崎嶇不平的燈光效果. 工具
Reflective map(反射貼圖):以黑白圖片精肯定義了材質每一個像素的反光程度.就是周圍環境的光線在物體表面映射出的圖像(實際就是天空盒子圖像在物體表面的反光). post
須要注意的是 Xcode8以前,反射貼圖和前面兩個貼法不一樣,不是直接拉伸包裹在幾何體上面的,而是用cube mapping(立方體貼圖)來完成的.想像一個立方體,六個面的紋理並排水平放置,就造成了立方體貼圖: 學習
Xcode8以後別的形式立方貼圖也能夠,: spa
Xcode8還支持了1:2的球面貼圖:
Specular map(鏡面貼圖,高光貼圖):鏡面貼圖決定了幾何體的鏡面程度,黑色部分就是不光滑,白色就是光滑反光.會影響Normal map(法線貼圖)外部光線照射反光和Reflective map(反射貼圖)外部天空盒子圖像反光的清晰程度
Emission map(發光貼圖):在沒有光線時,若是物體表面有熒光塗料,就會發光.發光貼圖能夠用來模擬這種物體.彩色貼圖中,黑色不發光,亮色發光強,暗色發光弱.
Multiply map(乘法貼圖,正片疊底貼圖):會影響其餘全部效果.通常用來給最後的效果調整色彩或者亮度.
設置方法如圖,也能夠用代碼設置:
let scene = SCNScene()
scnView.scene = scene
scene.background.contents = "skybox01_cube.png"
複製代碼
當使用Cube map立方體貼圖時,Scene Kit支持如下幾種圖像模式
1. A horizontal strip image where `6 * image.height == image.width`水平排列寬高6:1
2. A vertical strip image where ` image.height == 6 * image.width`豎直排列寬高1:6
3. A horizontal cross image where `4 * image.height == 3 * image.width`水平十字交叉寬高3:4
4. A vertical cross image where `3 * image.height == 4 * image.width`豎直十字交叉寬高3:4
5. A lat/long image where ` image.height == 2 * image.width`經緯度圖片寬高1:2
6. A NSArray of 6 images. This array must contain images of the exact same dimensions, in the following order, in a left-handed coordinate system: +X, -X, +Y, -Y, +Z, -Z (or Right, Left, Top, Bottom, Front, Back).圖片數組6張
複製代碼