【Ray Tracing The Next Week 超详解】 光线追踪2-8 Volume

Chapter 8:Volumes

我们需要为我们的光线追踪器添加新的物体——烟、雾,也称为participating media。 我们还需要补充一个材质——次表面散射材质,它有点像物体内的浓雾。

体渲染通常的做法是,在体的内部有很多随机表面,来实现散射的效果。比如一束烟可以表示为,在这束烟的内部任意位置,都可以存在一个面,以此来实现烟、雾

 

对于一个恒定密度体,一条光线通过其中的时候,在烟雾体中传播的时候也会发生散射,光线在烟雾体中能传播多远,也是由烟雾体的密度决定的,密度越高,光线穿透性越差,光线传播的距离也越短。从而实现烟雾的透光性。

引用书中一张图(光线可穿透可散射)

【Ray Tracing The Next Week 超详解】 光线追踪2-8 Volume

当光线通过体积时,它可能在任何点散射。 光线在任何小距离dL中散射的概率为:

概率= C * dL,其中C与体积的光密度成比例。

对于恒定体积,我们只需要密度C和边界。 

 

/// isotropic.hpp // ----------------------------------------------------- // [author] lv // [begin ] 2019.1 // [brief ] the isotropic-class for the ray-tracing project // from the 《ray tracing the next week》 // ----------------------------------------------------- #pragma once namespace rt { class isotropic :public material { public: isotropic(texture* tex) :_albedo(tex) { } virtual bool scatter(const ray& InRay, const hitInfo& info, rtvec& attenuation, ray& scattered)const override { scattered = ray(info._p, lvgm::random_unit_sphere()); attenuation = _albedo->value(info._u, info._v, info._p); return true; } private: texture * _albedo; }; } // rt namespace

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppfpx.html