本章不涉及代码的编写,是一个非常重要的理论章节。首先我们来看以前的采样代码,我们要总结出来一个看起来高大上的公式,拿【Ray-Tracing In Next Week】第7章 添加实例(instance)这一章来说。其某个像素的颜色值是这样得到的:

vec3 color(const ray& r, hitable* world, int depth)
{hit_record rec;if (world->hit(r, 0.001f, FLT_MAX, rec)){ray scattered;vec3 attenuation;vec3 emitted = rec.mat_ptr->emitted(rec.u, rec.v, rec.p);if (depth < 50 && rec.mat_ptr->scatter(r, rec, attenuation, scattered)){//有反射则将当前发光体发出的光和散射的颜色预以叠加return emitted + attenuation*color(scattered, world, depth + 1);}elsereturn emitted; //无反射则直接取发光射出的颜色}return vec3(0.0f, 0.0f, 0.0f);
}

这个color是每个像素执行了100次(main函数里的int ns = 100;),而每一次执行又是一个递归的过程来计算反射光线,最多计算反射到50层(depth<50)

那么使用公式我们如何来总结这个过程呢,我们首先来看,当光线发生碰撞时,假如是发光体,我们有emitted,也即发出的光的RGB值。其次我们看碰撞到的物体的材质发生的散射,首先这个材质自身有颜色attenumation,然后其又有反射光线scattered,再拿当前的发光emitted+attenuation*(散射的光线新交的颜色值)。这就是整个过程。我们用公式来总结:

如何理解color(direction)呢,就是颜色值与散射光线的方向有关。

那么上面的公式其实是简化的,我们来要说明这个简化的过程,才能进行下一章节。这个公式里省略了重要的一项:

这个s(direction)如何理解呢,就是发生散射方向direction的分布情况,也就是它应该往哪个方向上分布的更多,哪个方向上分布的更少。我们对s(direction)这个微元做积分就相当于在任意的direction上均考虑了得到了最终的color。

根据MC的理论,s做为一个pdf,对其积分则相当于:

而p(direction)是每个光线它的权重。然后p(direction)是余弦相关的,也即光线的入射方向与法线的夹角记为,那么若其大于90度则光线可以忽略。当一整光照射一个点时,它的反射光线不可能与法线的夹角>90度。所以p(direction)是余弦相关的,cos(90)=0,而cos(0)=1代表这个光线价值最大。而一整光线照射一个点,可以把其散射方向看成在半球之内,所以整个散射的所有可能性是针对余弦的半球积分:关于球面积分参考【数学】立体角,积分求球的表面积、体积。

那么p(direction)=,这是不考虑其它任何情况,理想情况下的散射光的每条光线的权重。

而s(direction)做为光线的分布情况,也可以和余弦相关,亦可以=,也即我们让向法线方向上的光更多。

那么这样p()和s()就相互约去了。这样:

那么在后面的章节,我们不打算约去了,也即p()和s()我们要采用不同的公式。因为本身它们就代表着不同的含义。

【Ray Tracing The Rest of Your Life】第3章 光线散射理论相关推荐

  1. GAMES101复习:光线追踪(Ray Tracing)

    目录 0. 阴影:Shadow Mapping(从光栅化角度实现) ⭐1.光线追踪:光路(线)的可逆性.光的折射.着色贡献度 1.0 Why Ray Tracing?光栅化的局限性 1.1 Recur ...

  2. GAMES101课程学习笔记—Lec 14(2)~16:Ray Tracing(2) BRDF、渲染方程、全局光照、路径追踪

    GAMES101课程学习笔记-Lec 14(2)~16:Ray Tracing(2) BRDF.渲染方程.全局光照.路径追踪 0 引入--辐射度量学概述 1 相关概念 1.1 Radiant Ener ...

  3. Ray Tracing,Ray Casting,Path Tracing,Ray Marching 的区别?

    作者:洛城 链接:https://www.zhihu.com/question/29863225/answer/70728387 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  4. 《Ray Tracing in One Weekend》、《Ray Tracing from the Ground Up》读后感以及光线追踪学习推荐...

    <Ray Tracing in One Weekend> 优点: 相对简单易懂 渲染效果相当好 代码简短,只看书上的代码就可以写出完整的程序,而且Github上的代码是将基类与之类写在一起 ...

  5. 【Ray Tracing The Next Week 超详解】 光线追踪2-6 Cornell box

    Chapter 6:Rectangles and Lights 今天,我们来学习长方形区域光照  先看效果 light 首先我们需要设计一个发光的材质 /// light.hpp// -------- ...

  6. 【RAY TRACING THE REST OF YOUR LIFE 超详解】 光线追踪 3-5 random direction ONB

     Preface 往后看了几章,对这本书有了新的理解 上一篇,我们第一次尝试把MC积分运用到了Lambertian材质中,当然,第一次尝试是失败的,作者发现它的渲染效果和现实有些出入,所以结尾处声明要 ...

  7. A Hands-on Look at Using Ray Tracing in Games with UE 4.22 GDC 2019

    A Hands-on Look at Using Ray Tracing in Games with UE 4.22 GDC 2019 talker: Sjoerd De Jong (SR.ENGIN ...

  8. Codeforces 724 C. Ray Tracing

    Codeforces 724 C. Ray Tracing 题目来源 codeforces 题意: 有一些传感器按输入坐标分布在图上,有一道光从(0,0)沿45°角出射,遇到边按反射法则反射,遇到角落 ...

  9. 【Ray Tracing The Next Week 超详解】 光线追踪2-4 Perlin noise

     Preface 为了得到更好的纹理,很多人采用各种形式的柏林噪声(该命名来自于发明人 Ken Perlin) 柏林噪声是一种比较模糊的白噪声的东西:(引用书中一张图) 柏林噪声是用来生成一些看似杂乱 ...

最新文章

  1. html br/引起的”血案“
  2. “allegro中焊盘的设置”收藏
  3. 微信小程序-控制文本只显示若干行多余隐藏
  4. React性能优化之Context
  5. VC++获取屏幕大小第三篇 物理大小GetDeviceCaps 下
  6. ABB机器人套接口通信 机器人部分
  7. 零美术基础逆袭成为动画师!你需要怎么做?
  8. 腾讯官方程序被报毒拦截?马化腾致歉
  9. 第13章 集成学习和随机森林 学习笔记中 oob
  10. Imc手机连环画PC阅读器
  11. Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!
  12. 计算机应用基础员工工资表,利用VBA编写Excel中的工资条与工资查询窗口
  13. 仙剑奇侠传脚本制作教程
  14. 孔子做人精要,看完启发很多
  15. 优质办公体验,掌上OA一机hold住全场
  16. 重装系统(win10企业版)
  17. 在kotlin中启动activity发生java.lang.RuntimeException: Unable to instantiate activity ComponentInfo for Kot
  18. 大数据的中的数据是从哪里来的?
  19. UVA - 10118 Free Candies
  20. 宏病毒组系列4|宏病毒组富集技术详解

热门文章

  1. 这样写也行,把hoppy放在ref这里,name放在state这里,只是相应的位置要改动,段落那里排好就行
  2. 机器人genghis_iRobot:机器人思维引领下一个机器人时代
  3. filza修改版本号_苹果iOS12修改微信提示音Filza无法下载安装怎么办?
  4. 如何在Eclipse中添加Tomcat的jar包
  5. Android系统源码目录及功能介绍
  6. 5V变3.3V好用的电源芯片
  7. 游戏Flappy Bird走红启示:没人知道玩家想要什么
  8. 大数据架构师从入门到精通 学习必看宝典
  9. Sketch:无损放大像素画
  10. 2021.10.19股票小计