
几个月前花了大约三四天看完了 Peter Shirley 的 Ray Tracing in One Weeken 和 Ray Tracing: the Next Week,作者用很少量的代码就写出了一个离线的路径追踪(Path Tracer)渲染器。
相比光栅化渲染,我更喜欢光线追踪,是因为光线追踪实现的渲染效果更加优秀,并且光线追踪的数学表达更是简洁明了,更符合人们认知中光线与物体作用的直觉。光栅化渲染在很多时候应对不同的材质会选择不同的trick来获得对应的效果,使得光栅化看起来各部分并没有很好地结合在一起,例如光照和阴影的实现就是拆散开的。
基于重新整理所学到的知识的想法,因此决定把 Ray Tracing in One Weeken 和 Ray Tracing: the Next Week这两本书中的内容重新再自己书写一遍,并且还希望加入以下部分的内容:
在阅读本文之前读者最好先通读 Ray Tracing in One Weeken 和 Ray Tracing: the Next Week 这两本书,因为笔者水平有限,自知无法将一些理论上的东西解释清楚,因此最好是有基础知识储备,GAMES101也有章节叙述了光线追踪的基本原理,也可去花时间一看。
Ray Tracing in One Weekend Series
因为本文中出现的工程为C++编写并且会引入多个第三方库,读者需要对cmake和c++编译以及c++语法有基本的了解,如若对c++没有任何了解,可以先从基础的语法规则开始。
虽然文中引入并且使用了OpenGL,但是相关代码并不需要读者了解,大量代码均为openGL渲染的流程性代码和setup,即使不熟悉书写也不影响对光线追踪的理解。
笔者会将此工程的代码放在Github公开仓库中,有需要的读者可以自己clone下来进行参考。