在OpenGL ES 中, 使用纹理贴图的方式来给一个物体模拟现实的材质, 让几何物体看起来更逼真, 但是在OpenGL ES中使用起来是超级麻烦. SceneKit中用来显示纹理就方便多了, 最起码它是面向对象的.
SceneKit支持四种不同的照明模型,它们定义将不同材质的属性与场景中的灯组合的数学方程,以产生每个渲染像素的精确最终颜色。在[SceneKit]光线(五)介绍了四种不同的光, 这个是四种不同的光照模型, 不要搞混了😆
Lighting models光照模型
以下是每个模型的详细信息:
•Constant:使用平面照明模型,在计算渲染像素的颜色时,仅将环境照明纳入方程式。
•Lambert:在计算时加入环境照明和漫射信息
渲染像素的颜色。
•Blinn:结合环境,漫反射和镜面照明信息,其中使用Blinn-Phong公式计算镜面高光。
•Phong。 包含环境,漫反射和镜面照明信息,其中使用Phong公式计算镜面高光。
Materials通常被称为纹理; 他们可以让您在场景中引入更多的细节和现实感,而不需要更多的几何体。
纹理基本上是平面的二维图像,包裹3D几何,使用几何中存储的特殊纹理坐标。其实就是3d图像的每个点都与对应的2d纹理之间有一个一一对应的映射关系, 把这个映射关系做好之后, 剩下的就是把2d图像贴在3d几何上面就OK了.
贴图的类型
Diffuse map(漫反射贴图)
最常用的纹理映射方法。它将位图图像包裹在3D几何表面上,同时显示其原始像素颜色。
漫反射贴图在游戏中表现出物体表面的反射和表面颜色。换句话说,它可以表现出物体被光照射到而显出的颜色和强度。我们通过颜色和明暗来绘制一幅漫反射贴图,在这张贴图中,吸收了比较多的光线的部分比较暗,而表面反射比较强的部分,吸收的光线比较少。
刨去那些杂糅的东西,我们只谈明显的,漫反射贴图表现了什么? 列举一下,物体的固有色以及纹理,贴图上的光影。前面的固有色和纹理我们很容易理解,至于后面的光影,我们再绘制漫反射贴图的时候需要区别对待,比如我们做一堵墙,每一块砖都是用模型做出来的,那么我们就没有必要绘制砖缝,因为这个可以通过打灯光来实现。可是我们如果用模型只做了一面墙,上面的砖块是用贴图来实现,那么就得绘制出砖缝了。从美术的角度,砖缝出了事一条单独的材质带外,还有就是砖缝也是承接投影的,所以在漫反射图上,绘制出投影也是很有必要的。
没有什么物体能够反射出跟照到它身上相同强度的光。因此,让你的漫反射贴图暗一些是一个不错的想法。通常,光滑的面只有很少的光会散射,所以你的漫反射贴图可以亮一些。
Normal map(法线贴图)
法线贴图是一种凹凸贴图。它们是一种特殊的纹理,可以让您将一些表面细节(如凸起,凹槽和划痕)添加到模型中,如同它们由实际几何体所代表的那样。
例如,您可能希望显示一个表面,如表面上有凹槽,螺钉或铆钉,如飞机船体。这样做的一个方法是将这些细节建模为几何,。
将法线贴图视为定义几何凹凸的纹理; 您可以使用它来模拟粗糙的表面,如月球表面的凹坑,雕刻在古老的石片上,或者甚至是闪亮的足球上的凸起的斑块和皮革图案.
Diffuse map只有基础的颜色纹理, Normal map只有基础的使用光线来表示几何物体反射光线的多少(因为我们人眼看到的东西是基于反射光, 如果有反射光进入眼睛就能看到, 否则则看不到), 要想既有颜色又有光亮与阴暗, 可以试下把二者结合
如果你想生成你自己的法线贴图,有一个叫做CrazyBump的工具。 你可以在crazybump.com找到它。
Reflective map(反射贴图)
在开始了解反射贴图之前, 需要先了解下多维数据集(cube mapping)映射的概念。 你知道一个立方体由六面组成。 类似地,立方体地图由六个相同大小的纹理组成,全部包含在用于纹理多维数据集的所有边的一个大图中。
场景套件使用以下模式来定义多维数据集地图,其中每个图块表示多维数据集的特定一面:
使用多维数据集贴图的好处是您可以定义对象的细节; 您的对象的反射性决定了这种反射有多少将是可见的。 例如,一个镜面完成将使您的对象高度反光,并产生镀铬效果。
与前面的Diffuse map和Normal map贴图不同的是, 前面两者是把一张2维图片包裹在3维几何物体表面, 而Reflective map 则是使用cube mapping的方式把原始的2维图像映射到3维物体之上, 更像是含有颜色的影子.
Occlusion map(闭塞贴图)
Occlusion map用于提供关于模型的哪些区域应该接收高或低间接照明的信息。间接照明来自于环境照明和反射,因此您的模型如陡峭的凹陷部分,如裂纹或折痕,实际上不会接收太多的间接光。
当它做得很好时,遮挡效应会给场景带来很多现实感。 对于复杂的几何形状,几何形状的部分将阻挡来自几何的其他点的环境光,例如球的斑块周围的深脊:
应用遮挡图之前和之后。部分被遮蔽的区域,特别是在脖子上的织物褶皱处,在左边太亮了。在分配了环境遮挡图之后,这些区域不再被来自周围树木环境的绿色环境光照亮。
Specular map(镜面贴图)
镜面贴图控制几何的光泽。 贴图的黑色部分定义了哑光部分,而白色部分则表示光泽效果
控制从表面发出的光的颜色和强度。当您的场景中使用发光材料时,它似乎是可见的光源。该物体将出现“自发光”。
Emission map(发光贴图)
发光材料通常用于某些部件似乎从内部照亮的物体上,例如显示器的屏幕,高速制动的汽车的盘式制动器,控制面板上的发光按钮或者怪物的眼睛,在黑暗中可见。
使用这些材料的对象即使在场景中的黑暗区域也会保持亮起。
红色,绿色和蓝色球体使用发光材料。即使它们处于黑暗的场景,它们也从内部光源发光。
在Scene Kit中Emission map并不真正发光,只是模拟发光效果而已.就是说不能照亮其他物体,不能产生阴影.这点与其他3D创作工具不同.
Multiply map(乘法贴图)
所有其他效果后应用乘法图; 它可以用于着色,变亮或变暗的最终结果:
Transparency map(透明贴图)
透明度贴图使您几何的几何透明,甚至完全不可见。 黑色部分定义不透明部分,而白色部分最终为透明的部分。像PS一样