计算机图形学入门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),入射能量等于反射能量(存在能量吸收的情况时,入射能量大于反射能量)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/776596.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CH09_JS的循环控制语句

第9章:Javascript循环控制语句 本章目标 掌握break关键字的使用掌握continue关键字的使用 课程回顾 for循环的特点和语法while循环的特点和语法do-while循环的特点和语法三个循环的区别 讲解内容 1. break关键字 为什么要使用break关键字 生活中,描…

MongoDB集群搭建-最简单

目录 前言 一、分片概念 二、搭建集群的步骤 总结 前言 MongoDB分片(Sharding)是一种水平扩展数据库的方法,它允许将数据分散存储在多个服务器上,从而提高数据库的存储容量和处理能力。分片是MongoDB为了应对大数据量和高吞吐量需…

13 - Python网络编程入门

网络编程入门 计算机网络基础 计算机网络是独立自主的计算机互联而成的系统的总称,组建计算机网络最主要的目的是实现多台计算机之间的通信和资源共享。今天计算机网络中的设备和计算机网络的用户已经多得不可计数,而计算机网络也可以称得上是一个“复…

idea MarketPlace插件找不到

一、背景 好久没用idea了,打开项目后没有lombok,安装lombok插件时发现idea MarketPlace插件市场找不到,需要重新配置代理源,在外网访问时通过代理服务进行连接 二、操作 ### File-->setting 快捷键 Ctrl Alt S 远端源地…

uni-app 使用Pinia进行全局状态管理并持久化数据

1.引言 最近在学习移动端的开发,使用uni-app前端应用框架,通过学习B站的视频以及找了一个开发模板,终于是有了一些心得体会。 B站视频1:Day1-01-uni-app小兔鲜儿导学视频_哔哩哔哩_bilibili B站视频2:01-课程和uni的…

hdu物联网硬件实验1 小灯闪烁

物联网硬件基础实验报告 学院 班级 学号 姓名 日期 成绩 实验题目 配置环境小灯 实验目的 配置环境以及小灯闪烁 硬件原理 无 关键代码及注释 /* Blink The basic Energia example. Turns on an LED on for one second, then off for one sec…

01 Web基础与HTTP协议

1.1 Web 基础 本章将介绍 Web 基础知识,包括域名的概念、DNS 原理、静态网页和动态网页的相关知识。 1.1.1.域名概述 1.域名的概念 ip地址不易记忆 2.早期使用host文件解析域名 主机名重复主机维护困难 3.DNS 分布式层次式 4.域名空间结构 根域顶级域 组…

在原有的iconfont.css文件中加入新的字体图标

前言:在阿里图标库中,如果你没有这个字体图标的线上项目,那么你怎么在本地项目中的原始图标文件中添加新的图标呢? 背景:现有一个vue项目,下面是这个前端项目的字体图标文件。现在需要新开发功能页&#x…

使用POI实现Excel文件的读取(超详细)

目录 一 导入poi相关的maven坐标 二 实现创建并且写入文件 2.1实现步骤 2.2实现代码 2.3效果展示 ​编辑 2.4注意 三 实现从Excel文件中读取数据 3.1实现步骤 3.2实现代码 3.3结果展示 一 导入poi相关的maven坐标 <!-- Apache poi --><dependency><gro…

【JVM-04】线上CPU100%

【JVM-04】线上CPU100% 1. 如何排查2. 再举一个例子 1. 如何排查 ⼀般CPU100%疯狂GC&#xff0c;都是死循环的锅&#xff0c;那怎么排查呢&#xff1f;先进服务器&#xff0c;⽤top -c 命令找出当前进程的运⾏列表按⼀下 P 可以按照CPU使⽤率进⾏排序显示Java进程 PID 为 2609…

LeetCode题练习与总结:排序链表--148

一、题目描述 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4]示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5]示例 3&am…

HTTP与HTTPS的主要区别

HTTP&#xff08;超文本传输协议&#xff09;与HTTPS&#xff08;超文本传输安全协议&#xff09;的主要区别在于安全性、数据传输方式、默认使用的端口以及对网站的影响。 一、安全性&#xff1a; HTTP是一种无加密的协议&#xff0c;数据在传输过程中以明文形式发送&#x…

2024年APMCM亚太杯中文赛A题——飞行器外形的优化问题

飞行器外形的优化问题 解题思路问题一第一问结果第一问代码 完整答案 本篇文章为大家分享2024年APMCM亚太杯中文赛A题——飞行器外形的优化问题的解题思路以及第一问的完整求解代码与结果&#xff0c;四问的完整解答请看文章最后&#xff01; 解题思路 飞行器是在大气层内或大…

粤港澳大湾区人工智能资本对接会”成功举办!

为促进惠州仲恺高新区人工智能产业的发展&#xff0c;推动惠深两地产业资源深度协同与合作&#xff0c;也为吸引更多的优质项目与投融资机构为惠州仲恺高新区产业发展注入动力&#xff0c;加速深圳人工智能相关产业资源落地仲恺。2024年06月26日&#xff0c;由仲恺高新区科技创…

C#用反射机制调用dll文件的字段、属性和方法

1、创建dll文件 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace CLStudent {public class Student{//字段public string Name "Tom";//属性public double ChineseScore { get; s…

【Python系列】数字的bool值

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

1990-2021年297个地级市RD内部经费支出数据

地级市内部经费支出数据为研究者提供了了解地方政府在科研活动上的投入情况的重要视角。以下是对297个地级市R&D内部经费支出数据的介绍&#xff1a; 数据简介 定义&#xff1a;地级市内部经费支出是指地级市政府在一定时期内用于科研活动的经费支出。用途&#xff1a;这…

前端面试题(CSS篇三)

一、简单介绍使用图片 base64 编码的优点和缺点。 base64是一种图片处理格式&#xff0c;通过特定的算法将图片编码为一长串字符串&#xff0c;在页面显示的时候&#xff0c;可以使用该字符串来代替图片的url属性。 使用base64的优点: 减少一个图片的http请求 使用base64的缺点…

微信⼩程序的电影推荐系统-计算机毕业设计源码76756

摘 要 随着互联网的普及和移动互联网的发展&#xff0c;人们对于获取信息的便捷性和高效性要求越来越高。电影作为一种受众广泛喜爱的娱乐方式&#xff0c;电影推荐系统的出现为用户提供了更加个性化和精准的电影推荐服务。微信小程序作为一种轻量级应用形式&#xff0c;在用户…