ARKit (三)

Lighting models (shaders)

Lighting models 本质上是一个着色器,他通过不同的数学模型,来计算物体表面的光的折射,如何渲染在场景中,控制最终你看到的东西,SceneKit 提供了下面几种不同的 LM,他们有着不同的纹理属性,结合了不同的纹理属性,光和光的信息来生成各种材质和效果


image.png
  • Constant: 这个一个平面灯光模型,只包含了对环境灯光的整合
  • Lambert: 这个模型整合了环境光和漫射光的信息
  • Phong: 这个模型结合了环境光,漫反射和镜面光信息
  • Blinn: 这个模型结合了环境光,漫反射和镜面光信息,但使用的算法和上面的不一样,更加高效
  • Physical Based: 这个模型整合了漫反射和物理灯光和材质的现实抽象

Materials

给 LM 配置不同的特殊的材质,会有不同的效果。材质由不同的纹理层组成。每个 layer 会产生特点的颜色等


image.png

Textures

纹理是 2D 的图形,用来作为 3D 几何的一些表达,纹理可以由不同的 layers 组成,每层有它自己特殊的属性,颜色,镜面反射,光泽,粗糙程度和透明度等,当他们组合的时候能产生真实的纹理

Environment map

在了解环境图之前,先来了解 cube maps, cm 它有六个面,如下图

image.png

SceneKit 支持不同模式的 cm,常用的有 horizontal strip 模式,它有一行的 6 个面组成,相当于有 6 个纹理

image.png

  • +X 和 -X 是左右两个面
  • +Y 和 -Y是上下面
  • +Z 和 -Z 是前后面

Environment map 有两个目的,它和反射图相似,利于反射,它通常用来为 PBR 提供灯光信息,给他们逼真的灯光环境

image.png

Diffuse map

diffuse map 为 3D 模型提供了基本的颜色,表面了这个是什么物体,不管其他灯光或者特效的效果,通过平面 2D 图包裹球体,它将球体定义为地球

image.png

可以通过 alpha 通道来改变球体

image.png

Normal map

Normal maps 简单的说就是创建凹凸感,而不需要在该表面添加很多多边形,应用它能为地球添加山脉和平原等凹凸感

image.png

Height map

height map 不是 PBR 中的一部分,但是 hm 是一个黑白图,白色代表,白色是渲染的最高点,黑色为最低,可以把他转换为 normal map


image.png

Occlusion map

它类型与遮挡图,用于阻挡环境光到达狭窄的角落区域,例如石墙上的裂缝等,这是黑白纹理图,黑色代表阻挡灯光的区域,白色代表允许灯光通过,最终用来模拟环境光的效果


image.png

Emission map

在没有光的地方,地球看上去是黑的,在用灯光的地方,在外太空看起来是亮的,emission map 涵盖了灯光和阴影的信息以创建发光的效果


image.png

Self-illumination map

应用其他效果后,可以给他上色了。


image.png

Displacement map

normal 使用像素来添加高度变化的错觉,displacement map 使用像素来实际改变表面


image.png

Metalness and roughness maps

PBR能够将微观细节可视化,并由两个属性表示:材料粗糙度和金属度。

image.png

Metalness map

金属度接近物理表面特性,如低角度下的折射,反射和菲涅耳反射。 它产生金属或电介质外观。 这些贴图是灰度纹理。 黑色表示完全电介质,而白色表示完全金属表面。


image.png

Roughness map

粗糙度接近现实世界表面的微观细节。 它产生光泽或无光泽的外观。 这些贴图是灰度纹理,其中黑色表示非常粗糙的表面,而白色表示非常光滑的表面。

ARAnchor 包含了位置和方向对真实世界的转换,它是看不见的元素。

ARPlaneAnchor 是一个特殊的锚点,它包含了位置和方向,平面的信息,包括中点,方向和平面的范围。

Detecting surfaces

为了让 ARKit 能检测到平面,需要设置

config.planeDetection = .horizontal

你可能感兴趣的:(ARKit (三))