计算机图形学----光线追踪----路径追踪

2023-11-19

基础知识预备

概率论
在这里插入图片描述
概率
在这里插入图片描述

期望= ∑(概率*值)
在这里插入图片描述
PDF (概率密度函数)
概率密度函数:p(x)在数学中,连续型随机变量的概率密度函数(在不至于混淆时可以简称为密度函数)是一个描述这个随机变量的输出值,在某个确定的取值点附近的可能性的函数。也就是结果为某个值得可能性描述。
性质:
p(x)概率密度函数积分为1.
x*p(x)积分为期望
在这里插入图片描述

Monte Carlo Integration(蒙特卡洛积分)

蒙特卡洛积分
在积分域内不断去采样,采样到y值,做很多次采样。对所有采样做平均。采样的次数越少,越不准,采样的次数越多,越准确。
在这里插入图片描述
在x采样,在x积分。采样和积分在一个域。
在这里插入图片描述

Path Tracing(路径追踪)

路径追踪,光线在场景中的传播,最终模拟出和真实世界一样的画面。

第一步:假设我们需要渲染一个像素,且只考虑直接光照(光源)的影响,应该怎么做呢?
在这里插入图片描述
渲染方程如下,不考虑自发光

L(颜色) = ∑ 每个方向(只考虑光源)过来的radiance * BRDF * (夹角的cos)
在这里插入图片描述
使用蒙特卡洛积分解决:

随机取一个方向,使用蒙特卡洛积分(对半球进行均匀采样)概率密度为1/2π
在这里插入图片描述
任何一个着色点,出射方向的Lo
在这里插入图片描述
着色算法(直接光照)
前提条件:只考虑直接光照
对于某个着色点p,向某一个方向wi发出一条光线,和光源做连线。
如果可以连到光源,那么计算该点在该方向上,收到光源光照的颜色。
在这里插入图片描述
Introducting Global Illumination(全局光照)
如果p在wi发出的一条线,没有打到光源,而是打到某个物体上,这一条光路对p点的颜色有什么影响呢?
在这里插入图片描述
答案是有影响,我们把p-wi光路交点q假设成一个光源,还可以用蒙特卡洛积分描述这条光路对p点颜色的影响。
在这里插入图片描述
结论:

对于一个着色点p,我们总是从p点某个方向发出一条光线,打到光源或者物体后,计算光源或者物体对p点颜色影响,公式如下:
在这里插入图片描述
那么,该点的颜色就是在0~2π区域内发出所有光线的积分
存在问题:
1.算量爆炸光线弹射次数爆炸指数爆炸
在这里插入图片描述
2.光线什么时候弹射停止,无限弹射?

**问题一:算量爆炸光线弹射次数爆炸指数爆炸 **

假设一个着色点,随机选择一个方向,只打出一个光线。N=1 也就是光线的弹射次数为1.
在这里插入图片描述
弹射次数为1,但是对于每一个像素会依然会有很多路径对该像素点着色,对所有路径的着色求平均,就是路径追踪。
在这里插入图片描述
对于一个像素,可以选择很多条路径,对于每一个像素的颜色,结果是N条路径给这个像素着色结果的平均。
在这里插入图片描述
问题二:递归什么时候停止 俄罗斯轮盘赌
在这里插入图片描述
对结果除以p,俄罗斯轮盘赌的期望还是Lo,所以说,俄罗斯轮盘赌是五偏的
在这里插入图片描述
路径追踪算法:(加入俄罗斯轮盘赌)
在这里插入图片描述
路径追踪算法:不同spp结果比较
在这里插入图片描述
对光源积分
第一个场景:发出5根光线打到光源
第二个场景:500
第三个场景:50000
所以其实我们路径追踪中有很多path是没有作用的,因为这个path最终回不到光源。
在这里插入图片描述
对光源积分,就需要对光源采样
对光源采样,需要对光源积分,我们之前的路径追踪是在立体角上积分。对于面光源来讲,
pdf = 1 / A(面积),但是我们需要对光源积分,才能改写路径追踪的算法。
在这里插入图片描述如何做转换
考虑dw(立体角)和dA(光源的表面)的关系,dA投影到半球上的面积,就是dw。
在这里插入图片描述

重写渲染方程
其实就是积分的变量替换,将dw替换为dA,积分域从2π替换为面光源的面积A
在这里插入图片描述
重写路径追踪
一个着色点的颜色:
1.光源的直接贡献(写为对光源积分)
2.非光源的贡献( 常规算法)
在这里插入图片描述
直接光照+间接光照
在这里插入图片描述
对光源进行采样,考虑遮挡
在这里插入图片描述
路径追踪和真实照片
在这里插入图片描述
截图和公式来源闫令琪老师games101课程
感谢闫令琪老师为我们带来这么精彩的图形学课程
https://www.bilibili.com/video/BV1X7411F744?p=16

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机图形学----光线追踪----路径追踪 的相关文章

