【GAMES101】Lecture 18 高级光线传播

这节课不涉及数学原理,只讲流程操作,大家当听这个十万个为什么就行

目录

高级光线传播

无偏光线传播方法

双向路径追踪(Bidirectional path tracing)

Metropolis light transport (MLT)

有偏光线传播方法

光子映射(Photon mapping)

Vertex connection and merging (VCM)

实时辐射度(Instant radiosity )VPL / many light methods


高级光线传播

无论样本量多少,最终期望是正确的,这个时候就叫无偏估计

其他情况都是有偏估计,有偏估计中有一种特殊情况,就是当这个估计使用无穷多样本让期望收敛到正确值时,这个时候叫做一致性

无偏光线传播方法

双向路径追踪(Bidirectional path tracing)

我们之前的路径追踪是根据光线的可逆型从摄像机这边出发打出光线然后到达光源这样的一条路径,然后这个Bidirectional path tracing双向路径追踪,BDPT,是从光源和摄像机都出发打出光线,然后再连起来形成路径,唉这个听起来实现就不简单,实际上确实也是很难

我们只要知道在哪些情况下适合用这个双向路径追踪就行,就是当这个光线传播比较复杂的时候,我从摄像机出发要找到这个光源比较困难,像下面这个图,可以看到这个整体的光照来着这个向天花板照射的灯,如果要从摄像机出发靠弹射想要找到这个光源是比较困难的,因为四周都是漫反射,所以路径追踪就会出现左图的情况,而双向路径追踪它有一边从光源出发,那天花板上就会反射出一堆光线,这样就效果比较好

Metropolis light transport (MLT)

这个Markov Chain Monte Carlo,叫马尔可夫链蒙特卡罗,是统计学的一个工具,可以生成一个和当前样本很相似的新的样本,之前学过的蒙特卡洛积分可以以任何的概率分布函数去采样,而马尔可夫链蒙特卡罗可以生成和被积函数f很相似的概率分布函数p,而当f和p形状很相似的时候这个方差就会很小

这个事情应用到光线追踪上就可以根据一条已有的光线路径生成一条很接近的路径,从而找到其他所有的光线路径

那这个有什么用呢,当场景中这个光路太过复杂的时候,用这个MLT就可以从找到的一条光路中生成其他光路,特别是这个水池的底光,可以看到它是这种鱼鳞斑一样的光纹,这是怎么形成,光线会先经过水面的镜面反射,这个specular反射,然后到达水底的漫反射diffuse,这个时候光线就不知道往那去了,那会有一部分光线再反射到水面出来再经过一次这个specular发射到达我们的眼睛,这个路径叫SDS,specular-diffuse-specular,这个用MLT就会效果比较好,因为我只要找到一条可行的光路那我就能找到附近的其他可行的光路

但是MLT还有一些缺点,一是很难去估计它什么时候会收敛,二是它是一个局部的方法,每个像素的收敛程度可能都不一样,所以它可能会产生一些比较脏的结果,不适用于渲染动画,因为动画是按帧渲染的,帧之间用MLT可能差异比较大

有偏光线传播方法

光子映射(Photon mapping)

光子映射是一种有偏的方法,分为两步操作,适用于刚刚提到的SDS,并且适用于产生caustics的情况,所谓caustics指的是光线经过聚焦会产生一系列很强的图案

那光子映射具体怎么做呢,第一步先从光源往各个方向打出光子,光子不停反射直到碰上漫反射diffuse部分就停在那里 

第二步从摄像机出发光线,光线不停反射直到碰上diffuse部分停下来,然后做一个光子的局部密度估计,这个光子密度大的地方就应该更亮,那怎么算这个密度,对于一个着色点,统计它周围最近的N个光子作为它的密度

那这样会有一些问题,就是我这个N很小的时候,噪声比较大,但是N太大了,渲染效果又会模糊,为什么呢,实际上还是这个密度估算的不对,理论上密度是微小面积上的数量,也就是dN/dA,但是我们这里用的是ΔN/ΔA,哎那这里本身就有系统误差,这也是为什么说这个光子映射是属于一种有偏估计,但是如果这个ΔA接近dA,那这个结果就会接近正确的值,比如原来投射一亿光子,然后N取100个,现在投射100亿光子,光子的密度上去了,而N保持100不变,那我一个找到的100个光子所覆盖的面积ΔA不就比原来更小了吗,这就更接近于密度,这也是一致性的概念

