好-纹理和材质区别总结
2014-05-19 20:37
267 查看
好久不研究图形学的东西了,但一直放不下,今天闲下来复习了一下,搜集了一些材质和纹理区别的文章,总结一下,以便后看。
我的理解是:纹理更偏向于“图”,而材质更偏向于“属性”。
打个比方说,对同一个立方体模型进行处理:
加纹理信息,可以认为是贴上图,比如木头的纹理图,大理石的纹理图。
加材质信息,可以认为是为这个立方体加上属性(这些属性主要是指反射系数、折射系数等),比如木头的属性或大理石的属性。
从另一个角度来看,加了纹理的模型是静态的和表面的,不会因为外界环境变化而变化(比如光照)。但是加了材质的模型是动态的和本质的,当外界环境变化的时候能做出相应的变化,所以更真实。
最简单的例子就是,我们可以做出有木头光泽的大理石模型,有大理石光泽的木头模型,有木头光泽的木头模型,有大理石光泽的大理石模型。在上面的描述中,有“什么光泽”的“什么”,这是材质信息;“什么模型”的“什么”,这是纹理信息。
说了那么多,具体的只能自己体会啦。这也只是我个人的理解,:)
一般在CG中,“材质”(Material)指的其实是颜色,准确的说,指的是物体表面对射到表面上的色光的RGB分量的反射率。通常材质都包括环境光、漫射光、镜面光和自发光等成分,指的就是对不同的光线,不同颜色分量的反射程度。
“纹理”(texture)指的是位图,把一张图贴到一个表面上去,实际是摹拟了自然事物的漫射材质。因为材质一般只对顶点指定,你不可能对这个平面上的每个像素都指定一种材质。纹理其实就是起这个作用,相当于对这个平面上的每个像素都指定了不同的漫射材质。
不知道我的解释你明白了没有?
其实说穿了,材质和纹理都只是“颜色”而已。
“物体表面的颜色”,这种说法似是而非。物体表面哪来的颜色?
我们看到树是绿的,花是红的,只不过是因为树叶表面反射G分量最强而RB分量被吸收;花表面反射R分量最强而GB分量被吸收而已。说到底,物体的颜色都是外界给的,颜色并不是物体本身的属性。对RGB分量的反射率才是物体本身的属性。
你当然可以说“石膏是白的”,但把石膏放在红色灯下,石膏也就成了红的。你只能说“石膏在白色光下是白的”——这不是一句废话吗?
纹理实际上是对漫反射率的一个摹拟,准确的说,纹理摹拟的是物体表面在白色漫射光照下,各点的反射率。而材质反映的是物体在环境光、漫射光、直射光甚至自发光照射下的反射率,仅此而已,没有什么内部外部,本质表象的。
一个经典的比喻就是:
同样的花纹印在纸上和布上的效果会不一样,
为什么效果不同?因为布和纸对光线的反射不一样
在这个例子中,花纹就是纹理,布和纸就是材质
实质上,纹理给出物体表面各点的颜色值,而材质则描述表面与光线相互作用的特性,也就是说光线在这种材质的表面遵循什么样的行为规律。
补充一个个人入门学习3D的一个疑问:
材质为什么不作为顶点数据结构的一个成员,而是作为渲染状态被单独指定(或作为着色器使用的常量)?
按理说,材质作为顶点的一个固有属性,作为顶点数据结构的一个成员是无可厚非的,就像顶点的纹理坐标或者法向量成员一样。其实原因是因为为了更有效的利用内存,因为通常情况下,一堆三角形顶点虽然不在同一个平面,而且颜色、纹理或法向量不同,但他们的材质却通常一样,例如轮胎,整个轮胎材质是一样的,而轮胎由成千上万个三角形面片描述,如果每个三角形顶点到包含这个相同的材质信息,势必对内存是个很大的浪费,如下图:
上图中,不仅整个轮胎是相同材质,整个挡风玻璃是相同材质,同理整个前照灯也是相同材质。
我的理解是:纹理更偏向于“图”,而材质更偏向于“属性”。
打个比方说,对同一个立方体模型进行处理:
加纹理信息,可以认为是贴上图,比如木头的纹理图,大理石的纹理图。
加材质信息,可以认为是为这个立方体加上属性(这些属性主要是指反射系数、折射系数等),比如木头的属性或大理石的属性。
从另一个角度来看,加了纹理的模型是静态的和表面的,不会因为外界环境变化而变化(比如光照)。但是加了材质的模型是动态的和本质的,当外界环境变化的时候能做出相应的变化,所以更真实。
最简单的例子就是,我们可以做出有木头光泽的大理石模型,有大理石光泽的木头模型,有木头光泽的木头模型,有大理石光泽的大理石模型。在上面的描述中,有“什么光泽”的“什么”,这是材质信息;“什么模型”的“什么”,这是纹理信息。
说了那么多,具体的只能自己体会啦。这也只是我个人的理解,:)
一般在CG中,“材质”(Material)指的其实是颜色,准确的说,指的是物体表面对射到表面上的色光的RGB分量的反射率。通常材质都包括环境光、漫射光、镜面光和自发光等成分,指的就是对不同的光线,不同颜色分量的反射程度。
“纹理”(texture)指的是位图,把一张图贴到一个表面上去,实际是摹拟了自然事物的漫射材质。因为材质一般只对顶点指定,你不可能对这个平面上的每个像素都指定一种材质。纹理其实就是起这个作用,相当于对这个平面上的每个像素都指定了不同的漫射材质。
不知道我的解释你明白了没有?
其实说穿了,材质和纹理都只是“颜色”而已。
“物体表面的颜色”,这种说法似是而非。物体表面哪来的颜色?
我们看到树是绿的,花是红的,只不过是因为树叶表面反射G分量最强而RB分量被吸收;花表面反射R分量最强而GB分量被吸收而已。说到底,物体的颜色都是外界给的,颜色并不是物体本身的属性。对RGB分量的反射率才是物体本身的属性。
你当然可以说“石膏是白的”,但把石膏放在红色灯下,石膏也就成了红的。你只能说“石膏在白色光下是白的”——这不是一句废话吗?
纹理实际上是对漫反射率的一个摹拟,准确的说,纹理摹拟的是物体表面在白色漫射光照下,各点的反射率。而材质反映的是物体在环境光、漫射光、直射光甚至自发光照射下的反射率,仅此而已,没有什么内部外部,本质表象的。
一个经典的比喻就是:
同样的花纹印在纸上和布上的效果会不一样,
为什么效果不同?因为布和纸对光线的反射不一样
在这个例子中,花纹就是纹理,布和纸就是材质
实质上,纹理给出物体表面各点的颜色值,而材质则描述表面与光线相互作用的特性,也就是说光线在这种材质的表面遵循什么样的行为规律。
补充一个个人入门学习3D的一个疑问:
材质为什么不作为顶点数据结构的一个成员,而是作为渲染状态被单独指定(或作为着色器使用的常量)?
按理说,材质作为顶点的一个固有属性,作为顶点数据结构的一个成员是无可厚非的,就像顶点的纹理坐标或者法向量成员一样。其实原因是因为为了更有效的利用内存,因为通常情况下,一堆三角形顶点虽然不在同一个平面,而且颜色、纹理或法向量不同,但他们的材质却通常一样,例如轮胎,整个轮胎材质是一样的,而轮胎由成千上万个三角形面片描述,如果每个三角形顶点到包含这个相同的材质信息,势必对内存是个很大的浪费,如下图:
上图中,不仅整个轮胎是相同材质,整个挡风玻璃是相同材质,同理整个前照灯也是相同材质。
相关文章推荐
- 材质和纹理的区别
- 贴图、纹理、材质的区别是什么?
- 材质和纹理的区别
- 贴图、纹理、材质的区别是什么?
- 贴图、 纹理、材质的区别
- 【技术美术】贴图、纹理、材质的区别
- Texture(纹理)和Material(材质)概念上的区别
- 材质和纹理的区别
- C#类和结构区别的总结(一)
- DataGrid,DataList,Repeater等数据访问控件的区别及总结
- 关于 byval 与 byref 的区别分析总结
- getElementBy区别和总结
- InnoDB和MyISAM区别总结
- etElementByID getElementsByName getElementsByTagName的区别和总结 +js+Mxl+xmlhttp
- 一幅图总结出外国人和中国人的区别
- post与get区别总结
- 总结C++与C#的区别
- const static readonly等关键字的区别(欢迎高手指正我的总结)
- sql2000各个版本区别总结第1/3页
- Java多线程程序设计-区别与总结(it168)