目录
作业要求
在之前的练习中,我们实现了 Whitted-Style Ray Tracing 算法,并且用 BVH 等加速结构对于求交过程进行了加速。在本次实验中,我们将在上一次实验的基础上实现完整的 Path Tracing 算法。至此,我们已经来到了光线追踪版块的最后一节内容。你需要从上一次编程练习中直接拷贝以下函数到对应位置:• Triangle::getIntersection in Triangle.hpp: 将你的光线 -三角形相交函数粘贴到此处,请直接将上次实验中实现的内容粘贴在此。• IntersectP(const Ray& ray, const Vector3f& invDir, const std::array<int, 3>& dirIsNeg) in the Bounds3.hpp: 这个函数的2 作用是判断包围盒 BoundingBox 与光线是否相交,请直接将上次实验中实现的内容粘贴在此处,并且注意检查 t_enter = t_exit 的时候的判断是否正确。• getIntersection(BVHBuildNode* node, const Ray ray)in BVH.cpp: BVH 查找过程,请直接将上次实验中实现的内容粘贴在此处 .
在本次实验中,你只需要修改这一个函数:• castRay(const Ray ray, int depth) in Scene.cpp: 在其中实现 Path Tracing 算法可能用到的函数有:• intersect(const Ray ray) in Scene.cpp: 求一条光线与场景的交点• sampleLight(Intersection pos, float pdf) in Scene.cpp: 在场景的所有光源上按面积 uniform 地 sample 一个点,并计算该 sample 的概率密度• sample(const Vector3f wi, const Vector3f N) in Material.cpp: 按照该材质的性质,给定入射方向与法向量,用某种分布采样一个出射方向• pdf(const Vector3f wi, const Vector3f wo, const Vector3f N) in Material.cpp: 给定一对入射、出射方向与法向量,计算 sample 方法得到该出射方向的概率密度• eval(const Vector3f wi, const Vector3f wo, const Vector3f N) in Material.cpp: 给定一对入射、出射方向与法向量,计算这种情况下的 f_r 值可能用到的变量有:• RussianRoulette in Scene.cpp: P_RR, Russian Roulette 的概率
任务分析
本次的任务即完整的实现整个path-tracing,但其实由于前面作业的铺垫,再本次作业中只需要实现castRay,即课上所讲的shade(p,w0),如下图课件所示。

本文档详细介绍了如何在光线追踪项目中实现PathTracing算法,包括从上一实验中拷贝必要的函数、修改castRay函数以实现PathTracing,以及处理光源直射和间接光照的细节。此外,还探讨了多线程加速渲染的方法,通过C++11的std::thread实现,并分享了如何处理线程同步问题。最后,介绍了Microfacet模型的引入及其在渲染效果上的改进。
最低0.47元/天 解锁文章
1346





