GAMES101(17~18节,物理材质模型)

news2024/9/28 8:03:23

材质 == BRDF

材质:决定了光线与物体不同的作用方式

BRDF定义了物体材质,包含漫反射和镜面部分

BSDF (scattering散射)= BRDF(reflect反射) + BTDF

光线打击到物体上会向四面八方散射

反射

光线打击到物体上反射出去的部分

给定wi 和 n 如何表示 / 计算 wo?

方法一:

反射定理:入射角θi == 出射角θo

wi/wo在n方向的投影(结果为标量):wi/wo *(点乘) n = ∣wi​∣×∣n∣×cos(θ),

再乘以n,即在n方向的投影(缩放)

 wi + wo向量相加 = 2 * n  = 2 *  wi *(点乘) n = 2*cosθ(当wi和n都是单位向量时)

通过移项可得:wo出射光用wi入射光和n法线表示

方法二:

从顶部观察:

方位角\Phio和\Phii是相反的,因此角度差为π,再通过mod2π将角度差限制在0---360度之间

折射

光线打击到物体上被吸收的部分

给定wi 和 n 如何表示 / 计算 wo?

方法一:

不同材料有不同的折射率n,折射率越高,折射角越小

斯内尔定律/折射定律:当光波从一种介质传播到另一种具有不同折射率的介质时,会发生折射现象。

公式:入射介质的折射率 * 入射角 = 折射介质的折射率 * 折射角

我们实际求的是cosθt, 根据三角函数公式可以用sin形式表示,其中sin部分根据斯内尔定律可以用n和θi表示,然后根据三角函数公式可以将sin用cos形式表示

全反射现象

全反射现象:

这里注意到如果根号下<0,则无法得到结果

如果1-cos部分>1,并且ni / nt >1,那么1-……的结果就为负数,也就是入射介质的折射率>折射介质的折射率,这样就有可能折射不会发生

比如自然界的一种snell's window现象,从水底(密度大)折射到空气(密度小),仅能看到锥形的区域,当我角度超过一定的值,就不会折射到空气中了

对于球体,折射进来的光线一定可以折射出去,虽然球密度(折射率高)比空气大

方法二:

同样,入射光和折射光的方位角\Phi也是相差180度

漫反射材质BRDF

能量守恒:出射能量<=入射能量

假设每个入射和出射光rradiance都是uniform常量一致的,且点不自发光,和不吸收能量,那么入射能量为Irradiance E = \Phi / A,那么出射能量也是Irradiance

漫反射:入射光线打击到点p后,向四面八方均匀反射(微观遵守反射定理),不受光线入射方向,和观察角度影响

从wo方向看到的漫反射颜色 = ……其中fr是c常数,从半球wi方向入射光的反射颜色

因为fr(因为每个方向反射都一致)和 Li(入射颜色)都是常量,根据积分的常量法则,可以提取出来,

那么未提取的变量部分,则是半球cos的积分,我们知道整个球体所有立体角积分为4π,半球立体角积分为2π,而对半球\thetaθ角积分为π,

又根据能量守恒,出射能量lo = 入射能量li,因此fr = 1 / π 

如果定义一个albedo反射率(颜色值),BRDF即可表示颜色,通道RGB  :fr = p / π(0---π/1)

因此BRDF(fr)的漫反射部分是一个常量 p / π(对于每个wi入射光来说,fr反射方程都是相同的)

镜面反射材质 Microfacet BRDF

镜面反射:入射光线打击到点p后,向某方向反射,即受到光线入射方向,也受到观察角度影响

Frensnel Reflection菲涅尔

菲涅尔现象:

观察较光滑的桌面,当接近水平角度观察,颜色较亮,因为反射到人眼的光线更多。

绝缘体:,假设折射率为1.5

绝缘体:

横轴光线和法线夹角,纵轴反射率

也就是说明反射和光线方向有关,当入射光线和物体法线越趋近平行,越趋近全反射,相反越趋近垂直,那么几乎都会折射

导体(金属)

对于导体(金属)比较特殊,趋近于全反射

注意到反射率有一部分是先下降再上升

菲涅尔准确表示: 其中根号部分根据折射定律转换

reff​= 1 / 2 ​(rs偏振光​+rp​偏振光),如果不考虑偏振的情况,那么菲涅尔方程即是上面两者的平均值

偏振极化:

光的偏振是指光波电场振动方向在垂直于光传播方向的平面内呈现出特定的规律性。这一现象是横波特有的,因为只有横波的振动方向才与传播方向垂直,而光就是一种电磁波,属于横波。在菲涅尔方程中,光的偏振影响了光在不同介质界面反射和折射时的特性,导致S偏振光和P偏振光有不同的反射率和折射率。

