700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > opengl地球贴纹理_一文看懂材质/纹理 Material Texture Shading Shader 的区别

opengl地球贴纹理_一文看懂材质/纹理 Material Texture Shading Shader 的区别

时间:2024-03-26 13:46:52

相关推荐

opengl地球贴纹理_一文看懂材质/纹理 Material  Texture  Shading  Shader 的区别

在计算机图形学和三维设计中,有几个容易混淆的概念。今天我们来一举拿下。

概念整理

可以这么总结:

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.

纹理就是一段有规律、可重复的图像。利用纹理,我们可以非常取巧地让三维物体看起来更真实。

方法一:贴上皮肤

贴图可以说是最简单的材质方法:

选定物体表面的某些区域

更改这个区域的一些属性(如颜色、反光度、透明度等)

那么 UV Mapping 又是什么?跟 Texture Mapping 有什么区别呢?

可以这么理解,Texture Mapping 是目标,把材质用一种规则映射到物体表面。而 UV Mapping 就是映射的规则。在这个规则中,给三维体每一个顶点增加两个值 U 和 V,它们记录了三维表面和二维表面的坐标对应关系:

viaTexture UVs /courses/cs291/lessons/124106595/concepts/1703725990923

有了映射关系,我们就可以分门别类地把影响光照的不同参数,都通过图片映射到三维几何体上。这些参数包括:

Diffuse Map 漫反射:模拟一个发光物对物体的方向性影响(Directional Impact)。它是光照模型中最显著的组成部分

Specular/Reflection Map 镜面:模拟有光泽物体上面出现的亮点,它的颜色更接近光而不是物体的颜色

Normal/Bump Map 法线:决定物体形状的垂直于它的法线向量,提供有关物体表面深度的细节。每一种颜色代表了不同的轴向,看起来类似这样:

Displacement Map 位移:使用高度图将经过纹理化的表面的实际几何点位置,沿着表面法线根据保存在纹理中的数值进行移位。相比法线,位移贴图更多用于大规模的地形材质,包括悬崖、岩石等

Ambient Map 环境

Gloss/Roughness Map 光泽

方法二:长出皮肤

贴上皮肤的方法虽好,但是局限也很明显。如果没有合适的图像,或者要创建真实世界中罕见的材质,皮肤就不好找了。这个时候需要让程序帮忙「生长」出新的皮肤。

我们把这种程序叫做 Shaders。

如果你还记得,Shading 是始终如一的终极目标,那么应该就能明白为什么实现这个目标的程序叫做 Shaders 了。

/es/learn/tutorials/topics/graphics/gentle-introduction-shaders

它实际上是一个程序片段、一系列的指令,可以将三维 Mesh(网格)以指定方式与颜色、贴图等组合,完成复杂的计算输出(渲染器可读取的点和颜色的对应关系),会对屏幕上的每个像素同时下达命令。也就是说,代码必须根据像素在屏幕上的不同位置执行不同的操作。就像活字印刷,你的程序就像一个函数,输入位置信息,输出颜色信息,当它编译完之后会以相当快的速度运行。

为什么 Shaders 运行特别快?因为它们常常运行在专门为并行处理而设计的 GPU 上面。

最后一个问题,用什么来写 shaders 程序呢?答案是 OpenGL 着色器语言 (GLSL) 。GLSL 是用类 C 语言写成的,它为图形计算量身定制,包含一些针对向量和矩阵操作的有用特性。

好了,今天涉及到的概念实在太多了。希望对大家进入三维世界玩耍有所帮助。

Ref

[光照基础 - LearnOpenGL-CN](https://learnopengl-cn.readthedocs.io/zh/latest/02%20Lighting/02%20Basic%20Lighting/)

[交互式 3D 图形 - Udacity](/courses/cs291/)

[贴图、纹理、材质的区别是什么? - 知乎](/question/25745472)

[【Shader科普】贴图、纹理、材质的区别-腾讯游戏学院](/community/detail/115074)

[What are the different texture maps for? | Poliigon Help Center](/general-information/what-are-the-different-texture-maps-for)

[法线贴图 - LearnOpenGL-CN](https://learnopengl-cn.readthedocs.io/zh/latest/05%20Advanced%20Lighting/04%20Normal%20Mapping/)

[位移贴图 - Wikiwand](/zh/%E4%BD%8D%E7%A7%BB%E8%B4%B4%E5%9B%BE)

[A Gentle Introduction to Shaders - Unity](/es/learn/tutorials/topics/graphics/gentle-introduction-shaders)

[GLSL - Wikiwand](/zh/GLSL)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。