那这样我能不能不固定这个N,去固定这个ΔA呢,那这样的估计永远都是有偏的而且不是一致的,为什么呢,因为这个时候算出来的密度就和投射的光子数紧密相关了,投射的光子数越多,自然固定面积上的光子就会越多,而且这个ΔA不会变小,永远不会得到精确的结果

Vertex connection and merging (VCM)

这个VCM是双向路径追踪BDPT和光子映射的结合,怎么结合的呢,就是在双向路径追踪里面,这两条光线从光源和摄像机出发,最后的两个交点如果不能通过一次光线弹射连起来的话,也就说这两个点在同一个面上了,那这次的路径也不要浪费,对这两个交点用光子映射的方法计算然后平均一下作为这两条路径的结果

实时辐射度(Instant radiosity )VPL / many light methods

这个实时辐射度关键思想就是把被光源照亮的地方当作光源,就是从光源出发的路径上的终点当成虚拟点光源Virtual Point Light (VPL),然后使用这些VPL继续渲染

但是当VPL靠近这个着色点的时候会出现问题,像这个比较窄的缝隙里会突然比较亮,这是因为之前我们把对立体角积分转换到对光源面积积分那里在这里会有一点问题,还有就是这个方法不能用于glossy的材质

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

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

相关文章

FXTM富拓监管变更!2024开年连续3家交易商注销牌照

交易商的监管信息是经常发生变更的,即使第一次投资时查询平台监管牌照,投资者仍需持续关注其监管动态。千万不要以为第一步审核好后就万事大吉了! 2024年开年,就有3家交易商的重要信息发生变更,注销其金融监管牌照&…

按键扫描16Hz-单片机通用模板

按键扫描16Hz-单片机通用模板 一、按键扫描的原理1、直接检测高低电平类型2、矩阵扫描类型3、ADC检测类型二、---.c的实现1、void keyScan(void) 按键扫描函数①void FHiKey(void) 按键按下功能②void FSameKey(void) 按键长按功能③void FLowKey(void) 按键释放功能三、key.h的…

Leetcode—135. 分发糖果【中等】

2024每日刷题(113) Leetcode—135. 分发糖果 算法思想 这里可以利用贪心策略,求局部最优解,然后合并为全局最优解。具体来说,将原问题中相邻孩子的条件划分为左相邻孩子和右相邻孩子两个条件,依次求解出两…

Phobos捆绑某数控软件AdobeIPCBroker组件定向勒索

前言 Phobos勒索病毒最早于2019年被首次发现并开始流行起来,该勒索病毒的勒索提示信息特征与CrySiS(Dharma)勒索病毒非常相似,但是两款勒索病毒的代码特征却是完全不一样,近日笔者在逛某开源恶意软件沙箱的时候发现了一款Phobos勒索病毒捆绑…

应用层DoS

应用层(application layer)是七层OSI模型的第七层。应用层直接和应用程序 对接并提供常见的网络应用服务,能够在实现多个系统应用进程相互通信的同 时,完成一系列业务处理所需的服务。位于应用层的协议有很多,常见的包…

【已解决】:pip is configured with locations that require TLS/SSL

在使用pip进行软件包安装的时候出现问题: WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. 解决: mkdir -p ~/.pip vim ~/.pip/pip.conf然后输入内容: [global] ind…

07-OpenFeign-HTTP压缩优化

gzip是一种数据格式,采用用deflate算法压缩数据;gzip是一种流行的数据压缩算法,应用十分广泛,尤其是在Linux平台。 当GZIP压缩到一个纯文本数据时,效果是非常明显的,大约可以减少70%以上的数据…

第九个知识点:内部对象

Date对象: <script>var date new Date();date.getFullYear();//年date.getMonth();//月date.getDate();//日date.getDay();//星期几date.getHours();//时date.getMinutes();//分date.getSeconds();//秒date.getTime();//获取时间戳&#xff0c;时间戳时全球统一&#x…