简化方法schlick's approxiimation:近似求反射光线的占比:

基础反射率Ro开始,随着光线和法线夹角逐渐增长(0--90),反射率逐渐增长到1

这样的结果曲线都变为一致的,除了Ro,对于绝缘体近似的增长曲线,导体也不考虑先下降再上升

入射光所在介质的折射率为 n1 ,物体的折射率为 n2,由此计算基础反射率Ro

Microfacet Material微表面模型

假设从近处看物体是粗糙的,看到凹凸不平的微小平面,从远处看是一个平面

FGD

F菲涅尔:不同wi方向入射光线和物体法线(n)作用时,不同的反射程度

G几何函数:微表面之间相互遮挡的现象,与wi和wo方向有关(当趋近于90度微表面越容易被遮挡)

D:法线分布函数:对于每个wi入射光,有多少微表面,能够把入射光wi反射到wo方向,只有当微表面和h半程方向完全一致

BRDF性质

性质:

>=0

线性性质:拆分为漫 + 镜

可逆性:交互wi和wo,BRDF结果一致

能量守恒

各项同/异性材质:

球形坐标表示:输入方向\thetai\Phii输入方向,\thetar\Phir输出方向

Isotropic各项同性材质:微表面不存在一定方向性,brdf只和相对的方位角有关,(因此旋转后仍 == 原BRDF)

因此fr,仅和wi和wo的方位角\Phi的插值有关

anisotropic各项异性材质:微表面存在一定方向性,使得结果分布具有方向性,BRDF不满足在方位角上旋转得到的还是相同的BRDF,各向异性材质和绝对方位角有关(旋转后 != 原BRDF)

无论是否各项同性,都遵守可逆性,因此直接写为绝对值,结果都是一样的

测量brdf

可以用不同的模型表示,那什么才是正确的模型?

但是物理模型和现实现象总是有偏差,可以通过实验测量得出结果,通过大量的存储空间储存这些数据,以便直接使用测量的数据

对于某种材质一个着色点通过测量所有可能输入方向和所有输出方向(嵌套for)    

简述computer Graphics 高级技术 

无偏光线传播:无偏光线传播指的是在多次重复采样下,得到的结果接近所估计的真值,即无论样本数量多少,算出的期望值永远是对的。这种方法的优点在于其结果的准确性和可靠性,但往往也伴随着较高的计算复杂度和较长的渲染时间。

有偏光线传播:有偏光线传播指的是在多次重复采样下,存在一定系统误差的估计方法。虽然其估计出的期望值与真实值不完全一致,但在样本足够多的情况下,期望会收敛到正确的值。

有偏的:结果模糊的

一致的:lim情况可以收敛到正确的值

收敛速度:得到正确结果的速度,比如对于蒙特卡洛求解定积分,因为每个子样本的概率都是均等的,所以在相同数量采样情况下,很难得到正确结果,收敛速度慢

Biased无偏光线传播

Bidrectional path teacing BDPT双向路径追踪
  • 定义:双向路径追踪分别从光源和摄像机生成一系列半路径,然后再连接两个半路径的端点形成整条路径。
  • 优点:适用于复杂光照情况下的光线传播,特别是当光源间接照射时,BDPT能够更准确地模拟光线在场景中的传播路径。
  • 缺点:实现困难且渲染速度较慢。
metropolis light transport MLT  metropolis光线传播
  • 定义:MLT运用了马尔科夫链蒙特卡洛(MCMC)方法,通过一系列方法使得样本的形状与被积函数一致,从而生成符合任意函数的概率密度函数的样本。

生成的PDF曲线和被积函数形状越近似,结果越准确,

  • 优点:非常善于在局部探索困难的光路,适用于处理复杂的光线传播问题
  • 缺点:难以估计收敛速度,且不能保证每个像素的收敛速度相等,通常不用于渲染动画。

UnBiased有偏光线传播(期望是有偏的,但是lim极限情况会收敛到正确值)

Photon mapping光子映射
  • 步骤
    1. 从光源出发,发射光子并进行反射,直至光子接触到漫反射材质表面停下。
    2. 从相机出发,打出一系列子路径并进行反射,直至碰撞到漫反射表面。
    3. 计算每个着色点邻近N个光子的局部密度(光子数 / N个光子覆盖面积),以此估计光照强度。
  • 优点:非常善于处理镜面-漫反射-镜面(SDS)路径和产生焦散线(caustics)现象(SDS路径,折射--反射--折射)。
  • 缺点:当N取较小时,噪声大;N取较大时,会模糊。此外,光子映射是一种有偏的估计方法。

为什么有偏?因为我们要计算一个点的颜色,确从周围N个光子覆盖面积求值,

