首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >路径跟踪:如何处理光线击中发射器

路径跟踪:如何处理光线击中发射器
EN

Computer Graphics用户
提问于 2023-02-06 07:57:25
回答 1查看 77关注 0票数 1

我正在写我的第一条路,追踪和某种感觉混乱的一些机制。例如,当我跟踪一条射线,光线击中一个区域发射器,那么如何确定这个直接击中的亮度?我知道,在绘制等式时,我们有:

L_o(w_o, x) = L_e(w_o, x) + \int f_r(w_i, w_o, x)\cos \theta dw_i

在这里,我应该确定L_e(w_o, x)是什么。我的问题是,对于L_e(w_o, x),它是否应该包含距离衰减(例如,对于区域光,pow(距离,2))和\cos项?因为我注意到,如果我在计算以下代码时缩小了emission_part

代码语言:javascript
复制
color = (direct_part + emission_part) * throughput

渲染实际上更快地收敛了several时间(虽然我认为它会导致有偏差的结果),而且发射器周围的混叠效应也较小。此外,我还试图了解其他渲染器是如何处理这种情况的(比如mitsuba2、path.cpp):

代码语言:javascript
复制
result[active] += emission_weight * throughput * emitter->eval(si, active);

我看不出上面的emitter->eval(si, active)如何利用si (表面相互作用顶点),像计算采样强度的距离衰减一样,mitsuba2只是使用Texture::eval(...)来计算发射辐射。因此,我认为这就是为什么它的渲染结果在任何地方都没有锯齿混叠,而是放置在发射器周围(见下图:康奈尔盒场景和区域发射器):

那么,我是否应该使用下面的公式,就像评价直接光照一样

代码语言:javascript
复制
ret_int = emitter.intensity * distance_attenuate(ray_length) * cosine_term

或者简单地返回它原来的强度:

代码语言:javascript
复制
ret_int = emitter.intensity

当处理射线击中发射器的时候?

EN

回答 1

Computer Graphics用户

回答已采纳

发布于 2023-02-18 05:58:03

我猜我在这里有个误会。正如@ L_e说的,因为术语和距离衰减并不来自于the,但直到最近几天我注意到积分the度量时,我才完全理解为什么,以及在L_e评估过程中我到底在评估什么。

PBR-书: 14.4.3 LTE的表面形式中,我理解了dAdw的区别,以及几何项在将一种度量转化为另一种度量时是如何发挥重要作用的。由于L_e计算与积分无关(射线直接与发射器相交),L_e求值函数直接返回<#>辐射,这与射线的方向有关,不需要测量转换。此外,由于没有参与的媒介,所以从一个点到另一个点的光辉应该始终保持不变。

我想主要的误解是,我认为排放评价是一种启发,通过采样面积发射器问题,这是不一样的。

猜测打下坚实的基础确实有很大帮助。

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

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

复制
相关文章

相似问题

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