首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pbrt-v3中的全内反射实现

pbrt-v3中的全内反射实现
EN

Computer Graphics用户
提问于 2018-11-19 22:37:18
回答 1查看 195关注 0票数 0

我一直在实现路径跟踪器,参考pbrt-v3。但是,我对它的实现有点困惑。代码是这里

当我们采样进行传输时,它似乎测试它是否满足了一个完整的内部反射,但是它没有为pdf分配一个适当的值,而是在函数返回Vec3f(0,0,0)作为BTDF值之后,然后测试pdf是否为0,如果0然后直接跳出跟踪循环。

我不认为这是有意义的,因为如果这条射线继续从镜面物体中追踪,并撞上一个被照亮的表面,那么就应该有辐射值。但是这个实现似乎忽略了所有这样的亮度,并且依赖于sample_f函数来采样一个反射。

那么,如何正确计算全内反射的pdf呢?

代码语言:javascript
复制
        // Account for the indirect subsurface scattering component
        Spectrum f = pi.bsdf->Sample_f(pi.wo, &wi, sampler.Get2D(), &pdf,
                                       BSDF_ALL, &flags);
        if (f.IsBlack() || pdf == 0) break;
EN

回答 1

Computer Graphics用户

发布于 2018-12-02 04:36:05

代码看起来确实有点难看,因为它没有分配pdf,而是返回0。

通过返回0,它基本上是表示与pdf =0相同的内容,因为f.IsBlack()返回true。

这是可以接受的,基本上是说BSDF不允许光通过给定的w_o

票数 1
EN
页面原文内容由Computer Graphics提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://computergraphics.stackexchange.com/questions/8296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档