有偏光线传播在样本足够多的情况下,期望会收敛到正确的值:当光子数量足够多,那么采样范围足够小->0,那么lim情况下,期望会收敛到正确的值

如果从一个小范围采样光子数呢?它永远都是有偏的,因为这个采样范围是固定的,永远收敛不到正确的值

vertex connection and merging VCM结合双向路径追踪和光子映射

首先双向路径,然后在一定范围采样光子,保证了有适当的误差

instant radiosity VPL实时辐射度IR

  • 定义:将第一次被照亮的面看作虚拟光源(VPL),用这些虚拟光源去计算其他面的光照。
  • 优点:速度快,且在漫反射场景中表现较好。
  • 缺点:不能处理glossy材质,且当VPL接近阴影点时会出现尖峰现象。

非表面模型

participating media散射介质

定义在空间中的介质

phase function :光线如何散射

hair / fur / fiber头发,毛发

可以把头发当作一个圆柱体,有反射和散射(圆锥)的情况

更好的方式:反射R,折射折射穿出TT,折射反射折射穿出TRT

毛发:中间有大量区域介质,因此更容易被散射

表面模型

translucent material

次表面:半透明,光线会穿进物体,在内部发射大量散射,在穿透物体

对渲染方程延申,不再局限于打击到一个点的半球光线,而是在面积中,也有可能在内部散射,再折射出去

cloth布料……
detailed matrial

不完美的情况:……

……19,20跳过

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

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

相关文章

基于Java+SQL Server2008开发的(CS界面)个人财物管理系统

一、需求分析 个人财务管理系统是智能化简单化个人管理的重要的组成部分。并且随着计算机技术的飞速发展&#xff0c;计算机在管理方面应用的旁及&#xff0c;利用计算机来实现个人财务管理势在必行。本文首先介绍了个人财务管理系统的开发目的&#xff0c;其次对个人财务管理…

【C语言】指针篇 | 万字笔记

写在前面 在学习C语言过程&#xff0c;总有一个要点难点离不开&#xff0c;那就是大名鼎鼎的C语言指针&#xff0c;也是应为有指针的存在&#xff0c;使得C语言一直长盛不衰。因此不才把指针所学的所有功力都转换成这个笔记。希望对您有帮助&#x1f970;&#x1f970; 学习指…

【STM32开发环境搭建】-1-Keil(MDK) 5.27软件安装和注册教程

目录 1 安装前装备工作 2 安装KEIL(MDK-ARM) 5.27软件 3 注册KEIL(MDK-ARM) 5.27软件&#xff0c;获取License许可证 4 手动安装STM32F0&#xff0c;STM32F1&#xff0c;STM32F4&#xff0c;STM32F7&#xff0c;STM32H7的支持包 4.1 下载STM32的支持包 4.2 安装STM32的支…

JavaScript 中变量命名的最佳实践

全篇大概1500 字&#xff08;含代码&#xff09;&#xff0c;建议阅读时间5分钟。 1. 避免使用 var 关键字&#xff1a;过时的产物 在现代 JavaScript 中&#xff0c;我们通常避免使用 var&#xff0c;而是选择 let 和 const&#xff0c;它们提供更可预测和块范围的行为&#x…

C++初阶:STL详解(七)——list的模拟实现

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C&#xff1a;由浅入深篇 小新的主页&#xff1a;编程版小新-CSDN博客 前言&#xff1a; 我们前面已经了解到了lis…

helm3 部署项目应用示例

一、用到的插件 1、存储卷-日志外挂&#xff1a; 存储类自己提前建 2、env变量-存储nacos信息 二、新建项目 # helm create test-gateway 三、修改values.yaml ## 删除内容 # Additional volumes on the output Deployment definition. volumes: [] # - name: foo # se…

助力智能作物植株统计分析,基于YOLOv7全系列【tiny/l/x】参数模型开发构建田间作物场景下智能精准小麦麦穗检测识别计数系统

农业实验研究的一些场景下&#xff0c;尝尝有对指定视野区域内作物植株数量进行便捷化智能自动化统计计数的需求&#xff0c;诸如&#xff1a;棉花植株统计、小麦植株统计、水稻植株统计等等&#xff0c;这些农业实验场景下&#xff0c;单纯依靠人工数数的方式来进行植株计数是…

SpringBoot--yml配置文件的时间/大小的单位转换

原文网址&#xff1a;SpringBoot--yml配置文件的时间/大小的单位转换_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍SpringBoot的yml&#xff08;properties&#xff09;配置文件的时间/大小的单位转换。 概述 SpringBoot可以将yml中的配置绑定到一个Java类的字段&#x…

论文笔记——Graph Bottlenecked Social Recommendation

