在计算机图形学中,材质和纹理之间有什么区别?
答案 0 :(得分:35)
在OpenGL中,材质是一组系数,用于定义照明模型与曲面的交互方式。特别地,每个颜色分量(R,G,B)的环境,漫反射和镜面反射系数被定义并应用于表面并有效地乘以撞击表面的每种颜色/颜色的光量。然后将最终的发射系数添加到每个颜色分量中,使对象看起来发光而不会与其他对象实际交互。
另一方面,纹理是一组1维,2维,3维或4维位图(图像)数据,根据表面应用和插值。到顶点纹理坐标。纹理数据改变表面的颜色,无论是否启用照明(并且取决于纹理模式,例如贴花,调制等)。经常使用纹理来向表面提供子多边形水平细节,例如,将重复的砖块和砂浆纹理应用于四边形以模拟砖墙,而不是模拟每块砖的几何形状。在经典(固定管道)OpenGL模型中,纹理和材质有些正交。在新的可编程着色器世界中,该线已经模糊了很多。经常使用纹理以其他方式影响照明。例如,凹凸贴图是用于扰动曲面法线以实现光照的纹理,而不是像常规“图像”纹理那样直接修改像素颜色。
答案 1 :(得分:17)
这个问题暗示了对各种计算机图形概念的常见误解。它是由着色器前思考和编码产生的。
纹理只不过是一系列一个或多个图像的容器,其中图像是值的某些维度(1D,2D等)的数组,其中每个值可以是介于1和1之间的向量。 4个数字。纹理还有一些特殊的技术可以访问它们的值,这些技术允许插值和最小化采样中的混叠伪像。
纹理可以包含颜色,但纹理 不包含颜色。纹理可用于改变对象表面的参数,但并非所有纹理都可用于。
纹理与“材料”没有直接关联;你可以将它们用于各种各样的事情(或根本没有)。
材料是照明的概念。给定特定光和表面上的点,在该点处从该表面反射的光的强度(即:颜色)由照明方程控制。该等式是许多参数的函数。但这些参数分为两类。
一类光方程参数是光参数。这些描述了光源的特性。点光源与定向灯对射灯。光强度(再次:颜色)是另一个参数。由于强度本身可以根据表面点相对于光的方向而变化(想想手电筒或聚光灯),因此可以从纹理访问强度。这就是有多少游戏在黑暗的房间里投射手电筒。
另一类光方程参数描述了该点表面的特征。这些被称为材料参数。材料参数或简称材料描述了所讨论的表面的重要特性。那时的正常是重要的。还有漫反射(颜色),镜面反射,镜面光泽(Phong / Blinn-Phong的指数)和各种其他参数,具体取决于您的光照方程的综合程度。
这些价值来自哪里?光参数往往在世界上是固定的。灯光不会按对象移动(但如果您在对象空间中进行照明,则每个对象都有自己的灯光位置)。光强度可以变化。但这主要是它;帧之间发生任何其他事情,而不是在单帧渲染中。所以大多数光参数都是着色器制服。
材料参数可以来自各种来源。有效地使用着色器均匀意味着表面上的所有点都具有相同的值。因此,您可以使漫射颜色来自均匀,这将使表面具有均匀的颜色(当然,通过照明进行修改)。您可以通过将顶点属性作为顶点属性传递或从其他属性计算它们来改变每顶点的材质参数。
或者您可以通过将纹理映射到曲面来提供参数。此映射涉及将纹理坐标与顶点位置相关联,以便纹理直接附着到曲面。在渲染过程中,纹理在该位置进行采样,该值用于执行光照。
您熟悉的最常见纹理“颜色纹理”只是改变表面的漫反射。纹理在表面的每个点提供漫反射颜色。
这不是纹理的唯一功能。您可以轻松地改变表面上的镜面光泽度。或光强度。或其他任何事情。
纹理是工具。材料只是一组光方程参数。
答案 2 :(得分:12)
我对这些术语的看法是什么:
纹理是映射到3D对象的图像。
材质模拟物理材质。以“玻璃”为例。您无法使用普通纹理贴图生成玻璃效果。它具有如何在不同角度反射和折射光的参数。材质也可以是简单的纹理贴图,因此有时这些术语的含义相同。
答案 3 :(得分:6)
尽管这些术语可以互换使用,但通常将位图称为纹理。
虽然完全定义的纹理(具有光照属性,凹凸贴图等)通常会被称为材质。
但我要强调,根据所使用的工具,他们的术语将被相关社区使用。