计算机图形学入门24:材质与外观
1.前言
想要得到一个漂亮准确的场景渲染效果,不只需要物理正确的全局照明算法,也要了解现实中各种物体的表面外观和在图形学中的模拟方式。而物体的外观和材质其实就是同一个意思,不同的材质在光照下就会表现出不同的外观,所以外观是光线和材质共同作用的结果。
在自然界中有成千上万的材质表现,因此本文就介绍一下现实中存在的各种类型的材质以及内在的原理。
2.什么是材质
在自然界中的光线与材质共同作用表现出不同的外观,那么在图形学中材质表示什么呢?

材质就是光线在物体表面的反射方式,而无论什么材质,必定满足物理正确的渲染方程,那么渲染方程中和光的反射有关的是哪个呢?
只有BRDF一项和光的反射方式有关,因此材质其实就是BRDF。
3.材质分类
3.1 漫反射材质
漫反射材质(Diffuse / Lambertian Material)是比较常见的一种材质,往往出现在粗糙的表面,例如木材等。

对于漫反射材质,任何方向的入射光线照射到表面时,都会向半球方向均匀反射。如下图所示。

假设物体表面是白色的,不发光也不吸收光,且入射的光都是大小相同且方向均匀的。那么根据能量守恒,所有反射出去的光线的能量(Irradiance)等于所有入射光线能量(Irradiance),并且反射的光也是大小相同且方向均匀的。
那么,就可以把这个渲染方程写出来。

这里入射的Radiance是常数,BRDF(Diffuse)也是常数,这两项就可以拿出去,整个式子就变成了对半球上一个cosθ的积分,积分出来是π。
那么整个式子就变成了 Lo=πfrLi ,又因为能量守恒,入射的Radiance等于出射的Radiance,所以 Li=Lo ,因此 fr=1/π。
这时候就是完全不吸收能量的BRDF,这里定义一个反射率albedo(ρ)的概念,这个值可以是一个一维标量,也可以是RGB等三维标量,让反射率albedo在0到1之间,这样就可以引入不同颜色的BRDF,BRDF的值就是albedo / π,取值范围是[0, 1/π]。
3.2 镜面反射材质
有完美反射的镜面反射材质(Ideal reflective material),在现实中不多见,例如镜子等。

对于镜面反射材质,入射光线照射到表面后,会沿反射方向反射,入射光线与面法线的夹角等于反射光线与面法线的夹角。如下图所示。

反射方向计算相对容易,如下图所示,已知入射光ωi、入射角θi、法线方向n,求反射光ωo。

根据向量的平行四边形法则,入射光ωi加反射光ωo的结果为入射光在法线方向的投影的2倍,投影可直接点乘求得,因此可得。

3.3 光泽反射材质
光泽反射材质(Glossy material)也比较常见,介于漫反射与镜面反射之间,看起来比镜面反射模糊,例如抛光金属、铜镜等。

对于光泽反射材质,入射光线照射到表面时,会沿反射方向的一定范围内反射。如下图所示。

3.4 折射材质
折射材质(Refractive material)也比较多见,例如水、玻璃等。

折射材质往往也有部分反射,光线在穿过两种透明介质之间的平面时,部分能量会折射入物体内部,其余的能量会反射出去。如下图所示。

在折射时入射角θi与折射角θt的关系与平面两侧透明介质的折射率有关,当光线从折射率小的透明物体(例如空气)射入折射率大的透明物体(例如水)中时,折射角会小于入射角,如下图所示。

折射定律(Snell’s Law)满足公式如下。其中ni,nt分别代表平面两边透明介质的折射率(IOR),如上图所示上半部分为ni,下半部分为nt。

通过折射定律可以算出折射角度。
根据三角函数的关系如下。

结合折射定律公式,推导出折射角的余弦值cosθt如下。

