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

概念整理

可以这么总结:

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 https://classroom.udacity.com/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 了。

https://unity3d.com/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](https://classroom.udacity.com/courses/cs291/)

  • [贴图、纹理、材质的区别是什么? - 知乎](https://www.zhihu.com/question/25745472)

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

  • [What are the different texture maps for? | Poliigon Help Center](https://help.poliigon.com/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](https://www.wikiwand.com/zh/%E4%BD%8D%E7%A7%BB%E8%B4%B4%E5%9B%BE)

  • [A Gentle Introduction to Shaders - Unity](https://unity3d.com/es/learn/tutorials/topics/graphics/gentle-introduction-shaders)

  • [GLSL - Wikiwand](https://www.wikiwand.com/zh/GLSL)

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

  1. 怎么看电脑系统是win几_一文看懂arm架构和x86架构有什么区别

    一文看懂arm架构和x86架构有什么区别 本文主要介绍的是arm架构和x86架构的区别,首先介绍了ARM架构图,其次介绍了x86架构图,最后从性能.扩展能力.操作系统的兼容性.软件开发的方便性及可使用 ...

  2. mysql创建非聚集索引_一文看懂聚集索引和非聚集索引的区别

    一.深入浅出理解索引结构 实际上,可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonclu ...

  3. 从零开始系列(四):一文看懂arm架构和x86架构有什么区别

    从零开始系列(四):一文看懂arm架构和x86架构有什么区别 相关系列文章推荐:   从零开始系列(一):在github上搭建自己的博客   从零开始系列(二):数据库基础篇   从零开始系列(三): ...

  4. angular 字符串转换成数字_一文看懂Python列表、元组和字符串操作

    好文推荐,转自CSDN,原作星辰StarDust,感觉写的比自己清晰-大江狗荐语. 序列 序列是具有索引和切片能力的集合. 列表.元组和字符串具有通过索引访问某个具体的值,或通过切片返回一段切片的能力 ...

  5. 无处 不在的无线智能——6g 的关键驱动与研究挑战_一文看懂什么是 6G

    原标题:一文看懂什么是 6G 2020年行将结束,随着5G网络的建设推进,以及3GPP R16版本的冻结,越来越多的人将关注焦点转移到6G身上. 7月14日,韩国三星电子发布了白皮书<下一代超连 ...

  6. 用户画像标签维度_一文看懂用户画像标签体系(包括维度、应用场景)

    一文看懂用户画像标签体系(包括维度.应用场景) 互联网相关企业在建立用户画像时一般除了基于用户维度(userid)建立一套用户标签体系外,还会基于用户使用设备维度(cookieid)建立相应的标签体系 ...

  7. 判别两棵树是否相等 设计算法_一文看懂生成对抗网络 - GANs?(附:10种典型算法+13种应用)...

    生成对抗网络 – GANs 是最近2年很热门的一种无监督算法,他能生成出非常逼真的照片,图像甚至视频.我们手机里的照片处理软件中就会使用到它. 本文将详细介绍生成对抗网络 – GANs 的设计初衷.基 ...

  8. mysql删除分表键_一文看懂 MySQL 分区和分表,提高表增删改查效率

    原标题:一文看懂 MySQL 分区和分表,提高表增删改查效率 作者:冯帅,精通Oracle. MySQL. 擅长异构数据库数据同步及迁移.数据库的设计和调优,对高可用方案有深入研究. MySQL分区和 ...

  9. 天线巴伦制作和原理_一文看懂巴伦(功能原理、性能参数、基本类型)

    原标题:一文看懂巴伦(功能原理.性能参数.基本类型) 巴伦(英语为balun)为一种三端口器件,或者说是一种通过将匹配输入转换为差分输出而实现平衡传输线电路与不平衡传输线电路之间的连接的宽带射频传输线 ...

最新文章

  1. sqlite3自增key设定(创建自增字段)
  2. python用户注册(基于django)
  3. kerberos的故事2
  4. python做abaqus后处理_python进行abaqus后处理的二次开发,我想提取odb文件中的nodeSet,结果总提示Keyerror,请各位大神指教。...
  5. java抓取动态生成的网页
  6. sed 插入多行_文本三剑客之sed
  7. (6)java的内存泄露问题
  8. lato字体可以商用吗_Google Fonts最受欢迎25款,免版权字体
  9. Pgadmin4转圈圈无法进入到界面(pgadmin v4一直卡在loading页面)
  10. mysql 分区原理_mysql 原理~ 分区表
  11. c语言用system打出黑桃,C语言的随机发牌程序(红桃、黑桃、梅花、方块)
  12. MessagingTimeout: Timed out waiting for a reply to message ID
  13. String Shifting
  14. python循环结构教学设计_Python程序设计 循环结构说课稿
  15. 高德 面积计算公式 js版
  16. 解决:更改短信中心号码不能及时更新显示
  17. 接口测试 | 如何高效管理接口文档
  18. 第1章第8节:如何删除、复制和隐藏幻灯片 [PowerPoint精美幻灯片实战教程]
  19. 计算机二级第38套excel,38套EXCEL 仪表盘
  20. html网页播放器编辑代码大全

热门文章

  1. 陈松松:刚入门的视频营销新人,需要做哪些准备?
  2. 火狐访问HTTPS网站显示连接不安全的解决方法
  3. @MySQL为表字段添加索引
  4. JRoll 2 使用文档(史上最强大的下拉刷新,滚动,无限加载插件)
  5. Microsoft Dynamics CRM4.0 Data Auditing and Restore (数据审核和恢复)
  6. 加密货币支付卡公司与BCH达成合作
  7. C++ 二分查找函数 lower_bound upper_bound
  8. LeetCode-2 Add Two Numbers
  9. linux桌面创建快捷方式
  10. CBV 验证装饰器的使用