Lighting models (shaders)
Lighting models 本质上是一个着色器,他通过不同的数学模型,来计算物体表面的光的折射,如何渲染在场景中,控制最终你看到的东西,SceneKit 提供了下面几种不同的 LM,他们有着不同的纹理属性,结合了不同的纹理属性,光和光的信息来生成各种材质和效果
![](https://img.haomeiwen.com/i1051883/2d1a9ea1b5dd5fb4.png)
- Constant: 这个一个平面灯光模型,只包含了对环境灯光的整合
- Lambert: 这个模型整合了环境光和漫射光的信息
- Phong: 这个模型结合了环境光,漫反射和镜面光信息
- Blinn: 这个模型结合了环境光,漫反射和镜面光信息,但使用的算法和上面的不一样,更加高效
- Physical Based: 这个模型整合了漫反射和物理灯光和材质的现实抽象
Materials
给 LM 配置不同的特殊的材质,会有不同的效果。材质由不同的纹理层组成。每个 layer 会产生特点的颜色等
![](https://img.haomeiwen.com/i1051883/a3332a809f537b2e.png)
Textures
纹理是 2D 的图形,用来作为 3D 几何的一些表达,纹理可以由不同的 layers 组成,每层有它自己特殊的属性,颜色,镜面反射,光泽,粗糙程度和透明度等,当他们组合的时候能产生真实的纹理
Environment map
在了解环境图之前,先来了解 cube maps
, cm 它有六个面,如下图
![](https://img.haomeiwen.com/i1051883/40b722885a37b068.png)
SceneKit 支持不同模式的 cm,常用的有 horizontal strip
模式,它有一行的 6 个面组成,相当于有 6 个纹理
![](https://img.haomeiwen.com/i1051883/165b0601628181d2.png)
- +X 和 -X 是左右两个面
- +Y 和 -Y是上下面
- +Z 和 -Z 是前后面
Environment map
有两个目的,它和反射图相似,利于反射,它通常用来为 PBR 提供灯光信息,给他们逼真的灯光环境
![](https://img.haomeiwen.com/i1051883/d1b2a37a7aa8c244.png)
Diffuse map
diffuse map
为 3D 模型提供了基本的颜色,表面了这个是什么物体,不管其他灯光或者特效的效果,通过平面 2D 图包裹球体,它将球体定义为地球
![](https://img.haomeiwen.com/i1051883/1f9da3cb83dffb7d.png)
可以通过 alpha 通道来改变球体
![](https://img.haomeiwen.com/i1051883/07578b55d646bb92.png)
Normal map
Normal maps
简单的说就是创建凹凸感,而不需要在该表面添加很多多边形,应用它能为地球添加山脉和平原等凹凸感
![](https://img.haomeiwen.com/i1051883/70f6e329896f9339.png)
Height map
height map 不是 PBR 中的一部分,但是 hm 是一个黑白图,白色代表,白色是渲染的最高点,黑色为最低,可以把他转换为 normal map
![](https://img.haomeiwen.com/i1051883/45ce7796e5148f8b.png)
Occlusion map
它类型与遮挡图,用于阻挡环境光到达狭窄的角落区域,例如石墙上的裂缝等,这是黑白纹理图,黑色代表阻挡灯光的区域,白色代表允许灯光通过,最终用来模拟环境光的效果
![](https://img.haomeiwen.com/i1051883/8261f3e7f43cbaea.png)
Emission map
在没有光的地方,地球看上去是黑的,在用灯光的地方,在外太空看起来是亮的,emission map 涵盖了灯光和阴影的信息以创建发光的效果
![](https://img.haomeiwen.com/i1051883/cc76c04fa29137ee.png)
Self-illumination map
应用其他效果后,可以给他上色了。
![](https://img.haomeiwen.com/i1051883/eb18dc9dd7bd66d0.png)
Displacement map
normal 使用像素来添加高度变化的错觉,displacement map 使用像素来实际改变表面
![](https://img.haomeiwen.com/i1051883/d8e9bb9b3c3b38d5.png)
Metalness and roughness maps
PBR能够将微观细节可视化,并由两个属性表示:材料粗糙度和金属度。
![](https://img.haomeiwen.com/i1051883/339ef4324af197b5.png)
Metalness map
金属度接近物理表面特性,如低角度下的折射,反射和菲涅耳反射。 它产生金属或电介质外观。 这些贴图是灰度纹理。 黑色表示完全电介质,而白色表示完全金属表面。
![](https://img.haomeiwen.com/i1051883/2a13ea6b8c96cff6.png)
Roughness map
粗糙度接近现实世界表面的微观细节。 它产生光泽或无光泽的外观。 这些贴图是灰度纹理,其中黑色表示非常粗糙的表面,而白色表示非常光滑的表面。
![](https://img.haomeiwen.com/i1051883/fb54f350f25715bb.png)
ARAnchor
包含了位置和方向对真实世界的转换,它是看不见的元素。
ARPlaneAnchor
是一个特殊的锚点,它包含了位置和方向,平面的信息,包括中点,方向和平面的范围。
Detecting surfaces
为了让 ARKit 能检测到平面,需要设置
config.planeDetection = .horizontal
网友评论