【Ray Tracing The Rest of Your Life】第3章 光线散射理论
本章不涉及代码的编写,是一个非常重要的理论章节。首先我们来看以前的采样代码,我们要总结出来一个看起来高大上的公式,拿【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章 光线散射理论相关推荐
- GAMES101复习:光线追踪(Ray Tracing)
目录 0. 阴影:Shadow Mapping(从光栅化角度实现) ⭐1.光线追踪:光路(线)的可逆性.光的折射.着色贡献度 1.0 Why Ray Tracing?光栅化的局限性 1.1 Recur ...
- GAMES101课程学习笔记—Lec 14(2)~16:Ray Tracing(2) BRDF、渲染方程、全局光照、路径追踪
GAMES101课程学习笔记-Lec 14(2)~16:Ray Tracing(2) BRDF.渲染方程.全局光照.路径追踪 0 引入--辐射度量学概述 1 相关概念 1.1 Radiant Ener ...
- Ray Tracing,Ray Casting,Path Tracing,Ray Marching 的区别?
作者:洛城 链接:https://www.zhihu.com/question/29863225/answer/70728387 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
- 《Ray Tracing in One Weekend》、《Ray Tracing from the Ground Up》读后感以及光线追踪学习推荐...
<Ray Tracing in One Weekend> 优点: 相对简单易懂 渲染效果相当好 代码简短,只看书上的代码就可以写出完整的程序,而且Github上的代码是将基类与之类写在一起 ...
- 【Ray Tracing The Next Week 超详解】 光线追踪2-6 Cornell box
Chapter 6:Rectangles and Lights 今天,我们来学习长方形区域光照 先看效果 light 首先我们需要设计一个发光的材质 /// light.hpp// -------- ...
- 【RAY TRACING THE REST OF YOUR LIFE 超详解】 光线追踪 3-5 random direction ONB
Preface 往后看了几章,对这本书有了新的理解 上一篇,我们第一次尝试把MC积分运用到了Lambertian材质中,当然,第一次尝试是失败的,作者发现它的渲染效果和现实有些出入,所以结尾处声明要 ...
- 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 ...
- Codeforces 724 C. Ray Tracing
Codeforces 724 C. Ray Tracing 题目来源 codeforces 题意: 有一些传感器按输入坐标分布在图上,有一道光从(0,0)沿45°角出射,遇到边按反射法则反射,遇到角落 ...
- 【Ray Tracing The Next Week 超详解】 光线追踪2-4 Perlin noise
Preface 为了得到更好的纹理,很多人采用各种形式的柏林噪声(该命名来自于发明人 Ken Perlin) 柏林噪声是一种比较模糊的白噪声的东西:(引用书中一张图) 柏林噪声是用来生成一些看似杂乱 ...
最新文章
- html br/引起的”血案“
- “allegro中焊盘的设置”收藏
- 微信小程序-控制文本只显示若干行多余隐藏
- React性能优化之Context
- VC++获取屏幕大小第三篇 物理大小GetDeviceCaps 下
- ABB机器人套接口通信 机器人部分
- 零美术基础逆袭成为动画师!你需要怎么做?
- 腾讯官方程序被报毒拦截?马化腾致歉
- 第13章 集成学习和随机森林 学习笔记中 oob
- Imc手机连环画PC阅读器
- Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!
- 计算机应用基础员工工资表,利用VBA编写Excel中的工资条与工资查询窗口
- 仙剑奇侠传脚本制作教程
- 孔子做人精要,看完启发很多
- 优质办公体验,掌上OA一机hold住全场
- 重装系统(win10企业版)
- 在kotlin中启动activity发生java.lang.RuntimeException: Unable to instantiate activity ComponentInfo for Kot
- 大数据的中的数据是从哪里来的?
- UVA - 10118 Free Candies
- 宏病毒组系列4|宏病毒组富集技术详解
热门文章
- 这样写也行,把hoppy放在ref这里,name放在state这里,只是相应的位置要改动,段落那里排好就行
- 机器人genghis_iRobot:机器人思维引领下一个机器人时代
- filza修改版本号_苹果iOS12修改微信提示音Filza无法下载安装怎么办?
- 如何在Eclipse中添加Tomcat的jar包
- Android系统源码目录及功能介绍
- 5V变3.3V好用的电源芯片
- 游戏Flappy Bird走红启示:没人知道玩家想要什么
- 大数据架构师从入门到精通 学习必看宝典
- Sketch:无损放大像素画
- 2021.10.19股票小计