随机推荐

  • 设置QFrame的背景图片并不影响其子控件的效果

    项目建立完成后 右键点你的项目 Add New gt QT Resource file 生成一个qrc文件 然后双击它 点add 然后Add Prefix 再Add file 完事之后build一下 在你的ui上点右键 gt Change
  • 选择软件外包公司需要注意哪些方面

    每个行业中不同公司的实力都是良莠不齐 特别是IT软件外包公司更是如此 当我们一旦将整个项目交付对方之后 项目的成败就全看软件外包公司的表现 风险极大 那么 我们该如何选择一家靠谱的深圳软件外包公司 选择软件外包公司需要注意哪些方面 北京木奇
  • 刷脸支付让城市真正迈入智能化数字化新阶段

    众所周知 每一次通信时代的变革都会催生一系列新兴事物的发展 比如3G时代的到来让越来越多国人开始了解互联网 4G时代的普及 让互联网产业得到了前所未有的发展空间 而5G时代的来临 将进一步推动数字化工作的进程刷脸支付正是如此 让城市真正迈入
  • 二分查找--中间值取值原则

    在数组总长度为奇数时 二分查找的中间值就是数组中间的那个元素 例如 对于长度为5的数组 中间元素的下标为2 在数组总长度为偶数时 二分查找的中间值有两个 可以取任意一个作为中间值 一种常用的方法是取靠左的那个中间值 例如 对于长度为6的数组
  • Image Processing图像处理(对比俩张图像的差异并且在图上标注出来)

    图像处理是构建所有计算机视觉的基础 按照我的图像处理指南使用OpenCV库学习计算机视觉的基础知识 SSIM进阶 利用python openCV将图片的差异性画框展示出来 诀窍是学习如何准确地确定在 x y 坐标位置上 图像的差异在哪里 使
  • shader学习网站

    https www shadertoy com https shaderfrog com http glslb in http glslsandbox com
  • Linux网络网卡配置相关知识记录

    Linux系统网络相关配置 1 网卡配置文件说明 2 使用 ifconfig 配置网卡 3 配置 DNS 地址 3 1 编辑 etc hosts 文件 在空白处输入 3 2 编辑 DNS 配置文件 4 确定 linux 服务器哪个网卡对应哪
  • MyTinyStl源码刨析

    文章目录 源码信息及目录 启动项目 迭代器 分配器 算法 容器实现 测试框架Test 源码信息及目录 MyTinySTL 项目地址 该项目实现了C 的stl库 阅读该项目可以使我们对stl的底层有更深入的认识 同时可以增强我们的c 的内功
  • 配置使用Eslint的时候 版本错误 "eslint": "5.6.0" a different version of eslint was detected higher up in the tr

    1 如果你也遇到下面的问题 你可以 按照命令行提示的那样 下面这四步完成的一般就可以了 但是不排除你在运行的时候忘记下载某些依赖 1 删除 package lock json 不是package json 你可以选择 yarn lock 或
  • W800开发板

    目录 概况 下载工具链编译工具 查看wsl版本 wsl所采用的工具链 添加工具链bin到环境变量中 编译 接口说明 概况 海凌科W800开发板 HLK W800 KIT 是海凌科电子面向开发者针对联盛德W800 芯片推出的一款多功能开发板
  • 服务器修改动态磁盘,服务器数据库使用动态磁盘

    服务器数据库使用动态磁盘 内容精选 换一换 云服务器备份 云服务器备份可以对普通服务器进行整机备份或部分磁盘备份 不适用于部署了数据库等应用的服务器 支持备份弹性云服务器ECS和裸金属服务器BMS 成本相对于VBS较高 适合对需要备份整个服
  • for循环执行顺序

    for循环的表达式一般如下 for 表达式1 表达式2 表达式3 表达式4 执行的顺序为 1 第一次循环 即初始化循环 首先执行表达式1 一般为初始化语句 再执行表达式2 一般为条件判断语句 判断表达式1是否符合表达式2的条件 如果符合 则
  • JDK1.6官方下载_JDK6官方下载

    JDK1 6官方下载 JDK6官方下载 JDK1 6官方下载 JDK6官方下载地址 http www java net download jdk6 6u10 promoted b32 binaries jdk 6u10 rc2 bin b3
  • 【Java基础】泛型记录概要

    泛型记录概要 泛型出现重要原因之一 创造容器类 泛型主要目的之一 指定容器持有什么类型的对象 保证编译的正确性 泛型简单实例 class GenericsClass
  • CoLab设置使用GPU和TPU

    tf2 4 0 from tensorflow python keras callbacks import EarlyStopping from tensorflow python keras layers import Embedding
  • mysql学习系列(2)--忘记mysql登录密码怎么办?

    系列文章目录 文章目录 系列文章目录 前言 一 登录mysql 二 操作步骤 1 找到mysql exe所在的文件夹 2 Win R打开cmd 进入bin文件夹 3 跳过mysql用户验证 3 net start mysql启动服务 总结
  • c++模板 --- 类模板、自定义类型当做模板参数

    生成一个类模板 类中用到了未知类型叫做类模板 用 template 修饰的类 这个类就是一个模板类 多用在数据结构中 忽略类型的问题 只要被 template 修饰 就是一个模板类 有没有用未知类型都是模板类 把模板当做一种特殊的数据类型即
  • hdoj1036

    讨厌的输入和输出 include
  • C语言枚举

    一 枚举类型 枚举类型 一个整型变量只有几种可能的值 值用枚举常量来表示 每个枚举常量可以用一个标识符来表示 也可以为它们指定一个整数值 如果没有指定 那么默认从 0 开始递增 在C 语言中 枚举类型是被当做 int 或者 unsigned
  • 计算机图形学----光线追踪----路径追踪

    基础知识预备 概率论 概率 期望 概率 值 PDF 概率密度函数 概率密度函数 p x 在数学中 连续型随机变量的概率密度函数 在不至于混淆时可以简称为密度函数 是一个描述这个随机变量的输出值 在某个确定的取值点附近的可能性的函数 也就是结