当前位置: 首页 > news >正文

计算机图形学入门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)满足公式如下。其中nint分别代表平面两边透明介质的折射率(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客户端等&#xff0c…...

蓝桥杯备赛攻略(怒刷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 应用的入口。通过这个注解&#xff…...

java项目总结4

目录 1.正则表达式 2.爬虫 3.时间 4.包装类 5.工具类之Arrays 6.Lambda 1.正则表达式 用于验证字符串是否满足自己所需要的规则。方法:matches 注意:\在Java中有特殊涵义,是将其它的意思本来化,假设"是用来引…...

JavaScript中的数组方法总结+详解

##JavaScript中的数组方法总结详解 用来总结和学习,便于自己查找 文章目录 一、数组是什么? 二、改变原数组的api方法?          2.1 push() 在末端添加          2.2 pop&#xff0…...

环境变量Path

PATH 是一个环境变量,它在操作系统中扮演着非常重要的角色。它定义了系统在查找可执行文件时应该搜索的目录列表。当你在命令行中输入一个命令时,操作系统会按照 PATH 变量中定义的目录顺序来查找这个命令对应的可执行文件。 主要作用 查找可执行文件&a…...

基于jeecgboot-vue3的Flowable流程-集成仿钉钉流程(四)支持json和xml的显示

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、相应的界面前端代码 <template><div class"formDesign"><FlowDesign :process"process" :fields"fields" :readOnly"readOnly&quo…...

【k8s安装redis】k8s安装单机版redis实现高性能高可用

文章目录 简介一.条件及环境说明&#xff1a;二.需求说明&#xff1a;三.实现原理及说明四.详细步骤4.1.创建configmap 配置文件4.2.创建StatefulSet 配置4.3.创建service headless 配置 五.安装说明 简介 本文将根据在k8s环境中搭建【伪】单机模式的redis实例。由于共享存储的…...

SEO_2024年最新SEO趋势与核心优化方法介绍

<h1 id"seo2024seo">SEO:2024年最新SEO趋势与核心优化方法介绍</h1> <p>在互联网时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;仍然是网站流量和品牌推广的关键。2024年&#xff0c;SEO领域有许多新的趋势和核心优化方法&#xff0c;帮…...

从松到深:解析组合导航三大模式的演进路径与实战选型

1. 组合导航的底层逻辑与技术演进 第一次接触组合导航系统时&#xff0c;我被这个看似简单的概念惊艳到了——把两种完全不同的定位技术融合在一起&#xff0c;竟然能产生11>2的效果。这就像做菜时的黄金搭档&#xff0c;比如西红柿和鸡蛋单独吃都不错&#xff0c;但炒在一起…...

Git 代码库中找回丢失文件的实用指南

1. 为什么Git能帮你找回丢失的代码&#xff1f; 作为开发者&#xff0c;你一定遇到过这样的场景&#xff1a;不小心执行了rm -rf删错了文件&#xff0c;或者手滑把整个功能模块给覆盖了。这时候千万别慌&#xff0c;Git就像个贴心的时光机&#xff0c;能帮你找回99%的丢失文件。…...

LangGraph 工作流实战:Few-Shot提示赋能大模型精准调用自定义计算工具

1. 为什么需要Few-Shot提示赋能工具调用&#xff1f; 大模型在通用任务上表现惊艳&#xff0c;但遇到需要精确调用自定义工具的场景时&#xff0c;常常会出现"知道但不会用"的情况。比如让GPT-4计算"3172531284724"&#xff0c;它可能直接输出错误答案而非…...

构建全渠道智能通知系统:从高可用架构到用户体验优化

1. 全渠道智能通知系统的核心价值 想象一下这样的场景&#xff1a;你在电商平台下单后&#xff0c;系统立即通过短信发送订单确认通知&#xff1b;当你忘记支付时&#xff0c;APP推送会及时提醒&#xff1b;订单发货后&#xff0c;邮箱里静静躺着物流信息&#xff1b;而站内信则…...

基于AI多因子与流动性模型的黄金再定价分析:4500关口修复后的“黄金坑”是否成立?

摘要&#xff1a;本文通过引入AI多因子定价模型&#xff0c;结合流动性压力识别算法、资金流向追踪系统与宏观变量建模&#xff0c;对黄金从5602美元回落至4099美元后的市场行为进行分析&#xff0c;重点解析抛售驱动逻辑、相关性漂移及4500美元关口的再定价机制。一、AI趋势重…...

LuckyLilliaBot:NTQQ的终极OneBot协议插件完整指南

LuckyLilliaBot&#xff1a;NTQQ的终极OneBot协议插件完整指南 【免费下载链接】LuckyLilliaBot NTQQ的OneBot API插件 项目地址: https://gitcode.com/gh_mirrors/li/LuckyLilliaBot LuckyLilliaBot是一个基于TypeScript开发的NTQQ插件&#xff0c;为QQ客户端提供完整的…...

模电小白必看:3种基本放大电路实战对比(附电路图+避坑指南)

模电入门实战&#xff1a;三大基础放大电路深度解析与避坑指南 刚接触模拟电路时&#xff0c;面对共射极、共集极和共基极这三种基本放大电路&#xff0c;很多初学者都会感到困惑——它们看起来相似&#xff0c;但特性却大不相同。本文将用面包板搭建的真实电路和示波器实测波形…...

ESP32远程识别模块完整指南:如何实现无人机合规飞行

ESP32远程识别模块完整指南&#xff1a;如何实现无人机合规飞行 【免费下载链接】ArduRemoteID RemoteID support using OpenDroneID 项目地址: https://gitcode.com/gh_mirrors/ar/ArduRemoteID 随着全球无人机法规日益严格&#xff0c;FAA和欧盟都要求无人机必须配备专…...

LeaguePrank终极指南:安全打造个性化英雄联盟游戏体验

LeaguePrank终极指南&#xff1a;安全打造个性化英雄联盟游戏体验 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank LeaguePrank是一款基于英雄联盟LCU API开发的个性化定制工具&#xff0c;让玩家能够在不违反游戏规则的前提下…...