文章地址 代码地址 1.1简介 随着社交网络的出现&#xff0c;社交推荐已经成为个性化服务的重要技术。最近&#xff0c;基于图的社交推荐通过捕捉高阶社交影响显示出了有希望的结果。大多数基于图的社交推荐的经验研究直接将观察到的社交网络纳入公式&#xff0c;并基于社交同…

【注册/登录安全分析报告:孔夫子旧书网】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

香港科技大学数据建模MSc(DDM)硕士学位项目25/26招生宣讲会-西安专场

香港科技大学数据建模MSc(DDM)硕士学位项目25/26招生宣讲会-西安专场 &#x1f559;时间&#xff1a;2024 年10 月12日&#xff08;周六&#xff09; 16:00 &#x1f3e0;地点&#xff1a; 西安交大南洋大酒店(交通大学青龙寺店) 行政会议室 &#x1f9d1;‍&#x1f393;嘉宾…

0基础学习PyTorch——GPU上训练和推理

大纲 创建设备训练推理总结 在《Windows Subsystem for Linux——支持cuda能力》一文中&#xff0c;我们让开发环境支持cuda能力。现在我们要基于《0基础学习PyTorch——时尚分类&#xff08;Fashion MNIST&#xff09;训练和推理》&#xff0c;将代码修改成支持cuda的训练和推…

[sql-03] 求阅读至少两章的人数

准备数据 CREATE TABLE book_read (bookid varchar(150) NOT NULL COMMENT 书籍ID,username varchar(150) DEFAULT NULL COMMENT 用户名,seq varchar(150) comment 章节ID ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT 用户阅读表insert into book_read values(《太子日子》…

MindSearch 部署到Github Codespace 和 Hugging Face Space

和原有的CPU版本相比区别是把internstudio换成了github codespace。 教程是https://github.com/InternLM/Tutorial/blob/camp3/docs/L2/MindSearch/readme_github.md 复现步骤&#xff1a; 根据教材安装环境和创建硅基流动 API 然后启动前后端 然后按照教材部署到 Huggi…

安宝特案例 | 某知名日系汽车制造厂,借助AR实现智慧化转型

案例介绍 在全球制造业加速数字化的背景下&#xff0c;工厂的生产管理与设备维护效率愈发重要。 某知名日系汽车制造厂当前面临着设备的实时监控、故障维护&#xff0c;以及跨地域的管理协作等挑战&#xff0c;由于场地分散和突发状况的不可预知性&#xff0c;传统方式已无法…

计算机的错误计算(一百零六)

摘要 探讨含有变元负的整数次方的多项式的计算精度问题。 计算机的错误计算&#xff08;一百零五&#xff09;给出了一个传统多项式的错误计算案例&#xff1b;本节探讨含有变元负的整数次方的多项式的计算精度问题。 例1. 已知 计算 若在Python下计算&#xff0c;则有&…

猎板PCB大讲堂:PCB谐振效应及其对设计的影响

在PCB设计中&#xff0c;谐振效应是一个不可忽视的问题&#xff0c;它可能导致信号完整性问题、电源分配系统&#xff08;PDS&#xff09;工作异常&#xff0c;甚至成为EMI辐射源。以下是关于PCB谐振效应的一些详细信息&#xff1a; 1. 谐振产生的原因&#xff1a; - PCB中…

d2l | 目标检测数据集:RuntimeError: No such operator image::read_file

目录 1 存在的问题2 可能的解决方案3 最终的解决方案3.1 方案一&#xff08;我已弃用&#xff09;3.2 方案二&#xff08;基于方案一&#xff09;3.3 方案三&#xff08;基于方案一&#xff09; 1 存在的问题 李沐老师提供的读取香蕉数据集的函数如下&#xff1a; def…

Ubuntu系统设置bond双网卡

这里我的服务器是Ubuntu 22.04.3 LTS,是高阶版本,设置网卡需要通过netplan 根据你的Ubuntu版本(如使用Netplan或/etc/network/interfaces),选择相应的配置方法。 我这边以root用户登录进服务器,就不需要普通用户每次在命令前添加sudo 1.通常/etc/netplan下配置文件名形…

IDEA开发SpringBoot项目基础入门教程。包括Spring Boot简介、IDEA创建相关工程及工程结构介绍、书写配置文件、Bean对象管理等内容

文章目录 0. 关于本文1. 概述1.1 Spring简介1.2 Spring Boot简介1.3 传统的开发方式1.3.1 简述1.3.2 缺点 1.4 Spring Boot的优点 2. 创建一个简单的Spring Boot应用程序2.1 在IDEA创建项目2.2 pom配置文件内容2.3 启动类2.4 创建Controller 3. 从Maven工程创建Spring Boot工程…