本次作业其实就是在 whitted-style 的 ray tracing 上进行改进,实现更常见的 path tracing,原理部分闫老师的课程和作业文档中已经讲地十分清楚,不再赘述(如有一些细节上的疑惑,可以参考官网的论坛作业7发布公告 – 计算机图形学与混合现实在线平台 (games-cn.org) 或者这篇文章Games 101 | 作业7 + 路径追踪 Path Tracing + 多线程 - 知乎 (zhihu.com)),这里主要分享几个可以优化的点。
优化一:多线程加速
对于屏幕上的每个像素,因为不考虑光线之间的碰撞,从每个像素发出的追踪光线其实是相互独立的,故而可以给每个像素使用一个线程用于光线追踪。
在实际中,由于硬件限制,可以考虑在一个线程中绘制多行像素,达到多线程加速的目的。
具体做法是,使用一个绘制函数,新开线程给函数传参,告诉它要绘制那几行像素,使用隐函数会比较方便,参考代码如下:
int num_threads = 64;
std::thread th[num_threads];
int thread_height = scene.height/num_threads;
auto renderRows = [&](uint32_t start_height, uint32_t end_height) {
for (uint32_t j = start_height; j < end_height; ++j) {
for (uin
Whitted到PathTracing优化:多线程、随机SSAA与性能提升

最低0.47元/天 解锁文章
973

被折叠的 条评论
为什么被折叠?



