ARKit开发

10-Materials材质

2020-06-09  本文已影响0人  095b62ead3cd

文章选自掘金苹果API搬运工的文章[SceneKit专题]10-Materials材质
主要记录自己在学习ARKit的过程中看到的好的文章,避免到时候链接失效无法找到原文的情况,非常感谢原博主的辛勤付出,也在此分享出来跟大家一起学习。

最终的实时渲染效果图


最终的实时渲染效果图

Lighting models(照明模型)

照明模型

Materials(材质)

一般也就是textures(纹理). 纹理实际是2D图片按照几何体内部的纹理坐标系展开,包裹在3D几何体表面.所有Scene Kit内部自带的初始形状已经包含了这个坐标信息.

法线贴图2 反射贴图2

需要注意的是 Xcode8之前,反射贴图和前面两个贴法不同,不是直接拉伸包裹在几何体上面的,而是用cube mapping(立方体贴图)来完成的.想像一个立方体,六个面的纹理并排水平放置,就形成了立方体贴图:

立方体贴图 球体贴图

Xcode8之后别的形式立方贴图也可以,:


xcode8之后支持的立方体贴图

Xcode8还支持了1:2的球面贴图:

xcode8支持的球面贴图 AO贴图,环境光闭塞贴图2 镜面贴图,高光贴图2 发光贴图2
**需要注意的是** 在Scene Kit中Emission map(发光贴图)并不真正发光,只是模拟发光效果而已.就是说不能照亮其他物体,不能产生阴影.这点与其他3D创作工具不同.
乘法贴图,正片叠底贴图2 透明贴图2 光泽度和粗糙度贴图2

skybox天空盒子

设置方法如图,也可以用代码设置:


天空盒子
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张
天空盒子2 天空盒子3
上一篇下一篇

猜你喜欢

热点阅读