C++力扣题目494--目标和 474--一和零

494.目标和 力扣题目链接(opens new window) 难度&#xff1a;中等 给定一个非负整数数组&#xff0c;a1, a2, ..., an, 和一个目标数&#xff0c;S。现在你有两个符号 和 -。对于数组中的任意一个整数&#xff0c;你都可以从 或 -中选择一个符号添加在前面。 返回可以使…

Backtrader 文档学习- Plotting

Backtrader 文档学习- Plotting 虽然回测是一个基于数学计算的自动化过程&#xff0c;还是希望实际通过可视化验证。无论是使用现有算法回测&#xff0c;还是观察数据驱动的指标&#xff08;内置或自定义&#xff09;。 凡事都要有人完成&#xff0c;绘制数据加载、指标、操作…

PostgreSql与Postgis安装

POstgresql安装 1.登录官网 PostgreSQL: Linux downloads (Red Hat family) 2.选择版本 3.安装 ### 源 yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm ### 客户端 yum install postgresql14 ###…

Java面向对象 继承

目录 继承继承的好处继承具有传递性实例创建Person类Student继承Person类测试 继承 Java中的继承是面向对象编程的一个核心特性&#xff0c;它允许一个类&#xff08;子类或派生类&#xff09;继承另一个类&#xff08;父类或基类&#xff09;的属性和方法。通过继承&#xff0…

【HarmonyOS应用开发】HTTP数据请求(十四)

文章末尾含相关内容源代码 一、概述 日常生活中我们使用应用程序看新闻、发送消息等&#xff0c;都需要连接到互联网&#xff0c;从服务端获取数据。例如&#xff0c;新闻应用可以从新闻服务器中获取最新的热点新闻&#xff0c;从而给用户打造更加丰富、更加实用的体验。 那么…

【Spring】GoF 之工厂模式

一、GoF 23 设计模式简介 设计模式&#xff1a;一种可以被重复利用的解决方案 GoF&#xff08;Gang of Four&#xff09;&#xff0c;中文名——四人组 《Design Patterns: Elements of Reusable Object-Oriented Software》&#xff08;即《设计模式》一书&#xff09;&…

JavaEE作业-实验三

目录 1 实验内容 2 实验要求 3 思路 4 核心代码 5 实验结果 1 实验内容 简单的线上图书交易系统的web层 2 实验要求 ①采用SpringMVC框架&#xff0c;采用REST风格 ②要求具有如下功能&#xff1a;商品分类、订单、购物车、库存 ③独立完成&#xff0c;编写实验报告 …

Unity2D 学习笔记 0.Unity需要记住的常用知识

Unity2D 学习笔记 0.Unity需要记住的常用知识 前言调整Project SettingTilemap相关&#xff08;创建地图块&#xff09;C#脚本相关程序运行函数private void Awake()void Start()void Update() Collider2D碰撞检测private void OnTriggerStay2D(Collider2D player)private void…

猫头虎分享已解决Bug || docker: Error response from daemon: network not found

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

基于华为云欧拉操作系统(HCE OS)单节点容器化部署(Prometheus、node-exporter、Grafana)应用性能监控平台

写在前面 博文内容为 华为云欧拉操作系统入门级开发者认证(HCCDA – Huawei Cloud EulerOS)实验笔记整理认证地址&#xff1a;https://edu.huaweicloud.com/certificationindex/developer/9bf91efb086a448ab4331a2f53a4d3a1内容涉及&#xff0c;HCE OS 容器化部署(Prometheus、…

分布式springboot 3项目集成mybatis官方生成器开发记录

文章目录 说明实现思路实现步骤第一步&#xff1a;创建generator子模块第二步&#xff1a;引入相关maven插件和依赖第三步&#xff1a;编写生成器配置文件第四步&#xff1a;运行查看结果 说明 该文章为作者开发学习记录&#xff0c;方便以后复习和交流主要内容为&#xff1a;…

【精选】java继承进阶——构造方法的访问特点 this、super使用

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…