PBRT笔记(2)——BVH】的更多相关文章

BVH 构建BVH树分三步: 计算每个图元的边界信息并且存储在数组中 使用指定的方法构建树 优化树,使得树更加紧凑 //BVH边界信息,存储了图元号,包围盒以及中心点 struct BVHPrimitiveInfo { BVHPrimitiveInfo() {} BVHPrimitiveInfo(size_t primitiveNumber, const Bounds3f &bounds) : primitiveNumber(primitiveNumber), bounds(bounds), c…
前言 本文仅作为个人笔记分享,又因为本章涉及多个专业领域而本人皆未接触过,所以难免出错,请各位读者注意. 对于数字图像需要区分image pixels(特定采样处的函数值)和display pixels(显示器显示值). 收集采样值,并将其转化为连续函数的过程被称为重构. 为了计算在数字图像上的离散像素值,我们需要在原始的图片函数上不断的采样. 采样与重构的过程中涉及到近似运算,而这个过程中产生的错误被称为锯齿.其产生原因为计算机无法连续对场景进行采样. 可以理解为把真实世界所得图像(人眼)当做…
传输公式 传输方程是控制光线在吸收.发射和散射辐射的介质中的行为的基本方程.它解释了第11章中描述的所有体积散射过程--吸收.发射和内.外散射.并给出了一个描述环境中辐射分布的方程.光传输方程实际上是传输方程的一个特例,由于忽略参与介质而进行简化,并专门用于从表面散射. 在方程的基本形式中,传输方程式是一个描述光束在空间中某一点上的辐射量如何变化的积分微分方程.它可以转化为一个纯积分方程,用以描述描述了沿射线无穷多个坐标点的参与介质的效果. 回忆一下11.1.4章节的辐射源项Ls,它表示p点处ω…
采样反射函数 BxDF::Sample_f()方法根据与相应的散射函数相似的分布来选择方向.在8.2节中,该方法用于寻找来自完美镜面的反射和透射光线;在这里讲介绍实现其他类型的采样技术. BxDF::Sample_f()在[0,1)范围内取得两个使用反演法取得的样本,其中这些样本是使用分层采样或者低偏差采样生成的,所以这些样本本身具有很好的分布性. 这个方法默认采用余弦加权的半球采样.这个样本分布对于大多数BRDF会产生正确的结果. Spectrum BxDF::Sample_f(const V…
这里还涉及到pdf.方差等概念,推荐去看<全局光照技术:从离线到实时渲染> 积累分布函数 cumulative distribution function (CDF) 蒙特卡洛估算 为了计算式蒙特卡罗估算量,就有必要从选择的概率分布中抽取随机样本. 逆推法 逆推法使用一个或多个均匀的随机变量映射到随机变量的期望分布中. 为了从该分布中获取样本,我们首先计算CDF P(x),在这个函数是连续的情况下,P表示为p的不定积分. 当从该分布中获取样本时,我们可以使用均匀随机数ξ,并根据CDF选取某一可…
自发光灯光 至今为止,人们发明了很多光源,现在被广泛使用的有: 白炽灯的钨丝很小.电流通过灯丝时,使得灯丝升温,从而使灯丝发出电磁波,其波长的分布取决于灯丝的温度.但大部分能量都被转化为热能而不是光能. 卤素灯,在灯中充入惰性气体,使得灯的寿命增加,与白炽灯一样使用钨丝. LED灯 发光效率是衡量光源将能量转化为可见光的效率.对人眼来说,非可见光波长的辐射几乎没有价值,有趣的是,它是光度量(发出的光通量)与辐射量(它所使用的总功率或它发出的总波长的总功率(以光通量计算)之比: \(\frac{\…
体散射处理过程 3个影响参与介质在环境中的辐射度分布的主要因素: 吸收:减少光能,并将其转化为别的能量,例如热量. 发光:由光子发射光能至环境中. 散射:由于粒子碰撞,使得一个方向的辐射度散射至其他方向. 吸收 吸收被描述为一段介质截面区域.每单位距离媒介密度与吸收光能的比被定义为\(\sigma_a\).截面区域或随着位置与方向的变化而变化,尽管如此,通常还是会定义为位置函数.它通常也被定义为一个光谱变化量,\(\sigma_a\)与距离成反比关系\(m^{-1}\).这意味这个值无需被判断是…
采样与抗锯齿 当高分辨率贴图被缩小时,贴图会出现严重的混淆现象.虽然第7章中的非均匀采样技术可以减少这种混叠的视觉影响,但是更好的解决方案是实现基于分辨率进行采样的纹理函数. 可以在使用贴图时先对贴图的分辨率进行判断,避免采样高分辨率贴图. 为了解决贴图采样函数造成的混淆问题,我们必须解决以下两个问题: 必须计算贴图空间的采样率,以及获得贴图分辨率,之后就可以计算出屏幕空间的采样率,最后为了获得图元表面的采样率就必须对贴图进行采样,以获得贴图采样率. 对于给定的贴图采样率,必须使用采样理论去引导…
BSDF类 表面着色器会绑定场景中每一个图元(被赋予了这个着色器),而表面着色器则由Material类的实例来表示.它会拥有一个BSDF类对象(可能是BSSDF),用于计算表面上每一点的辐射度(颜色). BSDF代表了BRDFs与BTDFs的集合.BSDF构造函数接受一个SurfaceInteraction对象,该对象包含关于表面上任意一点的微分几何信息,以及一个参数eta,该参数给出了边界上的相对折射率.对于不透明的表面,该参数则无效.构造函数将使用着色法线来构造一个正交坐标系.本节中ns表示…
基础术语 表面反射可以分为4大类: diffuse 漫反射 glossy specular 镜面反射高光 perfect specular 完美反射高光 retro-reflective distributions 后反射分布 几何坐标系以及工具函数 pbrt中的反射是在反射坐标系中进行计算的.坐标系由着色点处法向量与两个切向量组成,也就是 正交基向量(s,t,n),分别于x,y,z相对齐.以\(( \theta ,\phi)\)球体坐标系来表达方向. 从图8.3中可以了解到以下内容,代码在re…
Camera class Camera { public: //实现相机在一定时间内进行特定的运动 AnimatedTransform CameraToWorld; //快门开/关数据,可以用于计算动态模糊 const Float shutterOpen, shutterClose; //胶片类指针用于计算最终图像 Film *film; //介质类,表达相机所在的介质(在空气.水中) const Medium *medium; } GenerateRay生成当前相机采样的一条光线,并且返回生成…
茎节点与叶子节点 茎节点与叶子节点皆适用KdAccelNode来表示 注意:这里使用了匿名union union有个特性:内部类型共用一段内存,且大小为内部最大类型的大小. struct KdAccelNode { <KdAccelNode Methods> union { Float split; // Interior int onePrimitive; // Leaf int primitiveIndicesOffset; // Leaf }; union { int flags; //…
PBRT2与3之间的改动 增加了一个功能完备的BRDF模型,支持体积光照与重要性多重路径采样. 次表面散射,基于光线追踪技术,无需预处理. 解决浮点数四折五入的问题 光子映射 样本生成 第一章多了讲并行的东西 看到第2页 渲染分块问题 对这个渲染任务过多的分块会影响性能. 场景的复杂性会对不同CPU核心的渲染速度产生影响.所以如果是分块数等于核心数,渲染完的核心会等待没渲染完的核心. 过小分块也是不科学的,因为处理核心问题有一定的开销. pbrt里用的是16*16的方案 浮点类型 pbrt采用了…
SPD 光谱功率分布 CoefficientSpectrum 根据给定采样数表示光谱,为RGBSpectrum.SampledSpectrum的父类. 重载大量的基础代码,比较简单不做赘述.其中为了方便访问对应区域的SPD,而重载了[]操作符.(TabulatedBSSRDF等会用到) 该类只要以各种基础运算函数.重载各种操作符为主,以及一个Float c[nSpectrumSamples];用于保存SPD信息. SampledSpectrum SampledSpectrum则将光谱表达为波长范…
目录 一. 前言 1.1 本文动机 1.2 PBR知识体系 1.3 本文内容及特点 二. 初阶:PBR基本认知和应用 2.1 PBR的基本介绍 2.1.1 PBR概念 2.1.2 与物理渲染的差别 2.1.3 PBR的特征 2.2 PBR的衍变历史 2.2.1 Lambert(1760年) 2.2.2 Smith(1967年) 2.2.3 Phong(1973年) 2.2.4 Cook-Torrance(1982年) 2.2.5 Oren Nayarh(1994年) 2.2.6 Schlick(…
四个关键概念 Energy(Q)   每一个光子都有特定的波长并携带特定的能量:      其中c为光速,h为普朗克常量. Flux(Φ)   辐射通量,可以直观理解为功率.是能量对时间微分得到的    Irradiance(E)   再引入面积,可以得到单位时间单位面积得到的能量,在点p处的辐照度E为:    Radiance(L)   辐射度,最重要的概念,代表沿着某个单位立体角方向.单位时间.单位面积的光线强度.    和渲染方程的关系      渲染方程中的L即为上文中的辐射度.…
  - BVH with SAH (Bounding Volume Hierarchy  with Surface Area Heuristic) -      0. Overview 包围层次盒(BVH)是一种基于"物体“(object, 区别于“空间”,spatial )的场景管理技术,广泛应用于碰撞检测.射线相交测试之类的应用场合中. 一般情况下BVH的性能都比较不错,起码比基于格子(Grid)的场景管理技术要高.   BVH的数据结构其实就是一棵二叉树(Binary Tree).它有两种…
    - DDA(Digital Differential Analyzer, 数值微分法) -    计算机图形学中,经常会遇到一些计算机中”经典“的问题.例如,如何利用计算机”离散“的特质,模拟现实中”连续“的概念?关于这个问题的一个具体应用,就是如何利用计算机”画直线“的问题.我们知道在纯粹抽象的数学中,一条直线用y=mx+b就可以表达(其中m是斜率):但如果要画在计算机屏幕上,就没那么容易:因为计算机屏幕是由许多分散的像素格子组成的,你需要决定在什么时候换行或者换列.这种模拟的本质,还…
23 DesignPatterns学习笔记:C++语言实现 --- 1.4 Builder 2016-07-21 (www.cnblogs.com/icmzn) 模式理解…
目录 网格 (Grid) 网格的应用 四叉树/八叉树 (Quadtree/Octree) 四叉树/八叉树的应用 BSP树 (Binary Space Partitioning Tree) 判断点在平面前后算法 BSP树的应用 参考 k-d树 (k-dimensional tree) k-d树的构建 k-d树的应用 参考 层次包围盒树 (Bounding Volume Hierarchy Based On Tree) 层次包围盒树的应用 参考 自定义区域 判断点是否在凸多边形区域算法 自定义区域划…
这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file>,注意,可反复多次使用,添加多个文件:// 第二步,使用命令git commit,完成. 2.修改文件 git status命令可以让我们时刻掌握仓库当前的状态,上面的命令告诉我们,readme.txt被修改过了,但还没有准备提交的修改. git diff顾名思义就是查看difference,显示的格…
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者服务器 一.安装webpack 你需要之前安装node.js $ npm install webpack -g 安装成功后,便可以使用webpack命令行了. ok,开始工作! 二.新建一个空目录,名字为myApp,文件如下 entry.js document.write("It works.&qu…
SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnblogs.com/lyhabc/articles/3914213.html Microsoft SQL Server 2005技术内幕:T-SQL查询笔记http://www.cnblogs.com/lyhabc/articles/3912608.html Microsoft SQL Server 2…
1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 3.  UML类图 4.  思维导图 (右键查看图片可放大) 5.  PHP代码 我已经把有关这部分PHP代码,上传到git.oschina.net上,可以在 https://git.oschina.net/andywww/myTest 的文件夹template_Study下看到相关的完整代码. templa…
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UML类图解析: 4.PHP代码: 我已经把有关这部分PHP代码,上传到git.oschina.net上,可以在 https://git.oschina.net/andywww/myTest 的文件夹 login1下看到相关的完整代码. (完.)…
这里将要和大家分享的是学习总结第三篇:首先感慨一下这周跟随netcore官网学习是遇到的一些问题: a.官网的英文版教程使用的部分nuget包和我当时安装的最新包版本不一致,所以没法按照教材上给出的列子测试实例,官网给出的一句话暂未发布最新包 b.某些资料不够详细只是一句话,加上网速慢,查阅资料不行啊 好了,感慨完后,下面是本篇将要分享的学习步奏,对于刚学或者即将要学习的朋友做个相互交流: 1.Model Validation(实体模型验证) 2.自定义验证属性 3.创建一个接口支持返回json…
以下是学习springmvc框架时的笔记整理: 结果跳转方式 1.设置ModelAndView,根据view的名称,和视图渲染器跳转到指定的页面. 比如jsp的视图渲染器是如下配置的: <!-- 配置渲染器 --> <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property…
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL in 10 Minutes - Fourth Edition> 读书笔记汇总 建立练习环境 以CentOS7系统下的MySQL和MariaDB为例. 01--了解SQL 什么是SQL,为什么很有用 基本的数据库术语 02--检索数据 如何使用SQL的SELECT语句来检索单个表列.多个表列以及所有表列 如…
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.out参数 二.C#winform编程 1.C#WinForm基础制作简单计算器 2.C#WinForm基础Email分析器 3.C#WinForm基础累加器 4.C#WinForm基础图片(显示和隐藏) 5.C#WinForm基础登陆失败三次退出系统 6.C#WinForm基础城市选择器 三.c#面向…
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之GUI编程窗体事件 6.JAVA之GUI编程Action事件 7.JAVA之GUI编程鼠标事件 8.JAVA之GUI编程键盘码查询器 9.JAVA之GUI编程列出指定目录内容 10.JAVA之GUI编程弹出对话框Dialog 11.JAVA之GUI编程菜单 12.JAVA之GUI编程打开与保存文件…