Games101:作业7(含提高部分)

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

目录 

作业要求

任务分析

提高部分1:多线程

提高部分2:Microfacet

参考链接


作业要求

        在之前的练习中,我们实现了 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),如下图课件所示。

评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值