Direct3D 12——灯光——镜面光照

news2024/10/6 8:24:03

反射的发生是根据一种名为菲涅耳效应(Fresnel effect,也译作菲涅 尔效应)的物理现象。当光线到达两种不同折射率(index of refraction )介质之间的界面时,一部分光将 被反射,而剩下的光则发生折射(refract),折射率是一种介质的物理性质,即 光在真空中传播的速度与光在给定介质内的传播速度之比。我们将第二种光的反射过程称为镜面反射 (specular reflection ),把被反射的光称为镜面(反射)光(specular light)
在这里插入图片描述(a)具有法线 n 的完全光滑平整的镜面(即理想镜面)所呈现的菲涅耳效应。入射光 I 抵达表面后分为
两个部分进行传播,一部分按反射方向 r 发生反射,剩余部分则以折射方向 t 折射入介质。所有这些
向量都位于同一平面内。反射向量 r 与法线 n 之间的夹角总保持为θi,而且光向量L= -I与法线 n 之间
的夹角也同为θi。至于折射向量 t 与 -n 之间的夹角则取决于两种介质间的折射率以及斯涅尔折射
定律(SnelFsLaw)
(b)事实上,大多数的物体并不是完全光滑平整的理想镜面,而是在微观上
具有一定的粗糙度。这就导致了反射光与折射光分别关于反射向量与折射向量产生一些扩散

菲涅耳效应

**菲涅耳方程(Fresnelequations)**以数学方法描述了入射光线被反射的百分比, 即0≤ RF≤ 1。根据能量守恒定律,如果RF是反射光量,则(1 -RF)为折射光量。RF的值是一个RGB向量, 因为光的颜色反映了反射光量。反射的光量既依赖于介质(某些材质的反射率相对更大),也与法向量 n 与光向量 L 之间的夹角θi有关。由于光照过程的复杂性,我们一般不会将完整的菲涅耳方程用于实时渲染,而是采用石里克近似 (Schlick approximation )法来加以代替:

在这里插入图片描述
可以将菲涅耳效应简洁地概括为:反射光量取决于材质(RF(0°))以及法线与光向量之间的夹角。

金属会吸收透射光(transmitted light) [Mdller08],这意味着它们不具有本体反射率(body reflectance, 也有译作体反射,或体漫反射等)。虽然如此,但金属并不会看上去表现为纯黑色,因为它们的RF(0°))值 较高,也就是说,就算是在接近于0。这样的极小入射角度上,它们也能反射可观的镜面光量

表面粗糙度

真实世界中的反射物体往往不是理想镜面(perfectmirror)。尽管一个物体的表面看起来似乎十分平 滑,但从微观水平上看,它还是具有一定的粗糙度(roughness )0,如图所示,我们可以认为理想镜 面的粗糙度为0,它的微观表面法线(micro-normal,或作微表面法线)都与宏观表面法线(macro-normal, 或作宏表面法线)的方向相同。随着粗糙度的增加,微观表面法线的方向开始纷纷偏离宏观表面法线, 由此反射光逐渐扩展为一个镜面瓣(specular lobe )
在这里插入图片描述
图a中,黑色的水平线条表示被放大的小面元(small surface element )。从微观角度来看,由于在此层级的表面上具有一定的粗糙度,因此许多微观表面法线各指向不同的方向。若表面愈平滑, 便会有更多的微观表面法线愈发平行于宏观表面法线;而表面越粗糙,则会有更多的微观表面法线 越发偏离于宏观表面法线。图b中,粗糙度令镜面反射光扩散开来,镜面反射光的范围称为镜面瓣。
一般来讲,镜面瓣的形状将根据建模所用的表面材质种类而各不相同

在这里插入图片描述

以h为法线,光从L反射至卩的微平面

为了用数学方法对粗糙度进行建模,我们采用了微平面(microfacet,也作微表面)模型。在此模型
中,我们将微观表面模拟为由多个既微小又平滑的微平面所构成 的集合;而微观表面法线正是这些微平面上的法线。针对指定的 观察单位向量 v 以及光向量L,我们需要了解由Lv反射的所有 微平面片段的分布情况;换言之,即法线为 **h=normalize(L+v)**这种微平面片段在所有微平面中所占比例,如图所示。这样 一来,就可以确定有多少光通过镜面反射的方式,以此路径进入 到观察者的眼中一发生由L到v反射过程的微平面越多,则观 察者在此角度上看到的镜面光越明亮。

由于向量人位列向量A与向量y间的中间位置,故称之为中间向量(halfway vector,也有译作中途 向量、半角向量等)。此外,还要再引进一个中间向量方与宏观表面法线”之间的夹角θh

我们定义归一化分布函数p(θh)∈[0, 1],用来表示微观表面法线h与宏观表面法线n之间夹角为θh的微平面的分布情况。从直观上来讲,我们希望函数p(θh)在θh=0° 时取得最大值。也就是说,我们希 望微平面法线都平行于宏观表面法线。并盼望随着θh的增加(即渐渐偏离于宏观表面法线的微观表面法 线h),这些以向量h为法线的微平面片段逐渐减少。用来模拟以上讨论中期望模型p(θh)的一种较流行 的可控函数为:

