美文网首页ARKit开发
10-Materials材质

10-Materials材质

作者: 095b62ead3cd | 来源:发表于2020-06-09 00:22 被阅读0次

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

最终的实时渲染效果图


最终的实时渲染效果图

Lighting models(照明模型)

照明模型
  • Constant:使用一个扁平的照明模型,在计算渲染像素的颜色时,只包含ambient信息.
  • Lambert:在计算渲染像素的颜色时,只包含ambient信息和diffuse信息.
  • Blinn:在计算渲染像素的颜色时,只包含ambient信息,diffuse信息,specular信息,而且specular高光区是用Blinn-Phong法则计算的.
  • Phong:在计算渲染像素的颜色时,只包含ambient信息,diffuse信息,specular信息,而且specular高光区是用Phong法则计算的.
  • PBR:即Physically Based Rendering基于物理的渲染,包含了真实情况下,物理光源和材质对光的漫反射和吸收.

Materials(材质)

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

  • Diffuse map(颜色贴图,漫反射贴图):给几何体一个基本的颜色纹理,不考虑灯光和特效:


    颜色贴图,漫反射贴图
  • Normal map(法线贴图):在上篇文章的灯光里讲过,灯光是使用形状表面的法向量来决定照亮哪个面的.系统自带形状是使用单一的整个面的向量,而法线贴图则以RGB值定义了精确到每个像素的法向量,这样每个像素对灯光的反应都不同,形成表面崎岖不平的灯光效果.


    法线贴图
法线贴图2
  • Reflective map(反射贴图):以黑白图片精确定义了材质每个像素的反光程度.就是周围环境的光线在物体表面映射出的图像(实际就是天空盒子图像在物体表面的反光).


    反射贴图
反射贴图2

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

立方体贴图 球体贴图

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


xcode8之后支持的立方体贴图

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

xcode8支持的球面贴图
  • Occlusion map(闭塞贴图):也就是ambient occlusion map(AO贴图,环境光闭塞贴图),只有当场景中有ambient light环境光时才有作用,精确定义了每个像素在环境光作用下的被照亮程度.也就是让几何体的黑色部分不被环境光照亮而变浅.


    AO贴图,环境光闭塞贴图
AO贴图,环境光闭塞贴图2
  • Specular map(镜面贴图,高光贴图):镜面贴图决定了几何体的镜面程度,黑色部分就是不光滑,白色就是光滑反光.会影响Normal map(法线贴图)外部光线照射反光和Reflective map(反射贴图)外部天空盒子图像反光的清晰程度


    镜面贴图,高光贴图
镜面贴图,高光贴图2
  • Emission map(发光贴图):在没有光线时,如果物体表面有荧光涂料,就会发光.发光贴图可以用来模拟这种物体.彩色贴图中,黑色不发光,亮色发光强,暗色发光弱.


    发光贴图
发光贴图2
**需要注意的是** 在Scene Kit中Emission map(发光贴图)并不真正发光,只是模拟发光效果而已.就是说不能照亮其他物体,不能产生阴影.这点与其他3D创作工具不同.
  • Multiply map(乘法贴图,正片叠底贴图):会影响其他所有效果.一般用来给最后的效果调整色彩或者亮度.


    乘法贴图,正片叠底贴图
乘法贴图,正片叠底贴图2
  • Transparency map(透明贴图):黑色部分不透明,白色透明. 注意:球体内部需要开启double-sided mode才能看到


    透明贴图
透明贴图2
  • Metalness and Roughness maps(光泽度和粗糙度贴图):Xcode8引入的新特性,Physically Based Rendering (PBR)灯光模型可以使用MetalnessRoughness贴图.
    光泽度和粗糙度贴图
光泽度和粗糙度贴图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

相关文章

  • 10-Materials材质

    文章选自掘金苹果API搬运工的文章[SceneKit专题]10-Materials材质主要记录自己在学习ARKit...

  • 6 车充 2

    芯片塑料材质引脚材质 选出这些线,然后提取样条 做完开始上材质 外壳材质 按钮金属 芯片材质 引脚材质 电容材质 ...

  • three.js(35)-金属材质

    常用材质 点材质PointsMaterial线材质LineBasicMaterial:线基础材质LineDashe...

  • TRITAN水杯可以装开水吗?

    塑料水杯材质中,tritan材质、PC材质和pp材质这三种塑料材质里面,也 就tritan材质的杯子可以说是...

  • three.js(6)-点材质和线材质

    下面这张图囊括了目前所有的材质。今天我们说说点材质和线材质。 点材质 点材质,顾名思义,就是用点作为物体的材质。 线材质

  • PP和PC与TRITAN材质有什么区别?

    塑料水杯最常见的材质分别就是tritan塑料材质、pp塑料材质以及PC塑料材质了,虽然同为塑料材质,但是相...

  • PP、PC、Tritan材质哪种好

    塑料水杯最常见的材质分别就是tritan塑料材质、pp塑料材质以及PC塑料材质了,虽然同为塑料材质,但是相...

  • 材质

    使用材质 基本材质 MeshBasicMaterial 漫反射材质 MeshLambertMaterial 镜...

  • OpenGLES5-光照

    光照基础 环境光照 漫反射光照 镜面光照 光照特性 材质属性 泛射材质 漫反射材质 镜面反射材质 发射材质 光照计...

  • 材质

    如果我们要理解一件事物到底是不是平衡的,就首先要理解组成它的元素是什么,先分解开来去看,再从整体上去评估。这是一种...

网友评论

    本文标题:10-Materials材质

    本文链接:https://www.haomeiwen.com/subject/avdjtktx.html