注意,这里是有求平方根操作的,而当根号内小于0时求平方根是无意义的,那么根号内会有小于0的情况吗?
显然,当ni/nt大于1,并且θi的比较大时,可能会出现求折射角无意义的情况,也就是全反射现象(Total Internal Reflection)。如下图所示。

就是当入射介质的折射率大于折射介质的折射率,这样就有可能出现没有折射的全反射现象。下面举个现实中的例子。
当人在水底往各个方向去看,只能看到一个锥形的区域。如下图所示。

常见物体的折射率如下。

对于折射来说BRDF(Bidirectional Reflectance Distribution Function,双向反射分布函数 )自然就不适用了,折射适用于BTDF(Bidirectional Transmittance Distribution Function,双向透射分布函数 ),两者可以统称为BSDF(Bidirectional Scattering Distribution Function,双向散射分布函数)。
3.5 菲涅尔反射
菲涅尔反射(Fresnel Reflection)是现实中很常见的现象。入射光线与平面的夹角除了影响折射的效果以外,也影响反射的效果,如下图所示。

从图中可以看出,桌面的反射效果和视线与桌面的夹角有关,视线越平行桌面,桌面的反射效果越强,书的倒影越清晰;视线越垂直桌面,桌面的反射效果越弱,书的倒影越模糊。
简单来说,就是物体的反射率其实与观察角度有关,对于绝缘体来说观察角度与法线夹角越大,反射的程度就越高,如下图中的红线。

而导体则与绝缘体不同,他的反射率与夹角呈如下关系。

金属的菲涅尔反射现象确实不明显,从哪个视角观察反射效果都比较清晰。
对于任意一个物体的精确反射率的计算公式如下。

这里考虑了两个极化,然后再求平均,公式的推理过程暂时不必深究,只要知道,物体的反射率和入射角度、入射空间的折射率、物体的折射率有关就可以了,通过该公式就能得出正确的反射率。
对于精确的算法来说,计算量是非常大的,因此有人提出了个简单的算法,大幅降低计算量来得到比较近似的效果,如下所示。

3.6 微平面材质
所谓微平面材质(Microfacet Material)就是当从远处看物体表面时,看不到物体细节,看到的是最终表面对光形成总体的效果。如下图所示。

说到微平面材质就不得不提微平面理论(Microfacets Theory),微平面理论就是从微观的角度去分析,认为任意物体的表面都是由许许多多的更小的镜面所组成,并且每个微小的平面都有自己的法线方向。

当这些微小的镜面的法线分布较为集中一致(从数学上看它们的方差较小)的时候,从宏观角度来看,物体的表面会显得比较光滑,镜面反射比较明显;反之,当这些微小镜面的法线方向分布较为杂乱的时候,物体的表面则会显得相对粗糙,漫反射比较明显。如下图所示。

而根据微平面理论和BRDF,也就可以推导出微平面BRDF(Microfacet BRDF)。

微平面BRDF首先考虑菲涅尔反射F(i, h),然后考虑法线分布D(h),这里又用到了半程向量h(入射方向与观察方向的中间向量hDir),只有当微表面的法线方向在半程向量周围一个限定的范围之内时,才能将光反射出去。
中间那一项G(i, o, h)是考虑微表面之间的光线遮挡,比如当光线接近平行平面的时候,入射光线可能无法照射到一些微平面,这种情况称为Shadowing(如下图左),或者反射光线无法正常到达人眼,称为Masking(如下图右)。也就是当光线越接近平行物体表面的时候,这一项越容易发生。

微平面材质可以描述各种各样物体表面,比如金属、木质、橡胶等。
3.7 各向同性/各向异性材质

一些金属表面,往往会进行一些磨砂处理,在表面形成沿一定方向的划痕(如上图所示),也就是微表面存在明确的方向性,从而影响反射的效果,这样的材质就称其为各向异性材质(Anisotropic Materials);反之微表面不存在一定的方向性或者方向性很微弱的材质就称为各向同性材质(Isotropic Materials)。材质就可分为这两类。如下图所示。