p( θ h)=cosᵐ( θ h
=cosᵐ(n·h)

注意到,为了求出cos(θh)=(n·h)就需要知道两种向量以及单位长度。图展示了对于取不同m 值时函数 p(θh)=cosᵐ(θh)的图像。其中,变量m控制的是粗糙度,它指定了所有以微观表面法线h与 宏观表面法线n之间夹角为θh的微平面片段。随着m的减小,表面变得更加粗糙,而微平面的法线也 都愈加偏离宏观表面法线。随着m的增大,表面变得更加光滑,微平面法线也都越发趋于宏观表面法线。
在这里插入图片描述

一种针对粗糙度进行建模的函数曲线图

我们可以将以 p(θh) 与某种归一化因子进行组合,从而获得基于粗糙度来模拟镜像反射光量的新函数:
在这里插入图片描述
图展示了此函数根据不同取值的变量m所得到的图像。与之前一样,变量m依然控制着粗糙 度,但是我们还为之加上了归一化因子 m+8/8,以使光能守恒。该归一化因子实际上支配着图中曲线的高度,因此随着变量m的变化使镜面瓣变宽或变窄,令光能整体达到守恒。对于较小的m值来说, 表面会更加粗糙,并且镜面瓣变宽,继而促使光能散播得更广。因此,我们预计镜面高光(specular highlight,即镜面光)会变暗,因为其能量已经被广泛播散岀去了。另一方面,对于较大的m值而言, 表面会更加平滑,而镜面瓣会变得更窄。因此,我们预计镜面高光会更亮,因为其能量更为集中。从几 何角度上来看,变量m控制着镜面瓣的扩散程度。如果要模拟光滑的表面(例如被抛光的金属)就使用 较大的m值,而针对更粗糙的表面而言,则使用较小的m值。

我们把菲涅耳反射以及表面粗糙度这两个公式的组合来作为这一节的尾声。首先尝试计算在观察方 向v上所反射的光量。回顾以h为法线,且反射光沿观察向量v传播的微平面。设αh为光向量v与中间向量h之间的夹角,那么,根据菲涅耳效应所言,RF(αh)反映了关于h射入v的反射光 量。又由于表面的粗糙度为S(θh),所以我们还要将反射光量RF(αh乘以粗糙度。由此,我们便可得到 镜面反射光量:设(max(L· n, 0) (BL)表示入射光照到表面上一点的光量,而根据粗糙度与菲涅耳效应,(max(L· n, 0) (BL)这一段镜面反射到观察者眼中的实际光量为:
在这里插入图片描述
可以发现,如果L・n ≤ 0,那么所计算的结果是射向表面另一侧的光,因而此时的正表面并不会接 收到任何光照。
在这里插入图片描述

一种根据粗糙度来对镜面反射光进行建模的函数图像

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Day939.如何小步安全地升级数据库框架 -系统重构实战

如何小步安全地升级数据库框架 Hi,我是阿昌,今天学习记录的是关于如何小步安全地升级数据库框架的内容。 当消息组件的数据存储都是采用 SQL 拼写的方式来操作,这样不便于后续的扩展及维护。除此之外,相比前面的其他重构&#x…

线性代数 --- Gram-Schmidt, 格拉姆-施密特正交化(上)

在求解最小二乘的问题时,已经介绍了类似于Gram-Schmidt的一些想法。在这里要继续介绍这些想法,那就是如何“改写”矩阵A中的列向量,使得最小二乘解的计算越来越简单,甚至可以直接写出答案。 标准正交基(Orthonormal Bases) 上一篇…

3.1 多维度随机变量及其分布

思维导图: 学习目标: 要学习二维随机变量及联合分布,我会按照以下步骤进行: 了解基本概念:首先要了解二维随机变量的概念,即同时包含两个随机变量的变量。还要了解二维随机变量的取值范围以及联合概率密…

【CSS】定位 ④ ( 绝对定位特点 | 相对定位不脱标示例 | 绝对定位脱标示例 )

文章目录一、绝对定位特点二、相对定位不脱标示例三、绝对定位脱标示例一、绝对定位特点 绝对定位 以 带有定位的 父级元素 为基准 , 通过 边偏移 移动位置 ; 如果 绝对定位 的元素 的 父级元素 没有定位 , 那么会 一直向上查找有定位的父级元素 , 直到浏览器 ; 绝对定位 元素…

【Linux】组管理和权限管理

目录1 Linux组的基本介绍2 文件/目录所有者2.1 查看文件的所有者2.2 修改文件所有者3 组的创建3.1 基本指令3.2 应用实例4 文件/目录 所在组4.1 查看文件/目录所在组4.2修改文件/目录所在的组5 其他组6 改变用户所在组6.1 改变用户所在的组6.2 应用实例7 权限介绍8 rwx权限详解…

多线程(八):常见锁策略

目录 前言 1. 乐观锁 VS 悲观锁 乐观锁 悲观锁 2. 轻量级锁 VS 重量级锁 轻量级锁 3. 自旋锁 VS 挂起等待锁 自旋锁 挂起等待锁 4. 读写锁 VS 互斥锁 5. 可重入锁 vs 不可重入锁 死锁 发生死锁的情况 死锁产生的四个必要条件如下: 6. 公平锁和非公平锁…

Hibernate多表关联——(一对多关系)

Hibernate多表关联——(一对多关系) 文章目录Hibernate多表关联——(一对多关系)1.分别在类中添加属性:2.hibernate建表3.使用测试类在表中添加数据hibernate是连接数据库使得更容易操作数据库数据的一个框架&#xff…

ERROR:org.apache.hadoop.hbase.PleaseHoldException: Master is initializing错误

一、问题 重新安装hbase后,在hbase shell中查看所有命名空间时,出现了ERROR:org.apache.hadoop.hbase.PleaseHoldException: Master is initializing错误。 二、方法 1、root用户下,关闭hbase stop-hbase.sh 2、执行以下命令删除HDFS下的hb…

go进阶篇gin框架系列三

一、模板引擎的语法 {{.}} 模板语法都包含在{{和}}中间,其中{{.}}中的点表示当前对象。 当我们传入一个结构体对象时,我们可以根据.来访问结构体的对应字段。 pipeline pipeline是指产生数据的操作。比如{{.}}、{{.Name}}等。Go的模板语法中支持使用管道…

JavaWeb开发 —— Element组件

目录 一、什么是Element? 二、快速入门 三、常见组件 一、什么是Element? ① Element:是饿了么团队研发的,一套为开发者、设计时和产品经理准备的基于Vue 2.0 的桌面端组件库。 ② 组件:组成网页的部件&#xff0…

FIFO的工作原理及其设计

1.简介 FIFO( First Input First Output)简单说就是指先进先出。FIFO存储器是一个先入先出的双口缓冲器,即第一个进入其内的数据第一个被移出,其中一个口是存储器的输入口,另一个口是存储器的输出口。 对于单片FIFO来说,主要有两种…

文字转语音软件的优缺点及如何选择最适合的工具

随着科技的进步,文字转语音技术已经越来越成熟,越来越多的人开始使用文字转语音软件来转换文本为语音。这种技术可以帮助人们在许多方面,例如改善阅读体验、方便学习、提高生产效率等。然而,文字转语音软件有其优缺点,…

一文读懂推荐系统用户画像

1.推荐系统用户画像 用户画像这个词具有广泛性。 它被应用于推荐,广告,搜索,个性化营销等各个领域。任何时候,不管出于什么目的,我们想描述我们的用户是谁的时候,大家都会用到用户画像这个词。 比如&…

VUE_学习笔记

一、 xx 二、模板语法 1.模板语法之差值语法 :{{ }} 主要研究:{{ 这里可以写什么}} 在data中声明的变量、函数等都可以。常量只要是合法的javascript表达式,都可以。模板表达式都被放在沙盒中,只能访问全局变量的一个白名单&a…

精准关键词获取-行业搜索词分析

SEO关键词的收集通常可以通过以下几种方法: 根据市场价值、搜索词竞争性和企业实际产品特征进行筛选:确定您的关键词列表之前,建议先进行市场分析,了解您的竞争对手、行业状况和目标受众等信息,以更好的了解所需的特定…

MySQL日志

MySQL日志 错误日志 错误日志是MySQL中最重要的日志之一,它记录了当mysqld启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。 使用如下命令,可…

ChatGPT宝藏插件丨装上之后,上网、语音聊天、一键分享对话……简直让你爽到起飞!

今天分享4个让你的 ChatGPT 功能更强大的浏览器插件,装上就能用,每一个都是精挑细选。 1. WebChatGPT 很多小伙伴在用 ChatGPT查阅信息时,发现它有一个致命的问题: ChatGPT的知识库全部截止到 2021年9月,正常情况下…

航拍构图方法

目录 简介 对比构图 重复对比 明暗对比 颜色对比 空间错位 点构图 中心点构图 九宫格构图 线构图 二分线(水平、对称)构图 三分线构图 平行线构图 对角线构图 引导线构图 面构图 前景构图 简化构图 总结 简介 最近接触了无人机&#xf…

MySQL数据库备份(导出导入)的命令详解mysqldump

![在这里插入图片描述](https://img-blog.csdnimg.cn/174ee9e5170445b7acab94c5d97684ea.png [options] 参数参数说明-A, --all-databases导出所有数据库-B, --databases导出指定数据库-h, --hostname指定ip,默认本机-P, --port#指定端口,默认3306-u, …

【Java面试八股文宝典之MySQL篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day21

大家好,我是陶然同学,软件工程大三即将实习。认识我的朋友们知道,我是科班出身,学的还行,但是对面试掌握不够,所以我将用这100多天更新Java面试题🙃🙃。 不敢苟同,相信大…