光线追踪/路径追踪中的着色材质是否满足结合律与交换律?
光线追踪中类G-buffer延迟着色的可行性疑问
我正在学习《Ray Tracing: The Next Week》教程并实现光线追踪器,注意到作者直接将每次相交的材质衰减值相乘,核心代码如下:
ray scattered; color attenuation; color color_from_emission = rec.mat->emitted(rec.u, rec.v, rec.p); if (!rec.mat->scatter(r, rec, attenuation, scattered)) return color_from_emission; color color_from_scatter = attenuation * ray_color(scattered, depth-1, world); return color_from_emission + color_from_scatter;
尽管最终着色结果返回color_from_emission + color_from_scatter,但只有diffuse_light材质拥有非平凡的emitted()方法,其实可以轻松整合到scatter()中。
我产生了一个疑问:是否可以像光栅化中的G-buffer一样,先将材质指针、UV坐标、命中角度等信息存入缓冲区暂不着色,待所有射线完成相交后再处理缓冲区计算采样点颜色?
这一技术的可行性依赖材质的结合律和/或交换律,我想知道实际光线追踪器中使用的材质是否具备这些性质。我尝试用"ray tracing material commutative"等关键词搜索无果,推测非线性材质不具备结合律与交换律,但不清楚这类材质是否常见。
内容的提问来源于stack exchange,提问作者Aperture Initiative
相关产品推荐
相关产品推荐