从BRDF上考虑:BRDF原来是两个方向的函数θi、φi是输入方向,θr、φr是输出方向。如果BRDF满足在方位角上旋转,得到的还是相同的BRDF(沿一个方位角θ或φ的中心旋转,相对位置不变),就称为各向同性;如果相对位置改变,BRDF改变,则称为各向异性。

对于各向同性材质,BRDF只和相对的方位角有关,即φr-φi,因此原来四维的BRDF,就可以写成三维的。
所有的BRDF,由于具有可逆性(交换入射方向和出射方向,得到的BRDF的值相同),因此相对方位角不用考虑正负,因此也可以写成方位角之差的绝对值,不用考虑大小或者正负关系。
4.BRDF的性质
1.BRDF是非负的(Non-negativity),表示了能量的分布。

2.BRDF是线性的(Linearity),可以拆分和叠加。

3.BRDF是可逆的(Reciprocity principle),调换入射方向和出射方向依然成立。

4.BRDF满足能量守恒(Energy conservation),入射能量等于反射能量(存在能量吸收的情况时,入射能量大于反射能量)。

相关文章:
计算机图形学入门24:材质与外观
1.前言 想要得到一个漂亮准确的场景渲染效果,不只需要物理正确的全局照明算法,也要了解现实中各种物体的表面外观和在图形学中的模拟方式。而物体的外观和材质其实就是同一个意思,不同的材质在光照下就会表现出不同的外观,所以外观…...
FTP、http 、tcp
HTTP VS FTP HTTP :HyperText Transfer Protocol 超文本传输协议,是基于TCP协议 FTP: File Transfer Protocol 文件传输协议, 基于TCP协议, 基于UDP协议的FTP 叫做 TFTP HTTP 协议 通过一个SOCKET连接传输依次会话数…...
【虚幻引擎】UE4初学者系列教程开发进阶实战篇——生存游戏案例
一、课程体系 1 学前必读 2 Character类相关基础 -人物移动控制 -动画蓝图 3 常见游戏机制基础 -碰撞器、触发器 -物体使用接口 -视角切换 4其他相关设计 -背包系统 -锻造系统 -物体破碎效果 -简易种植系统 -互动物体动画 5课程结语 二、UI部分 思维导图部分 实操部分 …...
认识并理解webSocket
今天逛牛客,看到有大佬分享说前端面试的时候遇到了关于webSocket的问题,一看自己都没见过这个知识点,赶紧学习一下,在此记录! WebSocket 是一种网络通信协议,提供了全双工通信渠道,即客户端和服…...
Scissor算法-从含有表型的bulkRNA数据中提取信息进而鉴别单细胞亚群
在做基础实验的时候,研究者都希望能够改变各种条件来进行对比分析,从而探索自己所感兴趣的方向。 在做数据分析的时候也是一样的,我们希望有一个数据集能够附加了很多临床信息/表型,然后二次分析者们就可以进一步挖掘。 然而现实…...
Linux-磁盘空间不足的清理步骤(详细版本)
当 Linux 服务器出现 “no space left on device” 错误时,意味着磁盘空间已满,需要采取一些措施来清理磁盘,可以根据下面步骤依次清理: 1. 检查磁盘使用情况 首先,使用 df 和 du 命令检查磁盘使用情况,找出哪些目录占用了大量空间。 可以通过如下命令来查询 df -h举例…...
go-redis源码解析:连接池原理
1. 执行命令的入口方法 redis也是通过hook执行命令,initHooks时,会将redis的hook放在第一个 通过hook调用到process方法,process方法内部再调用_process 2. 线程池初始化 redis在新建单客户端、sentinel客户端、cluster客户端等,…...
蓝桥杯备赛攻略(怒刷5个月拿省一)
十五届蓝桥杯结束,up也在这次比赛中获得了不错的成绩,为了帮助大家在25年蓝桥杯上获得好的成绩,我将根据今年的经验写一份蓝桥杯的备赛攻略,希望能帮到大家。 参赛准备 蓝桥杯算法赛必须指定一个编程语言赛道报名,也就…...
springboot项目jar包修改数据库配置运行时异常
一、背景 我将软件成功打好jar包了,到部署的时候发现jar包中数据库配置写的有问题,不想再重新打包了,打算直接修改配置文件,结果修改配置后,再通过java -jar运行时就报错了。 二、问题描述 本地项目是springBoot项目…...
倒计时 2 周!CommunityOverCode Asia 2024 IoT Community 专题部分
CommunityOverCode 是 Apache 软件基金会(ASF)的官方全球系列大会,其前身为 ApacheCon。自 1998 年以来,在 ASF 成立之前,ApacheCon 已经吸引了各个层次的参与者,在 300 多个 Apache 项目及其不同的社区中探…...
使用OpenCV在按下Enter键时截图并保存到指定文件夹
使用OpenCV在按下Enter键时截图并保存到指定文件夹 在这篇博客中,我们将介绍如何使用OpenCV库来实现一个简单的功能:在按下Enter键时从摄像头截图并保存到指定的文件夹中。这个功能可以用于各种应用,例如监控系统、视频捕捉等。 前置条件 …...
汇川伺服 (4)FFT、机械特性、闭环、惯量、刚性、抑制振动
一、参数解释 二、FFT 三、机械特性分析 四、多级配方与对象字典 对机组网配方 对象字典 五、InoServoShop 主要是用于调试620P620N将压缩报解压后不需要安装就可以直接使用 六、InoDriveWorkShop 主要是调试660 670 810 520 等系列 惯量识别 Etune Stune 惯量比调试 大惯…...
Unity3D中使用并行的Job完成筛选类任务详解
在Unity3D开发中,处理大量数据或执行复杂计算时,性能往往成为制约因素。为了提升游戏或应用的性能,Unity提供了强大的Job System,它允许开发者利用多线程和并行计算来优化数据处理过程。本文将详细介绍如何在Unity中使用并行的Job…...
汽车信息安全--欧盟汽车法规
目录 General regulation 信息安全法规 R155《网络安全及网络安全管理系统》解析 R156《软件升级与软件升级管理系统》解析 General regulation 欧洲的汽车行业受到一系列法律法规的约束,包括 各个方面包括: 1.安全要求:《通用安全条例&a…...
@SpringBootApplication 注解
什么是 SpringBootApplication SpringBootApplication 是 Spring Boot 提供的一个核心注解,它是一个组合注解,用于简化 Spring Boot 应用程序的配置。这个注解通常标注在主类上,用于标识一个 Spring Boot 应用的入口。通过这个注解ÿ…...
java项目总结4
目录 1.正则表达式 2.爬虫 3.时间 4.包装类 5.工具类之Arrays 6.Lambda 1.正则表达式 用于验证字符串是否满足自己所需要的规则。方法:matches 注意:\在Java中有特殊涵义,是将其它的意思本来化,假设"是用来引…...
JavaScript中的数组方法总结+详解
##JavaScript中的数组方法总结详解 用来总结和学习,便于自己查找 文章目录 一、数组是什么? 二、改变原数组的api方法? 2.1 push() 在末端添加 2.2 pop࿰…...
环境变量Path
PATH 是一个环境变量,它在操作系统中扮演着非常重要的角色。它定义了系统在查找可执行文件时应该搜索的目录列表。当你在命令行中输入一个命令时,操作系统会按照 PATH 变量中定义的目录顺序来查找这个命令对应的可执行文件。 主要作用 查找可执行文件&a…...
基于jeecgboot-vue3的Flowable流程-集成仿钉钉流程(四)支持json和xml的显示
因为这个项目license问题无法开源,更多技术支持与服务请加入我的知识星球。 1、相应的界面前端代码 <template><div class"formDesign"><FlowDesign :process"process" :fields"fields" :readOnly"readOnly&quo…...
【k8s安装redis】k8s安装单机版redis实现高性能高可用
文章目录 简介一.条件及环境说明:二.需求说明:三.实现原理及说明四.详细步骤4.1.创建configmap 配置文件4.2.创建StatefulSet 配置4.3.创建service headless 配置 五.安装说明 简介 本文将根据在k8s环境中搭建【伪】单机模式的redis实例。由于共享存储的…...
Obsidian插件Quiz Generator:用AI将笔记自动转化为互动测验
1. 项目概述:用AI将笔记变成互动测验 如果你和我一样,是个重度Obsidian用户,同时又经常需要备考、复习或者制作教学材料,那你肯定体会过手动从笔记里出题的痛苦。把一段段精心整理的知识点,转化成一道道能检验理解程度…...
TeamHero:基于规则引擎的智能任务自动化分配系统设计与实战
1. 项目概述与核心价值 最近在GitHub上看到一个挺有意思的项目,叫“TeamHero”,作者是sagiyaacoby。乍一看这个名字,你可能会联想到团队协作或者英雄联盟,但实际上,它是一个专注于自动化团队管理与任务分发的工具。简…...
【大模型缓存优化终极指南】:SITS大会首发3大工业级缓存策略+实测QPS提升270%的落地代码
更多请点击: https://intelliparadigm.com 第一章:大模型缓存策略优化:SITS大会 缓存瓶颈与SITS大会共识 在2024年上海智能技术峰会(SITS)上,来自Meta、阿里达摩院与清华智谱的联合工作组首次公开了大语言…...
一文分清Agent与Skill
在AI应用开发或学习过程中,很多人都会陷入一个困惑:Agent和Skill到底有什么区别?其实只要抓住“定位”和“能力”两个核心,就能轻松拨开迷雾,把这两个概念彻底分清。 先懂Skill 先从我们最熟悉的Skill说起。Skill是封装…...
Gemini3.1Pro如何实现视觉平移不变性
“视觉 Transformer 的平移不变性(translation invariance)是否能在 Gemini 3.1 Pro 中实现?”这个问题的难点在于:平移不变性是视觉模型的归纳偏置,而 Gemini 3.1 Pro 是多模态大模型(LLM视觉/多模态能力&…...
基于Qlearning强化学习和人工势场融合算法的无人机航迹规划matlab仿真
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 dz…...
Anylogic建模效率翻倍秘诀:活用‘智能体类型’实现模块化设计与复用
Anylogic建模效率翻倍秘诀:活用‘智能体类型’实现模块化设计与复用 在复杂系统仿真领域,Anylogic凭借其多方法建模能力已成为工业级解决方案的首选工具。但当我们面对包含数百个交互实体的产线仿真时,传统逐个创建智能体的方式不仅效率低下&…...
AI大会停车难?2026官方未公开的预约分流机制(附内测版停车码申领通道)
更多请点击: https://intelliparadigm.com 第一章:2026年AI技术大会停车指引 为保障2026年AI技术大会(Shanghai AI Summit 2026)参会者高效、安全抵达主会场,主办方联合浦东智能交通调度中心部署了新一代AI泊车引导系…...
JavaScript条形码生成技术:JsBarcode架构设计与跨平台实现方案
JavaScript条形码生成技术:JsBarcode架构设计与跨平台实现方案 【免费下载链接】JsBarcode Barcode generation library written in JavaScript that works in both the browser and on Node.js 项目地址: https://gitcode.com/gh_mirrors/js/JsBarcode 在现…...
炉石传说HsMod插件终极指南:55项功能完整配置与使用教程
炉石传说HsMod插件终极指南:55项功能完整配置与使用教程 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod是基于BepInEx框架开发的炉石传说多功能增强插件,为玩…...
