材质和明暗器之间的区别


27

在游戏中,材料通常仅影响对象的视觉外观。视觉外观受着色器影响。那么就术语而言,材质和着色器之间是否有区别?您是否应该为一种材料编写一个着色器?


1
我见过一些引擎,其中材质为着色器+漫反射纹理+凹凸贴图,但我认为没有一个简洁的定义。
罗伊(Roy T.)

3
@RoyT。这些引擎会误用术语。甲材料不等同于一个着色器 -着色器是一个程序,一个材料是一串数据值。2个不同的着色器程序可以渲染相同的材质并获得不同的结果。
bobobobo

@bobobobo或更常见的是,通过插入不同的纹理,参数值等,单个着色器将用于渲染许多材质。
内森·里德

Answers:


29

材料是描述给定材料表面外观的属性组合。

某些引擎对不同的材质使用不同的着色器,在这种情况下,材质定义可能如下所示:

[Material]
Shader=NormalMappedSpecular.glsl
Texture1=Rock.png
Texture2=RockNormal.png
Texture3=RockSpecular.png

其他引擎对所有对象都使用一个着色器(或者引擎根据参数,GPU的功能以及其他因素(例如距离)来决定使用哪种着色器),在这种情况下,材质看起来像这样:

[Material]
Ambient=0.5
Specularity=0.7
DiffuseMap=Rock.png
NormalMap=RockNormal.png
SpecularMap=RockSpecular.png

2
难道不能将材料的定义扩展到游戏引擎所支持的所有感觉吗?例如,材料在撞击,踩踏时会产生的声音或其摩擦参数?
didierc

10

材料指定对象如何响应于光。

有两个常用参数:

  • Kd:对光的漫反射
  • Ks:对光的镜面反射
  • Ns:“发亮”
  • map_Kd:纹理

现在说您有一个材质渲染的三角形MMKd =(1,0,0)(红色漫反射),Ks =(1,1,1)(白色镜面反射),Ns = 25(镜面高光将非常清晰并且不会模糊)并且没有map_Kd(没有纹理)。

着色器的工作是使用数学方法得出三角形的顶点位置,灯光的位置,材质颜色值,并找出三角形应显示的颜色。顶点着色器在每个顶点执行一次“着色计算”,然后在三角形上插值颜色。

着色器中用于计算顶点扩散响应的常见操作是:

// hlsl
float3 vertexToLight = normalize( lightPos.xyz - vertexPos.xyz ) ;

float3 diffuseColor = max( dot( vertexToLight, vertexNormal ), 0.0 ) * kd * lightColor ;

3

材料是应用于几何图形的颜色和图案的材料。纹理是材料的组成部分。

着色器是一个小程序,它允许在运行时渲染此材质。着色器的好处是,您可以做所有事情,从简单地渲染材质到添加动态效果(例如高光高光和反射),一直到极其聪明的事情(例如在击中子弹的墙壁上渲染假孔)都可以。

因此,在回答您的问题时-是的,两者之间也有一些重叠-您可以制作红色材质或编写着色器以将事物渲染为红色,但是这两种方法都可以使您完成很多事情不能与其他。

不,您不需要每种材质一个着色器。尽管一种材质需要渲染着色器,但如果需要,您可以为所有材质使用一个材质球。他们会做一些特定的事情,因此,例如,如果您希望所有东西都闪闪发光,则可以只写一个。

着色器的一个很好的例子是战争工具。场景有一组材质,但是当您按下按钮切换到战术视图时,渲染这些材质的着色器会发生变化,因此外观看起来轮廓分明,并且通常有所不同。在蝙蝠侠中也发生了同样的事情:阿卡姆的“侦探模式”。


1
从技术上讲,纹理本身并不是真正的材料,它通常是材料的一部分
bobobobo 2012年

1

虽然很晚,但是有一个“骗子”可以帮助您更好地理解。

材质是为该绘制调用附加到特定着色器的所有内容。

例如,在上面的答案中,您具有以下材料:[Material] Shader = NormalMappedSpecular.glsl Texture1 = Rock.png Texture2 = RockNormal.png Texture3 = RockSpecular.png

它将翻译为您将使用执行法线贴图和镜面反射计算的着色器进行渲染,并且它将使用该着色器中的3个纹理。

稍后,您可以重复使用具有其他3种不同纹理(例如car,carNormal和carSpecular)的同一个着色器,您将使用不同的材质执行不同的绘制调用,只是因为更改了着色器参数。

总而言之,材料就是使用具有相同参数(纹理,均匀性,属性)的相同着色器唯一创建绘制调用的所有内容。

我希望这有助于更好地可视化它


是这样的:着色器是类,而材质是实例?
孟加拉邦
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.