opengl 纹理贴到对应的位置_材质/纹理 Material, Shading的区别

930bd56698d10ace1a4ca5df9f155c22.png

学习blender材质前应先了解一下以下内容

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

概念整理

英文中文本质释义Material材质数据集表现物体对光的交互,供渲染器读取的数据集,包括贴图纹理、光照算法等Texture mapping纹理贴图)图像映射规则把存储在内存里的位图,通过 UV 坐标映射到渲染物体的表面Shading底纹、阴影光影效果根据表面法线、光照、视角等计算得出的光照结果Shader着色器)程序编写显卡渲染画面的算法来即时演算生成贴图的程序GLSL程序语言OpenGL 着色语言

可以这么总结:

Material 是表现 Shading 的数据集。其他几个概念都是生成这一数据集的资源或者工具。

079842404c63ab74a9a32f34f4a117ae.png

这么多概念,无非是为了完成一个共同目标:用计算机表现真实可信的 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,它们记录了三维表面和二维表面的坐标对应关系:

cc9ee6cb4f5952ed2ca87253fe13fb29.png

via Texture UVs

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

  • Diffuse Map 漫反射:模拟一个发光物对物体的方向性影响(Directional Impact)。它是光照模型中最显著的组成部分
  • Specular/Reflection Map 镜面:模拟有光泽物体上面出现的亮点,它的颜色更接近光而不是物体的颜色
  • Normal/Bump Map 法线:决定物体形状的垂直于它的法线向量,提供有关物体表面深度的细节。每一种颜色代表了不同的轴向,看起来类似这样:
  • Displacement Map 位移:使用高度图将经过纹理化的表面的实际几何点位置,沿着表面法线根据保存在纹理中的数值进行移位。相比法线,位移贴图更多用于大规模的地形材质,包括悬崖、岩石等
  • Ambient Map 环境
  • Gloss/Roughness Map 光泽

方法二:长出皮肤

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

我们把这种程序叫做 Shaders。

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值