本系列文章是对<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张
复制代码