[SceneKit专题]10.Materials材质

说明

本系列文章是对<3D Apple Games by Tutorials>一书的学习记录和体会此书对应的代码地址

SceneKit系列文章目录

最终的实时渲染效果图


QQ20170409-001805@2x.png

Lighting models(照明模型)

WX20171203-141252@2x.png
  • 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(颜色贴图,漫反射贴图):给几何体一个基本的颜色纹理,不考虑灯光和特效:


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


    QQ20170409-111705@2x.png

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


    QQ20170409-111848@2x.png

    QQ20170409-111903@2x.png

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

WX20171203-141904@2x.png

QQ20170409-114742@2x.png

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


WX20171203-141954@2x.png

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

WX20171203-142110@2x.png

  • Occlusion map(闭塞贴图):也就是ambient occlusion map(AO贴图,环境光闭塞贴图),只有当场景中有ambient light环境光时才有作用,精确定义了每个像素在环境光作用下的被照亮程度.也就是让几何体的黑色部分不被环境光照亮而变浅.
QQ20170409-111917@2x.png
QQ20170409-111930@2x.png
  • Specular map(镜面贴图,高光贴图):镜面贴图决定了几何体的镜面程度,黑色部分就是不光滑,白色就是光滑反光.会影响Normal map(法线贴图)外部光线照射反光和Reflective map(反射贴图)外部天空盒子图像反光的清晰程度


    QQ20170409-111949@2x.png

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

    QQ20170409-112012@2x.png

    QQ20170409-112024@2x.png

    需要注意的是
    在Scene Kit中Emission map(发光贴图)并不真正发光,只是模拟发光效果而已.就是说不能照亮其他物体,不能产生阴影.这点与其他3D创作工具不同.

  • Multiply map(乘法贴图,正片叠底贴图):会影响其他所有效果.一般用来给最后的效果调整色彩或者亮度.


    QQ20170409-120113@2x.png
QQ20170409-120125@2x.png
  • Transparency map(透明贴图):黑色部分不透明,白色透明.
    注意:球体内部需要开启double-sided mode才能看到


    QQ20170409-120138@2x.png
QQ20170409-120149@2x.png
  • Metalness and Roughness maps(光泽度和粗糙度贴图):Xcode8引入的新特性,Physically Based Rendering (PBR)灯光模型可以使用MetalnessRoughness贴图.
    WX20171203-142500@2x.png
QQ20170409-143922@2x.png

skybox天空盒子

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


QQ20170409-140020@2x.png
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张
QQ20170409-141542@2x.png
QQ20170409-140951@2x.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • 前面的材质系统对于除了最简单的模型以外都是不够的,所以我们需要扩展前面的系统,我们要介绍diffuse和specu...
    IceMJ阅读 2,946评论 0 2
  • 我们都知道,一个三维场景的画面的好坏,百分之四十取决于模型,百分之六十取决于贴图,可见贴图在画面中所占的重要性。在...
    自由的天空阅读 12,256评论 0 12
  • 相关 到底有多强?苹果的增强现实框架:ARKitARKit进阶:物理世界ARKit实战:如何实现任意门 Scene...
    皮皮Warrior阅读 3,910评论 1 11
  • 在OpenGL ES 中, 使用纹理贴图的方式来给一个物体模拟现实的材质, 让几何物体看起来更逼真, 但是在Op...
    冰三尺阅读 2,527评论 0 2
  • 证明自己,不在唯唯诺诺 证明自己,不是一事无成 证明自己,不再蹉跎岁月 证明自己,我行我可以!
    线上现下阅读 147评论 0 0