如何阅读PBRT3?

 

 

 

 

 

 

 

 

 

https://www.zhihu.com/question/309420057

 

如何阅读PBRT3?

目前第一章还未读完,只读到了1.4并行化。

不知道以怎样的姿势阅读才是正确的,以目前的进度来看,发现尤其是1.3对pbrt的概述那一节读的很混乱,好多类和方法就这么突然告诉你,并不知道到底是怎么回事。

我知道后面都详细的讲到了,但是不知道到底有没有必要把第一章这些东西全都查完弄清楚,还是说通看一下,到后面的章节细读。

另外整本书的阅读该如何进行,希望能有个效率比较高的方法。感谢。

被浏览

23,065

10 个回答

Ubp.a

Ubp.a

计科与数学的爱好者

最初学了 Peter Shirley 的 Ray Tracing in One Weekend

Ubpa/ToyRTX​

github.com图标

紧接着看 PBRT,但看的云里雾里的。

因为工作原因,就先放弃 PBRT 了,反正也看得难受。这时去学了 OpenGL,跟的教程是 LearnOpenGL CN

Ubpa/LearnOpenGL​github.com图标

再接着跟了 2018 的 CMU 15462 课程,学到了简单的 Path Tracing。

Ubpa/CMU_15_462​github.com图标

然后为了写毕设,就结合了之前学的 OpenGL 和 Path Tracing,写了个渲染引擎。

Ubpa/RenderLab​github.com图标

有了这些基础后,再看 PBRT 的时候就舒适了,能挑 重要的 / 想知道的 看,知道哪些可以跳过。

因为有自己的引擎,所以也不需要太关注 pbrt 的代码,只需作为参考。

正在看,做着笔记

(我想在看完后再来斟酌下怎样的顺序比较合理)

Ubpa/Note/PBRT​

github.com图标


一直在忙,没时间做最后的整理工作....

编辑于 2019-10-26

继续浏览内容

知乎

发现更大的世界

打开

浏览器

继续

aain.svck

aain.svck

图形引擎研发 门萨底层菜鸡

以下是我半年前PBRT3的学习路线。虽然每个人的基础都不一样,针对我个人的学习规划很难对别人形成量身定做的效果,但是因为我已经看过一部分内容,所以好歹也具备一些总结性,可以有效的帮读者跳过一部分和全局理解无关的内容,让学习策略更具备目的性和全局性

综上,应该还是有一点参考价值的。所以厚颜无耻的po出来了 XD。

下面讲重点。接下来,范围将会主要围绕在第9章之前来做。中期包括一点12章的内容,后期包括很少的14章内容。核心目的是实现基于最基础的Whitted光线追踪的离线渲染器。

首先,跳过1-4章。除非你很想了解光线追踪史,基础数学知识,或者PBRT的形状接口,还有求交算法。后面需要的时候会返回来看这里的部分内容,但总的来说,它们对理解实现光线追踪知识没有太大帮助。

第5章:颜色和辐射度学,可以跳过前面rgb-xyz相关的内容,直接从辐射度学开始看起。把光线映射的数学模型先建立起来。

第6章:酌情跳过,毕竟摄像机的实现dx和OpenGL基本算是自带,除非你想实现6.4的全景摄像机。

第7章:酌情跳过,因为主要就是教你如何进行采样可以避免锯齿和摩尔纹之类的只知识,和最终目的——实现一个最简单的光线追踪,关系并不密切。

第8章:反射模型,这个是要点,需要花时间看一下。提前消化整个反射模型有助于我们更好的理解光线追踪流程。但是,只需要看到8.3,也就是Lambert模型及其之前的部分,就可以形成概念了,后面的内容都是锦上添花的,对我们从全局理解而言用处不大。

PS:这里最大的争议应该就是我跳过微表面相关的内容了。毕竟跳过微表面就意味着放弃第10章的纹理,丢失了很大一块学习内容。但这和我当时的学习原则有关:微表面和纹理的知识可以回头再补,一切以形成全局概念为先。因此是否必须学习第8章和第10章的微表面和纹理,我不提供意见,请自行斟酌。

第9章,看到9.2.1的Matte材质就可以了,后面全部跳过。因为现阶段的主要目标是把材质在pbrt中的一套运作流程搞清楚。但如果想要渲染一张图片看看,肯定需要学一个最容易理解的材质,而最简单的毫无疑问是只有漫反射的Matte。

(至于玻璃、镜子、金属什么的,可以在程序框架成型以后,再回来补充。)

第10章:纹理。没有学微表面知识,所以跳过。

第11章:体积光,PBRT自己都加可选了……跳过。

第12章,跳过12.1,看12.2灯光接口,然后跳过可见性测试的内容(即跳过阴影。将来写代码时如果需要判断可见性测试,逻辑永远设为true就可以了),最后再看一下12.3的点光源就可以了。我们只需要一种光源(点光源最简单),所以不用看12.3.1以后的内容。

