作者:00
链接:https://www.zhihu.com/question/25745472/answer/709030742
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
这几个概念确实挺容易混淆的,我花时间整理了一下。
可以这么总结:
Material 是表现 Shading 的数据集。其他几个概念都是生成这一数据集的资源或者工具。
这么多概念,无非是为了完成一个共同目标:用计算机表现真实可信的 Shading。
Shading 是真实世界中的光影效果,它是由物体表面材质、灯光、观察者的视角等多种因素共同决定的。要实现计算机的模拟生成,是一个非常复杂的过程。不过它的原理大概可以简化为一个函数:
Intensity = Material (Light, Eye)
也就是说,光影的强度,是由 a.照在材质上的光 b.视线 共同决定的。
如何制造 Shading 效果?
万物看起来不尽相同,它们有各自的材质和纹理。
纹理(Texture)是什么?
Texture is pattern or image applied to a surface to change its color, shininess or just about any other part of its appearance. —— Texture introduction – Udacity
纹理就是一段有规律、可重复的图像。利用纹理,我们可以非常取巧地让三维物体看起来更真实。
贴图可以说是最简单的材质方法:
- 选定物体表面的某些区域
- 更改这个区域的一些属性(如颜色、反光度、透明度等)
那么 UV Mapping 又是什么?跟 Texture Mapping 有什么区别呢?
可以这么理解,Texture Mapping 是目标,把材质用一种规则映射到物体表面。而 UV Mapping 就是映射的规则。在这个规则中,给三维体每一个顶点增加两个值 U 和 V,它们记录了三维表面和二维表面的坐标对应关系:
via Texture UVs
有了映射关系,我们就可以分门别类地把影响光照的不同参数,都通过图片映射到三维几何体上。
贴上皮肤的方法虽好,但是局限也很明显。如果没有合适的图像,或者要创建真实世界中罕见的材质,皮肤就不好找了。这个时候需要让程序帮忙「生长」出新的皮肤。
我们把这种程序叫做 Shaders。Shading 是始终如一的终极目标,那么应该就能明白为什么实现这个目标的程序叫做 Shaders 了。
它实际上是一个程序片段、一系列的指令,可以将三维 Mesh(网格)以指定方式与颜色、贴图等组合,完成复杂的计算输出(渲染器可读取的点和颜色的对应关系),会对屏幕上的每个像素同时下达命令。也就是说,代码必须根据像素在屏幕上的不同位置执行不同的操作。就像活字印刷,你的程序就像一个 function(函数),输入位置信息,输出颜色信息,当它编译完之后会以相当快的速度运行。
Ref