2018.09.05:
以我秋招面试经验来看,除非从事游戏相关的工作,这个项目对于找工作没什么用处,但它确实很有意思。所以如果你是为了简历上写项目时有亮点,同时你又不搞游戏,渲染器不是一个放在简历上的好项目。
原回答:
这是我正在写的路径追踪器,C++11/14实现,Linux环境(Ubuntu 16.04),写了有4个月了。很喜欢图形学,感觉特别有意思。
UncP/Giraffe,它的中文名字是长颈鹿,与Graphics有那么一点谐音。
在写光线追踪器之前写过一个很小的渲染器,很不满意自己的实现所以开始写Giraffe这个光线追踪器。渲染器!=光线追踪器,但是渲染器和光线追踪器有很多共通的地方,虽然一个面向物体,一个面向像素。渲染器里面的Z-Buffer在光线追踪器里其实是不断更新的距离。其余的坐标系变换、光照、纹理映射、相交检测是一样的。光线追踪器实现起来更加优雅但缺点是运行速度稍慢。
走了不少弯路,看了很多资料,尝试了很久,现在完成了
这个光线追踪器我会一直写下去因为图 形 学 太 好 玩 了 !
别看我列了这么多但是如果你想深入学习离线渲染的话我建议先去接触各种算法——PT,LT,BPT,MLT,PM,SPPM,Radiosity…
以下是光线追踪器的部分效果图。
下面三张是最近跑的。
这张是长颈鹿(虽然不怎么像,花纹使用了Worley Noise)
我觉得图形学代码写起来非常舒服,模块间的耦合度非常低,尤其是当把基本框架搭起来之后,每次实现新的特性完全不需要进行模块测试,直接跑就行(这只是个人感觉,仅供参考)。
推荐一些参考资料(只有英文资料):
smallpt: Global Illumination in 99 lines of C++,这是一个只有99行的光线追踪器。
Scratchapixel,这是一个图形学网站,每章都有两三百行的C++11编写可以直接编译运行的图形学代码,非常适合入门。
第一第二个比较简单,耐心点慢慢来,如果有一定基础了一定要去下面这个CMU的课程主页,真的很棒(从渲染到光线追踪再到动画模拟)!
http://15462.courses.cs.cmu.edu/fall2015/
15年CMU的15-462,别去16年的,16年质量比较低。
Computer Graphics
15年MIT的6.837。
这两个图形学课程的主页上有课程PPT,参考书,还有很多辅助代码(空间几何,图片I/O等等)。
GitHub - mmp/pbrt-v3: Source code for pbrt, the renderer described in the third edition of "Physically Based Rendering: From Theory To Implementation", by Matt Pharr, Wenzel Jakob, and Greg Humphreys.,著名的开源渲染器,是书《Physically Based Rendering》的具体实现。
《Realistic Ray Tracing》,一本讲光线追踪具体实现的书,每章后面都有代码,这本书的作者就是《Fundamentals of Computer Graphics》的作者。
《Real Time Rendering》,这本书可以作为一本百科参考书,可以在具体实现某个模块时去阅读一下相关章节。
路径追踪器的地址:Giraffe: Distributed Monte Carlo Path Tracer
另外这个路径追踪器不再更新,已升级为一个离线渲染器,地址在这:UncP/Zebra