PS:要实现阴影,外层逻辑的确并不难,没有跳过的必要,但内层就麻烦了——必然会涉及第4章的求交加速。但由于这里第4章我们是没有看的,所以这里也先跳过阴影。


好的,到这一步基本上离线渲染的思路算是通了,但这还没完。因为接下来就要写代码了,而现在只是看了理论,至于如何付诸实践大概率还是一脸懵逼…

所以做到这一步,需要放缓阅读进度,自己先花一到两个星期,总结一下已经学过的知识。现在打开onenote或者别的什么,草稿本都行,将上面学到的全部知识画一个离线渲染流程。把每一个过程都抽象出来,多自己思考。

注意,这时候第1章的1.3.4和1.3.5,即光线追踪中的主渲染循环+Whitted积分器必须跑回去看,会派上很大用场。因为这两小节主要讲主渲染+whitted积分器的执行流程,对你构建自己的渲染框架非常有帮助。

(PS,题主一开始先看第一章,我现在是不太认同啦……容易有鬼知道他这一坨讲的什么玩意的感觉——没错,一开始我也是这么干的。)

下面是我当时画的渲染流程草图,图没什么参考价值。重点是要自己能搞出一套完整的思路和行动方案。

我当时画的渲染流程草图,加强自己理解用的,对其他人来说没什么参考价值。

然后可以开始码代码了,照着你的图去做,做到碰撞检测的时候,可能需要看射线和三角形相交的内容,在3.6 triangle mesh里有相关资料。至于射线和aabb相交就简单的多,网上到处都是,可以自己查。

依照到现在已学的知识和架构思路,基本上可以用自己写的代码,生成第一张Hello GI图了。


没错不是很好看……但主要的原因是我们现在的材质、形状和光源都太少了,导致它虽然是实打实用PBRT的方式渲染出来的。但看起来根本就和离线渲染的没差别……

因此,接下来开始折腾反射+折射。

做反射和折射的时候,不能只学习书,还需要学习源码。

主要的原因就是源码里面直接给出了玻璃和镜面材质的实现方式。这两种材质最能体现出反射且实现简单,但在PBRT中似乎被略过了(我没找到)。然后依照实现Matte材质的方法照葫芦画瓢,做出玻璃和镜面材质即可。

这里有一点麻烦:当时做Matte材质的时候,不需要实现反射机制相关的方法,所以这部分方法我们也完全没看。因此这时候需要回到书本,看一下14.1章节的采样反射方法的相关代码——诸如BxDF::Sampler_f()的相关内容,为自己提供构建反射部分代码的思路。我印象里只看14.1,采样反射函数的部分内容就可以了。

另外,由于我们常参考的pbrt源码中混入了一部分采样内容,此时还没有Sampler概念,因此很难把这些内容剥离出来,所以在码代码的时候,如果看不懂Sampler相关的内容,可以在这个时候暂停自己的代码进度,掉头看一下第七章的7.2.2-7.2.4,即基本采样接口、采样器实现和像素采样器(最基本的采样器)。然后把像素采样器实现到自己的渲染框架。

然后就可以做出带反射的PBRT图了,下面这张是我按照上面的思路自己做的,包括了Matte、镜面、玻璃材质的概念(找这个破图花了我好长时间……瑕疵很多,不过越简单越方便理解参考)。

第二张PBRT渲染图,引入了反射和折射的概念。由于当时还没有求交加速,渲染花了很长的时间,并且导致图片的右下角出现了绘制顺序的瑕疵。不过重点是图中玻璃球的反射和折射表现良好。

至此应该已经初步入门并有了自己的学习策略,不会再出现一头雾水,不知道怎么学的情况。

当然后面还需要做的事情有很多,BVH求交加速、阴影、新的材质、灯光和形状、甚至导入fbx模型文件……当然最核心的还是要进一步学会并实现双向追踪、光子映射之类的。但那些都是后话了。

编辑于 2019-01-26

继续浏览内容

知乎

发现更大的世界

打开

浏览器

继续

Dezeming

Dezeming

啦啦啦

这个问题我觉得自己很有发言权,因为我曾经跟题主遇到的情况很类似,区别是我坚持读完了前七章,然后我发现有些不对劲,因为读完之后对很多知识的印象都比较模糊,尤其是对于贯穿全文的光线微分,非常影响阅读体验。

后来我就想,一定是我打开的方式不对。没错,既然打开的方式不对,我们就要重新打开。

首先先要阅读完光追三部曲,自己先实现一个小巧的光线追踪引擎:

Shirley P. Ray Tracing in One Weekend[J]. 2016.

Shirley P. Ray Tracing The Next Week[J]. 2016.

Shirley P. Ray Tracing The Rest Of Your Life[J]. 2016.

然后弄明白PBRT中的场景文件的加载和构建流程:

(唉,本来以为写书很容易的,结果校订什么的都很麻烦。写错了也怕耽误读者,系列书也得保证内容一致。虽然目前写完了八本了,但是因为需要校订和检验,估计6月左右才能发布的网站上)

场景文件怎么读入到PBRT系统,并初始化各个基类,然后开始渲染的呢?这个流程弄明白了,学会PBRT就已经成功了一半了

推荐第一本我自己写的小书《PBRT系列1-文件加载和设定》(该书会免费发布到网上,正在搭建网站:https://dezeming.top/ ,我特别喜欢《光追三部曲》的风格,从零开始一步一步教大家构建代码,很有成就感):

对照着源码读完这本小书也就一两天时间,之后我敢说,你已经知道怎么继续研究PBRT了。

之后,理解并实现一个朗伯和完美镜面物体康奈尔盒场景的Whitted光线追踪器:

其实PBRT的Whitted光追实现非常简单,但是涵盖了整个渲染的流程,因此我们最好先把PBRT中的渲染流程搞清楚,然后再自己实现一遍,之所以是朗伯和完美镜面物体,因为它们足够简单。

我写的第二本小书就是如此:《PBRT系列2-代码实战-Whitted光线追踪引擎》该书已写完。只需要一两天,你就能弄明白PBRT中的Whitted光追流程和算法,并在自己的光线追踪引擎上实现。

然后研究一些基本的模块的细节,并动手实现:

比如什么是光线微分,采样器的作用(产生随机数),滤波器的作用(图像后处理,纹理过滤)。以及PBRT的最重要的结构:材料和纹理。

如果等得起的话,我正在筹措写一系列的关于如何从简单光追引擎(光追三部曲)过渡实现PBRT引擎的小书。目前我构建的PBRT系列书流程大致如下:

首先是介绍场景解析的书(已完成)

然后是弄懂PBRT中Whitted光追的书并自己写代码实现(已完成)

之后我们就全部抛弃《光追三部曲》构建的系统,开始动手制作一个PBRT光追器:

学习和研究PBRT的基本组成,矩形向量变换工具、Shape和加速结构(已完成):

然后实现颜色与光谱类的学习和移植(该书已完成)。

然后实现PBRT的相机系统(该书已完成):

相机与离焦模糊

之后学习采样器,并将PBRT的渲染积分器实现到自己的系统中。(该书已完成)

之后我们再去研究材料和纹理,然后实现相机和光线微分以及采样器,之后实现直接光照和路径追踪器,之后介绍体散射和体渲染,还有些内容等前面这些都完成了再规划。

PBRT系列小书

学习完PBRT系列8以后能实现的效果

PBRT材质比较多(虽然与专业成熟的渲染器相比也不是很多),因此我会在系列10详细介绍每一种材质。

移植PBRT实现的面光源软阴影

虽然系列0到系列8都已经写完了,但还没有校验,错误可能会有不少。大概会等到6月份会不断校验并发布在个人网站上:https://dezeming.top/

关于答主:目前主要做医学影像体渲染实时光照算法,国内外的体渲染全局光照基本上都研究过一遍了,最近正在研究的是全局动态光照技术。

 

编辑于 03-09

继续浏览内容

知乎

发现更大的世界

打开

浏览器

继续

椎名深雪

椎名深雪

三流 CS 民科

目前也在阅读中,路径:加速结构,反射模型,path tracing, 反射模型(重构代码),BDPT&MLT以及相关的一坨东西,反射模型,无限修Bug中。

第一章我直接跳了。

发布于 2019-02-25

继续浏览内容

知乎

发现更大的世界

打开

浏览器

继续

梓川咲太

梓川咲太

人活着就是为了樱岛麻衣

就我自学经验来说(鄙人小白,摸着石头过河),coding 学习效果 > 上课 > 看书 > 闭门造车。要看书的话,还是有配套课程一起看比较好,Assignment 的质量都很高。

学习 PBRT 这本书鄙人推荐两条路线:

路线 1:跟作者 Matt Pharr 的课——CS 348 b,每年春季开课。

Image Synthesis Techniques (CS 348B)​

graphics.stanford.edu

 

  • 假定你有 C/C++ 和图形学基础,比如看过下面这两本书[1][2]

  • 或者先修课程 CS 348 a / CS 248 任选一门,前者最近一次公开课更新是 winter 17,比较慢。

推荐 CS 248(Winter),每年都有公开课。

Interactive Computer Graphics :: Winter 2019​cs248.stanford.edu图标

 

路线 2: CMU 15-462(Spring / Fall),每年开两次课,从图形学基础开始讲起。

Computer Graphics : Fall 2019​15462.courses.cs.cmu.edu

 

有 PathTracer 的 Assignment。

参考

  1. ^https://learning.oreilly.com/library/view/fundamentals-of-computer/9781482229417/
  2. ^http://cgpp.net/about.xml

编辑于 2019-10-30

继续浏览内容

知乎

发现更大的世界

打开

浏览器

继续

给渲染带来笑容

给渲染带来笑容

有些书在你对这个方向没有整体了解之前觉得是天书,有了整体了解以后就变成了工具书。

推荐:

基础差先看这个

Scratchapixel​

www.scratchapixel.com

 

喜欢网课可以看这个

https://www.bilibili.com/video/av39918593​www.bilibili.com

 

 

发布于 2019-01-22

继续浏览内容

知乎

发现更大的世界

打开

浏览器

继续

bluerose

bluerose

图形学与UE爱好者,坐标杭州

个人认为还是和你的目的有关,是为了做实时渲染、学习图形学知识,还是为了写高品质离线渲染器。前面两个原因就不推荐学习pbrt,你应该去学习《real-time rendering 4th》。

1.视基础决定辅助书籍

不知道你之前有没有学习过《Ray Tracing in One Weekend》,如果没有任何光线追踪的学习经验直接学习pbrt,你会体会到看天书的感觉。《Ray Tracing in One Weekend》的代码虽然不够深入,但却是光线追踪算法中的核心代码(万变不离其中)。

不过最好是配一本

@秦春林

写的《全局光照技术——从离线到实时渲染》,此书对你阅读蒙特卡洛方法之后的章节相当有帮助,毕竟知道算法之后,再看原文当然就轻松了。

本人之前还看过《Ray Tracing from the Ground Up》,至少抄了整个系统的代码,所以上手pbrt还算轻松。

2.借助知乎众的笔记

不少作者撰写的笔记也在我读pbrt的过程中起到了很大的作用。

 

@文刀秋二

他的基于物理的着色(迪斯尼的着色模型)、低差异序列(生成低差异的采样点)

@玉米 他的pbrt笔记

当然在此我也推销一下自己的pbrt笔记与心得。

bluerose:Raytracing in Weekend、Raytracing Ground个人评价以及学习推荐​

zhuanlan.zhihu.combluerose:PBRT读后感与阅读建议​zhuanlan.zhihu.combluerose的pbrt笔记​

zhuanlan.zhihu.com图标

最后几章是本人对pbrt的渣翻译,仅供参考。

编辑于 2019-04-19

继续浏览内容

知乎

发现更大的世界

打开

浏览器

继续

waley

waley

程序员

第一章都看不明白那说明你对这个东西本身是没有一个整体的感知而且编程水平有限。看这本书前提条件是你本身具备扎实的C++知识、面向对象的编程思维、以及非常重要的图形学相关的基础知识,其中采样、降噪这些又涉及到高等数学里面的知识。如果不具备这些冒然看下去肯定是看不出个所以然的。

还是先从图形学的基础知识着手,搞清楚光栅化、光线追逐这两种渲染方式,以及基础的图形学概念。

1、这里推荐《Fundamentals of computer graphics 4th》.

2、看Scratchapixel这个里面文章。

把1、2都做完了,理论上再去看pbrt3应该就不会无头苍蝇一样了。

当然也有一些比pbrt3要简单一些的书籍,比如入门的话,看看这个系列

《Ray Tracing in a Weekend》

《Ray Tracing The Next Week》

《Ray Tracing_ the Rest of Your Life》

发布于 2019-01-18

继续浏览内容

知乎

发现更大的世界

打开

浏览器

继续

Julyan

Julyan

泻药,人在美国,刚下飞机

占楼打字

发布于 2020-01-12

继续浏览内容

知乎

发现更大的世界

打开

浏览器

继续

匿名用户

匿名用户

我最近在学习如何把自己的光追代码加上 Monte Carlo 方法,起初自然用的 Ray tracing mini book 第三卷,但是看到一半就看不下去了,作者不仅很少画图,而且推导公式经常不解释某些符号是什么意义,只能凭经验猜,这直接导致阅读体验极差,没法在脑子里验证。

然后,我就去看 Scratchapixel 的文章,虽然作者讲的很耐心,图也画的很清楚,但是废话实在太多,整个讲 Monte Carlo 的篇幅比三卷 mini books 还长。

在如此不愉快的体验中,我忽然发现PBRT免费了,于是打开浏览器冲上去直接看第13章 Monte Carlo Integration 这一章看下来竟然出奇的顺利,作者虽然比较少画图,但是推公式之前基本都会把用到的符号介绍一下,阅读体验良好,代码也够简单,至此我对 Monte Carlo 的学习算是告一段落。

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值