您的位置:首页 > 其它

好-纹理和材质区别总结

2014-05-19 20:37 267 查看
好久不研究图形学的东西了,但一直放不下,今天闲下来复习了一下,搜集了一些材质和纹理区别的文章,总结一下,以便后看。

我的理解是:纹理更偏向于“图”,而材质更偏向于“属性”。

打个比方说,对同一个立方体模型进行处理:

加纹理信息,可以认为是贴上图,比如木头的纹理图,大理石的纹理图。

加材质信息,可以认为是为这个立方体加上属性(这些属性主要是指反射系数、折射系数等),比如木头的属性或大理石的属性。

从另一个角度来看,加了纹理的模型是静态的和表面的,不会因为外界环境变化而变化(比如光照)。但是加了材质的模型是动态的和本质的,当外界环境变化的时候能做出相应的变化,所以更真实。

最简单的例子就是,我们可以做出有木头光泽的大理石模型,有大理石光泽的木头模型,有木头光泽的木头模型,有大理石光泽的大理石模型。在上面的描述中,有“什么光泽”的“什么”,这是材质信息;“什么模型”的“什么”,这是纹理信息。

说了那么多,具体的只能自己体会啦。这也只是我个人的理解,:)

一般在CG中,“材质”(Material)指的其实是颜色,准确的说,指的是物体表面对射到表面上的色光的RGB分量的反射率。通常材质都包括环境光、漫射光、镜面光和自发光等成分,指的就是对不同的光线,不同颜色分量的反射程度。

“纹理”(texture)指的是位图,把一张图贴到一个表面上去,实际是摹拟了自然事物的漫射材质。因为材质一般只对顶点指定,你不可能对这个平面上的每个像素都指定一种材质。纹理其实就是起这个作用,相当于对这个平面上的每个像素都指定了不同的漫射材质。

不知道我的解释你明白了没有?

其实说穿了,材质和纹理都只是“颜色”而已。

“物体表面的颜色”,这种说法似是而非。物体表面哪来的颜色?

我们看到树是绿的,花是红的,只不过是因为树叶表面反射G分量最强而RB分量被吸收;花表面反射R分量最强而GB分量被吸收而已。说到底,物体的颜色都是外界给的,颜色并不是物体本身的属性。对RGB分量的反射率才是物体本身的属性。

你当然可以说“石膏是白的”,但把石膏放在红色灯下,石膏也就成了红的。你只能说“石膏在白色光下是白的”——这不是一句废话吗?

纹理实际上是对漫反射率的一个摹拟,准确的说,纹理摹拟的是物体表面在白色漫射光照下,各点的反射率。而材质反映的是物体在环境光、漫射光、直射光甚至自发光照射下的反射率,仅此而已,没有什么内部外部,本质表象的。

一个经典的比喻就是:

同样的花纹印在纸上和布上的效果会不一样,

为什么效果不同?因为布和纸对光线的反射不一样

在这个例子中,花纹就是纹理,布和纸就是材质

实质上,纹理给出物体表面各点的颜色值,而材质则描述表面与光线相互作用的特性,也就是说光线在这种材质的表面遵循什么样的行为规律。

补充一个个人入门学习3D的一个疑问:

材质为什么不作为顶点数据结构的一个成员,而是作为渲染状态被单独指定(或作为着色器使用的常量)?

按理说,材质作为顶点的一个固有属性,作为顶点数据结构的一个成员是无可厚非的,就像顶点的纹理坐标或者法向量成员一样。其实原因是因为为了更有效的利用内存,因为通常情况下,一堆三角形顶点虽然不在同一个平面,而且颜色、纹理或法向量不同,但他们的材质却通常一样,例如轮胎,整个轮胎材质是一样的,而轮胎由成千上万个三角形面片描述,如果每个三角形顶点到包含这个相同的材质信息,势必对内存是个很大的浪费,如下图:



上图中,不仅整个轮胎是相同材质,整个挡风玻璃是相同材质,同理整个前照灯也是相同材质。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: