Games101学习笔记 Lecture17 Materials and Appearances

Lecture17 Materials and Appearances

  • 材质 == BRDF
  • 一、Diffuse/Lambertian Material
  • 二、Glossy Material
  • 三、Ideal reflective/ refractive Material (BSDF)
    • 1.镜面反射
    • 2.镜面折射
    • 3.菲涅尔项 Fresnel
  • 四、Microfacet BRDF 微表面
  • 五、Isotropic / Anisotropic Materials (BRDFs)
    • Anisotropic BRDFs
  • 六、BRDF的属性
    • 1.非负性
    • 2.线性
    • 3.可逆性(互易性)
    • 4.能量守恒
    • 5.Isotropic vs. anisotropic
  • 七、测量BRDF
    • 一般方法
    • 提高效率

材质 == BRDF

一、Diffuse/Lambertian Material

  • 漫反射材质的BRDF为c(常数)—— 反射率 —— 通常表示为 材质的反射颜色
  • 光线进来会被均匀地漫反射出去
    在这里插入图片描述
  • 假设 入射光照是均匀的 f r L i ( ω i ) f_{r}L_{i}(ω_{i}) frLi(ωi)为常数)
  • L o ( ω o ) = ∫ H 2 f r L i ( ω i ) c o s θ i d ω i = f r L i ∫ H 2 c o s θ i d ω i = π f r L i L_{o}(ω_{o}) = \int_{H^{2}}^{}f_{r}L_{i}(ω_{i})cosθ_{i}dω_{i} = f_{r}L_{i} \int_{H^{2}}^{}cosθ_{i}dω_{i} = \pi f_{r}L_{i} Lo(ωo)=H2frLi(ωi)cosθidωi=frLiH2cosθidωi=πfrLi
  • 又因为 入射光线 = 出射光线 → \rightarrow f r = 1 π f_{r} = \frac{1}{\pi} fr=π1
  • 得到 f r = ρ π f_{r} = \frac{ρ}{\pi} fr=πρ (ρ为albedo(color),范围在0~1),范围在 0 ∼ 1 π 0\sim \frac{1}{\pi} 0π1

二、Glossy Material

  • 多少有一点点镜面
    在这里插入图片描述
    在这里插入图片描述

三、Ideal reflective/ refractive Material (BSDF)

  • BSDF双向散射分布函数,描述了光线在物体表面反射和折射的行为 = BRDF(反射) + BTDF(折射)

1.镜面反射

  • 入射角 = 反射角
    在这里插入图片描述
  • ω o + ω i = 2 c o s θ n ⃗ = 2 ( ω i ⋅ n ⃗ ) n ⃗ → ω o = − ω i + 2 ( ω i ⋅ n ⃗ ) n ⃗ ω_{o}+ω_{i} = 2cos\theta\vec{n} = 2(ω_{i} \cdot\vec{n})\vec{n} \rightarrow ω_{o} = -ω_{i} + 2(ω_{i} \cdot \vec{n})\vec{n} ωo+ωi=2cosθn =2(ωin )n ωo=ωi+2(ωin )n (假设 ω o 、 ω i 、 n ⃗ ω_{o}、ω_{i}、\vec{n} ωoωin 是单位向量)

2.镜面折射

  • 镜面折射遵循折射定律,也称为 斯涅尔定律
    在这里插入图片描述
  • η i s i n θ i = η t s i n θ t \eta_{i}sin\theta_{i} = \eta_{t}sin\theta_{t} ηisinθi=ηtsinθt η \eta η为两边的折射率)
  • c o s θ t = 1 − s i n 2 θ t = 1 − ( η i η t ) 2 s i n 2 θ i = 1 − ( η i η t ) 2 − ( 1 − c o s 2 θ i ) cos\theta_{t} = \sqrt{1-sin^{2}\theta_{t}} = \sqrt{1-(\frac{\eta_{i}}{\eta_{t}})^{2}sin^{2}\theta_{i}} = \sqrt{1-(\frac{\eta_{i}}{\eta_{t}})^{2} -(1-cos^{2}\theta_{i})} cosθt=1sin2θt =1(ηtηi)2sin2θi =1(ηtηi)2(1cos2θi) ,当 η i η t > 1 \frac{\eta_{i}}{\eta_{t}}> 1 ηtηi>1时,式子 1 − ( η i η t ) 2 s i n 2 θ i 1-(\frac{\eta_{i}}{\eta_{t}})^{2}sin^{2}\theta_{i} 1(ηtηi)2sin2θi 就不符合根号内部 > 0,此时没有折射,全反射

3.菲涅尔项 Fresnel

  • 表明反射率和折射率都取决于入射角和光的偏振状态,用于 模拟光线在物体表面的反射行为
  • 反射率取决于入射角
    在这里插入图片描述
  • 数学表达式
    在这里插入图片描述
  • R 是反射率,n1 和 n2 分别是两种介质的折射率

四、Microfacet BRDF 微表面

  • 将物体表面视为由无数微小的、镜面反射 的微表面组成(远处看认为是个平面)
    在这里插入图片描述
  • 当半程向量 h 与法线方向重合时才能沿出射方向反射(粗糙表面半程向量 h 不会完全等于表面的法线 n)
  • 微表面BRDF公式主要由三个部分 : 菲涅尔项 F ( i , h ) F(i,h) F(i,h),遮挡-遮蔽项(自遮挡) G ( i , o , h ) G(i,o,h) G(i,o,h),半程向量(描述微表面法线分布情况) D ( h ) D(h) D(h)
  • f ( i , o ) = F ( i , h ) G ( i , o , h ) D ( h ) 4 ( n , i ) ( n , o ) f(i,o) = \frac{F(i,h)G(i,o,h)D(h)}{4(n,i)(n,o)} f(i,o)=4(n,i)(n,o)F(i,h)G(i,o,h)D(h)

五、Isotropic / Anisotropic Materials (BRDFs)

  • 区分这两种材质的关键在于 表面法线的方向性
    在这里插入图片描述

Anisotropic BRDFs

  • 各向异性材质的表面法线分布存在明显的方向性(例如沿着某个方向排列)
  • BRDF 的值不仅取决于 wi 和 wo 之间的夹角 (i, r),还取决于 wi 和 wo 的具体方向,例如,沿着某个方向的反射强度会更强

六、BRDF的属性

1.非负性

  • BRDF 的值必须大于等于 0 → \rightarrow 反射光线的亮度 ≤ \le 入射光线的亮度 (因为反射光线是由入射光线引起的)
  • f r ( ω i → ω r ) ≥ 0 fr(ω_{i} \rightarrow ω_{r}) \ge 0 fr(ωiωr)0

2.线性

  • 反射光线的亮度与入射光线的亮度成正比 → \rightarrow 入射光线的亮度增加,反射光线的亮度也会相应地增加
  • L r ( p , ω r ) = ∫ H 2 f r ( p , ω i → ω r ) L i ( p , ω i ) c o s θ i d ω i L_{r}(p,ω_{r}) = \int_{H^{2}}^{}f_{r}(p,ω_{i} \rightarrow ω_{r})L_{i}(p,ω_{i})cosθ_{i}dω_{i} Lr(p,ωr)=H2fr(p,ωiωr)Li(p,ωi)cosθidωi

3.可逆性(互易性)

  • 光线在介质中的传播是可逆的
  • f r ( ω i → ω r ) = f r ( ω r → ω i ) fr(ω_{i} \rightarrow ω_{r}) = fr(ω_{r} \rightarrow ω_{i}) fr(ωiωr)=fr(ωrωi)
    在这里插入图片描述

4.能量守恒

  • 对于任何方向 ωr,反射光线的亮度不会超过入射光线的亮度
  • ∀ ω r ∫ H 2 f r ( p , ω i → ω r ) c o s θ i d ω i ≤ 1 {\forall}ω_{r}\int_{H^{2}}^{}f_{r}(p,ω_{i} \rightarrow ω_{r})cosθ_{i}dω_{i} \le 1 ωrH2fr(p,ωiωr)cosθidωi1

5.Isotropic vs. anisotropic

  • 如果是各向同性,那么它 只依赖于两个方向之间的夹角,而不依赖于这两个方向各自的具体方向
  • f r ( θ i , ϕ i ; θ r , ϕ r ) = f r ( θ i , θ r , ϕ r − ϕ i ) f_{r}(\theta_{i},\phi_{i};\theta_{r},\phi_{r}) = f_{r}(\theta_{i},\theta_{r},\phi_{r}-\phi_{i}) fr(θi,ϕi;θr,ϕr)=fr(θi,θr,ϕrϕi)
  • 又因为互易性
  • f r ( θ i , θ r , ϕ r − ϕ i ) = f r ( θ i , θ r , ϕ i − ϕ r ) = f r ( θ i , θ r , ∣ ϕ r − ϕ i ∣ ) f_{r}(\theta_{i},\theta_{r},\phi_{r}-\phi_{i}) = f_{r}(\theta_{i},\theta_{r},\phi_{i}-\phi_{r}) = f_{r}(\theta_{i},\theta_{r},|\phi_{r}-\phi_{i}|) fr(θi,θr,ϕrϕi)=fr(θi,θr,ϕiϕr)=fr(θi,θr,ϕrϕi)
  • 意味着BRDF 的值只取决于入射光线和反射光线之间的夹角 θi 和 θr,以及这两个方向 在水平面上的投影之间的夹角 |φr - φi|
    在这里插入图片描述

七、测量BRDF

  • 可以避免建立复杂的物理模型,并可以准确渲染真实世界材质

一般方法

  • 选择出射光方向 wo: 首先 确定一个出射光方向,即我们想要测量反射光的方向
  • 移动光源: 将光源移动到与出射光方向一致的位置,并照射目标材质
  • 遍历入射光方向 wi: 对于每个可能的入射光方向,将传感器移动到该方向,并测量反射光的强度
  • 重复: 重复以上步骤,直到测量完所有感兴趣的出射光方向和入射光方向组合

提高效率

  • 各向同性表面: 如果目标材质是各向同性的,即反射特性与方向无关,则可以将 BRDF 的维度从 4D 降低到 3D,从而减少测量次数
  • 互易原理: 互易原理表明,BRDF 满足 f r ( ω r , ω i ) = f r ( ω i , ω r ) f_{r}(ω_{r}, ω_{i}) = f_{r}(ω_{i}, ω_{r}) fr(ωr,ωi)=fr(ωi,ωr),即入射光方向和出射光方向互换时,BRDF 的值不变,利用这一原理,可以将测量次数减少一半
  • 巧妙的光学系统: 设计巧妙的光学系统,例如旋转光源和传感器,可以进一步提高测量效率

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

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

相关文章

博客标题:C++中的继承:构建面向对象的基石

目录 ​编辑 引言 继承的基本形式 示例1:基本继承 继承的类型 示例2:不同类型的继承 多重继承 示例3:多重继承 继承与多态性 示例4:继承与多态 结论 结尾 引言 在面向对象编程(OOP)中&#xff…

【持续集成_03课_Linux部署Sonar+Gogs+Jenkins】

一、通过虚拟机搭建Linux环境-CnetOS 1、安装virtualbox,和Vmware是一样的,只是box更轻量级 1)需要注意内存选择,4G 2、启动完成后,需要获取服务器IP地址 命令 ip add 服务器IP地址 通过本地的工具,进…

新手教学系列——crontab 使用不当引发的服务器性能问题

起因及症状 最近,我们的一台服务器随着运行时间的增加,逐渐出现了压力过大的问题。具体表现为数据库连接数飙升至 4000+,Redis 频繁超时,系统报错文件打开数过多等。针对这些问题,我们逐一检查了数据库连接池、Redis 连接池以及系统的 ulimit 配置,但都未能找到问题的根…

第241题| 确定极限中参数问题 | 武忠祥老师每日一题

解题思路:确定极限中的参数的方法是求这个极限;求极限根据类型选方法。 形可以用到三种方法:洛必达,等价,泰勒。 先观察题目,将看成一个整体,同时,并令,整理之后如下: 这里也要想办…

nginx.conf配置文件

1、全局模块 worker_processes 1; 工作进程数,一般设置成服务器内核数的2倍(一般不超过8个,超过8个反而会降低性能,一般是4个,1-2个也可以) 处理进程的过程必然涉及配置文件和展示页面,也就是…

2024.7.9作业

1、提示并输入一个字符串&#xff0c;统计该字符串中字母、数字、空格以及其他字符的个数 #include <stdio.h> #include <string.h> int main(int argc,const char *argv[]) { char arr[30]{0}; int zm0,kg0,sz0,qt0; printf("请输入字符串&…

智慧光伏一站式解决方案

光伏电站智慧化管理平台&#xff0c;将现代先进的数字信息技术、通信技术、互联网技术、云计算技术、大数据挖掘技术与光伏技术高度融合而形成。可以满足光伏企业对电站的高发电量、低初始投资、低运维成本等需求&#xff0c;从开发到运维的25年生命周期内&#xff0c;实现高收…

使用clion刷leetcode

如何优雅的使用clion刷leetcode 安装插件&#xff1a;LeetCode Editor) 插件配置&#xff1a; 这样我们每打开一个项目&#xff0c;就会创建类似的文件 我们的项目结构&#xff1a; 我们在题解文件中导入头文件myHeader.h并将新建的文件添加到cmakelists.txt文件&#xff0c;…

2024前端面试真题【JS篇】

