![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
光线追踪
文章平均质量分 68
Dezeming
研究方向:数学原理,GPU加速技术,数据结构与算法,机器学习,深度学习神经网络,3D可视化,计算机图形学,图像处理,计算机视觉,Qt程序设计,C++编程
曾学习和研究过:Java,51,stm32,msp430等单片机,嵌入式ARM,DSP,模拟/数字电路,树莓派
展开
-
PBRT的程序运行流程
一、程序启动定位到生成完的PBRT的Release目录下,在终端输入:pbrt ../Scenes/material-testball/scene.pbrt即可开始进行渲染。定位程序到pbrt.cpp:main函数为执行入口。一开始初始化google工具,我也不知道有什么用处。然后接下来就是对输入的字符串进行比较,有一些命令行命令,strcmp相等返回0,如果判断不是任何命令,则把该字符串入vector。上面就是把文件名存入vector。而后根据option初始化:option里...原创 2020-12-08 20:40:58 · 749 阅读 · 0 评论 -
多重重要性采样(MIS)与光线追踪技术
有人问我什么是MIS,我懒得解释,想给她搜几篇文章看,结果从网上搜了半天也没几篇关于MIS多重重要性采样有关的文章,着实有些不解。这么重要的技术,为什么仅仅存在于论文的世界里呢?作为上个世纪末一篇流芳几十年的博士论文,发表在SIGGRAPH上,即《Robust Monte Carlo Methods for Light Transport Simulation》这部承前启后的开山之作,里面提出的最重要的方法之一就是MIS算法,既然没有多少人写,那我就自己来写一下吧,一是对自己在这方面的研究略微比较自原创 2020-11-22 22:45:40 · 7658 阅读 · 1 评论 -
编译PBRT-v3源码
首先下载文件和配置环境:安装VS2015安装git ,git的下载网址为https://git-scm.com/downloads在git里输入命令:git clone --recursive https://github.com/mmp/pbrt-v3/一定不要不加 --recursive,不然cmake的时候会提示你没有recursive等相关信息。下载后的文件在https://blog.csdn.net/tiao_god/article/details/1089974..原创 2020-10-10 19:25:42 · 412 阅读 · 0 评论 -
利用MC原理来计算面光源对空间点入射的能量
假设光源亮度是S,我们知道点光源对空间某点的入射能量是:所以这里推导一下面光源。过程比较粗略:原创 2020-08-31 08:40:14 · 1716 阅读 · 0 评论 -
《学一辈子光线追踪》 十 你的余生+极简后记
蒙特卡洛光线追踪技术系列见蒙特卡洛光线追踪技术这本书的目的是显示一种组织基于物理渲染器的采样方法的所有数学i的细节。现在你可以探索很多不同的潜在途径。如果你想探索蒙特卡罗方法,可以研究双向和路径间隔的方法,比如Metropolis。概率空间不是立体角,而是路径空间,路径是高维空间中的多维点。不要让这吓到你——如果你能用一个数列来描述一个物体,数学家称它为所有可能的数列空间中的一个点。那不只是为了作秀。一旦你得到了这样一个干净的抽象,你的代码也可以变得干净。干净的抽象是编程的全部!如果你想做电..原创 2020-06-20 21:11:19 · 537 阅读 · 0 评论 -
《学一辈子光线追踪》 十 完成pdf管理
蒙特卡洛光线追踪技术系列见蒙特卡洛光线追踪技术到目前为止,我已经使用color函数创建了两个硬编码的pdf:1、与光的形状有关2、与法向量和曲面类型相关的p1()我们可以将关于光的信息(或者我们想要采样的任何东西)传递到颜色函数中,我们可以向材质函数请求pdf(我们必须对它进行检测)。我们也可以请求hit函数或material类来提供是否有镜面反射向量。我们要考虑的一件事是像上漆的木材一样的材料,部分是理想的镜面(抛光)和部分漫反射(木材)。某些渲染器使材质生成两条光线:一条镜面反射..原创 2020-06-20 20:49:20 · 530 阅读 · 0 评论 -
《学一辈子光线追踪》 八点五 和 九 混合密度程序跟踪解读 加 一些架构决策
蒙特卡洛光线追踪技术系列见蒙特卡洛光线追踪技术我们从 color 函数开始: if (depth < 50 && rec.mat_ptr->scatter(r, rec, albedo, scattered, pdf_val)) { ........ } else { return emitted; }当采样光线已经递归到50次或者打到光源时,返回emitted。如果小于50次时执行scattered程序,产生一个散射方向以及..原创 2020-06-20 02:55:00 · 412 阅读 · 0 评论 -
《学一辈子光线追踪》 八 混合密度
蒙特卡洛光线追踪技术系列见蒙特卡洛光线追踪技术我们使用了一个与余弦θ相关的pdf和一个与光采样相关的pdf。我们想要一个总的pdf来结合这些pdf。一个常见的概率工具是把密度混合来形成一个混合密度。pdf的任何加权平均值都是pdf。例如,我们可以平均这两种密度:pdf_mixture(direction) = ½ pdf_reflection(direction) + ½ pdf_light(direction)我们该如何编写代码来实现这一点?有一个非常重要的细节,使这不如人们期望的那么容易..原创 2020-06-20 02:15:07 · 476 阅读 · 0 评论 -
《学一辈子光线追踪》 七 直接采样光
蒙特卡洛光线追踪技术系列见蒙特卡洛光线追踪技术几乎均匀地在方向上采样的问题是,光的采样率不超过其他不重要的方向的采样率。我们可以使用阴影光线并分离出直接照明。但是,作为替代方法,我只会发射更多的采样光线到光源上。我们以后可以用它来向我们想要的任何方向发射更多的光线。很容易选择一个指向灯光的随机方向;只需在灯光上选择一个随机点并向该方向发送光线即可。但我们也需要知道pdf(方向)。那是什么?对于a区域的光,如果我们在该光上均匀采样,则该光表面上的pdf为1/a。但定义方向的单位球体区域上的pdf是..原创 2020-06-19 17:48:19 · 907 阅读 · 0 评论 -
《学一辈子光线追踪》 六 正交基
蒙特卡洛光线追踪技术系列见蒙特卡洛光线追踪技术在最后一章中,我们开发了生成与日晷相对的随机方向的方法。我们要做的是基于任意曲面的法向量。正交正规基(ONB)是三个相互正交的单位向量的集合。笛卡尔xyz轴就是这样的一个ONB,我有时忘记了它必须坐在某个真实的地方,有真实的方向,才能在真实世界中有意义,而在虚拟世界中有一些虚拟的地方和方向。图片是相机和场景相对位置/方向的结果,只要相机和场景在同一坐标系中描述,一切都是可以的。假设我们有一个原点o和笛卡尔单位向量x/y/z。当我们说一个位置是(3,-..原创 2020-06-18 20:05:00 · 648 阅读 · 0 评论 -
《蒙特卡洛光线追踪》 随机方法 超详分析(数学+程序预警)
蒙特卡洛光线追踪技术系列见蒙特卡洛光线追踪技术上一节说过,结束后会单独写一节关于前面所有知识的梳理和总结。这一节不可能会特别短,但很可能会特别长,因为以前的程序都写完了,这一节基本上不会写程序,而全部都是原理的详细分析(超级详细!)。就让我们做好心理准备,开始走入MC的世界。一、MC与积分首先还是我们要进行的积分:结果就是下图中蓝色区域的面积:其实也很好使用MC方法,产生一堆横坐标0-2,纵坐标0-4之间的随机数,然后判断其在蓝色区域还是黄色区域,然后根据比值计算出蓝色区..原创 2020-06-18 03:49:10 · 2806 阅读 · 0 评论 -
《学一辈子光线追踪》 五 产生随机方向
蒙特卡洛光线追踪技术系列见蒙特卡洛光线追踪技术这一节结束后,我会对前面的关于概率和光线追踪的知识进行一下总结和归纳。在本章和下两章中,让我们加强理解和工具,找出哪个康奈尔盒子的渲染结果是正确的。我们先来看看如何生成随机方向,但为了简化,我们假设z轴是曲面法向,theta是与法向的夹角。我们将在下一章中把它们定向到曲面法向量。我们只讨论关于z的旋转对称分布,所以p(direction) = f(theta)。如果你有学过高级微积分,你可能记得在球坐标系的球面上 dA = sin(theta)*dt..原创 2020-06-17 03:44:17 · 654 阅读 · 1 评论 -
《学一辈子光线追踪》 四点五 代码对比分析
蒙特卡洛光线追踪技术系列见蒙特卡洛光线追踪技术先粘贴一下以前的lambertian代码:class lambertian :public material {public: lambertian(texture*a):albedo(a){} virtual bool scatter(const ray& r_in, const hit_record& rec, vec3& attenuation, ray& scattered)const { vec3..原创 2020-06-16 16:38:29 · 389 阅读 · 0 评论 -
《学一辈子光线追踪》 四 重要性采样材料
蒙特卡洛光线追踪技术系列见蒙特卡洛光线追踪技术在接下来的两章中,我们的目标是利用我们的程序向光源发送一束额外的光线,这样我们的图片噪声就不会太多了。假设我们可以使用pdf pLight(direction) 向光源发送一束光线。假设我们有一个与s相关的pdf,我们称之为pSurface(direction)。pdf 的一个优点是,可以使用它们的线性混合来形成混合密度,这也是pdf。例如,最简单的方法是:p(direction) = 0.5*pLight(direction) + 0.5*pS..原创 2020-06-16 15:10:15 · 743 阅读 · 0 评论 -
《学一辈子光线追踪》 三 光散射
蒙特卡洛光线追踪技术系列见蒙特卡洛光线追踪技术这一小节全都是文字,但是比较重要。虽然之前在三维渲染 光能辐射基础三维渲染 BRDF双向反射分布函数三维渲染 相位函数三维渲染 体照明模型这几个章节也都很详细的描述过光学了,这里从概率的方面再进行描述。在这一章中,我们实际上不会实现任何东西。我们将在第四章中为我们的节目设置一个大的灯光变化。我们上一本书中的程序已经散射了表面或体积的光线。这是光与表面相互作用的常用模型。一种自然的建模方法是概率。首先,光线被吸收了吗?光散射..原创 2020-06-16 02:53:13 · 654 阅读 · 0 评论 -
《学一辈子光线追踪》 二点五五 在球面方向的MC积分
蒙特卡洛光线追踪技术系列见蒙特卡洛光线追踪技术竟然有两个第二章,我也是很无奈啊。原创 2020-06-15 15:15:41 · 513 阅读 · 0 评论 -
《学一辈子光线追踪》 二点五 一维MC积分(二)
蒙特卡洛光线追踪技术系列见蒙特卡洛光线追踪技术我们现在可以对以前的积分进行采样I = integral(x^2, 0, 2)我们需要解释x的pdf的不均匀性。如果我们样本太多,我们应该降低权重。pdf 是一个很好的度量方法,可以用来衡量正在进行的抽样工作有多少。所以权重函数应该与 1/pdf 成正比。实际上是1/pdf:#include <math.h>#include <stdlib.h>#include <stdio.h>#include ..原创 2020-06-15 01:24:14 · 432 阅读 · 0 评论 -
《学一辈子光线追踪》 二 一维MC积分(一)
蒙特卡洛光线追踪技术系列见蒙特卡洛光线追踪技术积分是关于计算面积和体积的,所以如果我们想让第1章最大限度地混淆,我们可以将它以一个积分的形式组织起来。但有时积分是最自然、最干净的表达方式。渲染常常是这样一个问题。让我们看一个经典的积分:在计算机科学符号中,我们可以这样写:I = area( x^2, 0, 2 )我们也可以这样写:I = 2*average(x^2, 0, 2)我们也可以这样写:这表明了一种MC方法:#include <math.h>#..原创 2020-06-15 00:30:42 · 1140 阅读 · 0 评论 -
蒙特卡洛光线追踪技术
蒙特卡洛光线追踪技术系列 见本系列博客将从头开始,介绍蒙特卡洛光线追踪的方法,结合《Monte Carlo Ray Tracing》这本书,记录蒙特卡洛算法的基本原理和算法设计。原创 2020-04-14 19:25:12 · 17046 阅读 · 2 评论