DOM DOM&#xff1a;文本对象模型&#xff0c;是HTML和XML文档的编程接口。提供了对文档的结构化的表述&#xff0c;并定义可一种方式可以使从程序中对该结构进行访问&#xff0c;从而改变文档的结构、样式和内容。 DOM操作 创建节点&#xff1a;document.createElement()、do…

了解PPO算法(Proximal Policy Optimization)

Proximal Policy Optimization (PPO) 是一种强化学习算法&#xff0c;由 OpenAI 提出&#xff0c;旨在解决传统策略梯度方法中策略更新过大的问题。PPO 通过引入限制策略更新范围的机制&#xff0c;在保证收敛性的同时提高了算法的稳定性和效率。 PPO算法原理 PPO 算法的核心…

【docker 把系统盘空间耗没了!】windows11 更改 ubuntu 子系统存储位置

系统&#xff1a;win11 ubuntu 22 子系统&#xff0c;docker 出现问题&#xff1a;系统盘突然没空间了&#xff0c;一片红 经过排查&#xff0c;发现 AppData\Local\packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\ 这个文件夹竟然有 90GB 下面提供解决办法 步…

Spring-AOP(二)

作者&#xff1a;月下山川 公众号&#xff1a;月下山川 1、什么是AOP AOP&#xff08;Aspect Oriented Programming&#xff09;是一种设计思想&#xff0c;是软件设计领域中的面向切面编程&#xff0c;它是面向对象编程的一种补充和完善&#xff0c;它以通过预编译方式和运行期…

【课程总结】Day13(下):人脸识别和MTCNN模型

前言 在上一章课程【课程总结】Day13(上):使用YOLO进行目标检测,我们了解到目标检测有两种策略,一种是以YOLO为代表的策略:特征提取→切片→分类回归;另外一种是以MTCNN为代表的策略:先图像切片→特征提取→分类和回归。因此,本章内容将深入了解MTCNN模型,包括:MTC…

使用jdk11运行javafx程序和jdk11打包jre包含javafx模块

我们都知道jdk11是移除了javafx的,如果需要使用javafx,需要单独下载。 这就导致我们使用javafx开发的桌面程序使用jdk11时提示缺少javafx依赖。但这是可以通过下面的方法解决。 一,使用jdk11运行javafx程序 我们可以通过设置vmOptions来使用jdk11运行javafx程序 1,添加j…

【RAG KG】GraphRAG开源:查询聚焦摘要的图RAG方法

前言 传统的 RAG 方法在处理针对整个文本语料库的全局性问题时存在不足&#xff0c;例如查询&#xff1a;“数据中的前 5 个主题是什么&#xff1f;” 对于此类问题&#xff0c;是因为这类问题本质上是查询聚焦的摘要&#xff08;Query-Focused Summarization, QFS&#xff09…

嵌入式单片机,两者有什么关联又有什么区别?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“666”之后私信回复“666”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;使用单片机是嵌入式系统的…

CurrentHashMap巧妙利用位运算获取数组指定下标元素

先来了解一下数组对象在堆中的存储形式【数组长度&#xff0c;数组元素类型信息等】 【存放元素对象的空间】 Ma 基础信息实例数据内存填充Mark Word,ClassPointer,数组长度第一个元素第二个元素固定的填充内容 所以我们想要获取某个下标的元素首先要获取这个元素的起始位置…

Sorted Set 类型命令(命令语法、操作演示、命令返回值、时间复杂度、注意事项)

Sorted Set 类型 文章目录 Sorted Set 类型zadd 命令zrange 命令zcard 命令zcount 命令zrevrange 命令zrangebyscore 命令zpopmax 命令bzpopmax 命令zpopmin 命令bzpopmin 命令zrank 命令zscore 命令zrem 命令zremrangebyrank 命令zremrangebyscore 命令zincrby 命令zinterstor…

线程池案例

秒杀 需求 10个礼物20个客户抢随机10个客户获取礼物&#xff0c;另外10无法获取礼物 任务类 记得给共享资源加锁 public class MyTask implements Runnable{// 礼物列表private ArrayList<String> gifts ;// 用户名private String username;public MyTask( String user…

android Dialog全屏沉浸式状态栏实现

在Android中&#xff0c;创建沉浸式状态栏通常意味着让状态栏背景与应用的主题颜色一致&#xff0c;并且让对话框在状态栏下面显示&#xff0c;而不是浮动。为了实现这一点&#xff0c;你可以使用以下代码片段&#xff1a; 1、实际效果图&#xff1a; 2、代码实现&#xff1a;…