[完结]《Ray-Tracing In #》三步曲
读《Ray-Tracing In one Weekend》《Ray-Tracing In Next Week》《Ray Tracing The Rest of Your Life》
杨石兴
这个作者很懒,什么都没留下…
展开
-
【Ray-Tracing In One Weekend】第6章 反走样
在非实时系统当中,反走样不得不依靠针对单个像素的多重采样,在本文以前的第0-5章,数据都是秒生成完的,但是自从这一章针对每个像素增加100个采样点求平均之后,debug就要一会儿才出结果。这才哪跟哪。先说本章在【Ray-Tracing In One Weekend】第5章 添加球体表面法线和多个物体之上的加的反走样的对比效果:左侧是第5章的效果,右侧是本章的效果。可以看出边缘的反走样效...原创 2019-05-18 23:06:40 · 535 阅读 · 0 评论 -
【Ray Tracing The Rest of Your Life】第1章 蒙特卡洛程序介绍
本章代码使用VS2015编写,下载链接如下:链接:https://pan.baidu.com/s/1hhSQbEOWKdru8ua9MmnDxg提取码:3f8t【介绍】拿估算pi来说,使用如下图形:圆的面积是,而正方形的面积是,两者的比率:推出拿r=1来说,随机数范围[-1, 1]则可以使用程序随机投射点,计算出4*radio就是#include <m...原创 2019-05-27 11:05:42 · 1409 阅读 · 1 评论 -
【Ray-Tracing In One Weekend】第1章,输出一个图片
Peter Shirley的大作Ray-Tracing系列是每个人都要学习一下的。我也要认真的学习入门一下。本节代码使用VS2015编写,可通过如下方式下载:链接:https://pan.baidu.com/s/1wiLh-VK1lMhpUHuqwHElSQ提取码:4qdj在第1章中仅输出了一张图片HelloWorld.ppm,效果如下:PPM格式一般的工具可能打不开...原创 2019-05-18 15:07:23 · 774 阅读 · 1 评论 -
【Ray-Tracing In One Weekend】第2章,vec3向量类
在【Ray-Tracing In One Weekend】第1章,输出一个图片的基础上,我们书写一个vec3向量类,vec3的设计尽可能简单,且表示位置的向量与表示颜色的RGB都使用这个类。该类以最小满足需要为原则,不做任何过度设计。除了正常的规范化、加减乘除操作外,还实现了dot与cross操作。二者的几何意义可以参考如下文章:【数学】向量的四则运算、点积、叉积、正交基本节代码实现的效果...原创 2019-05-18 16:43:26 · 779 阅读 · 0 评论 -
【Ray-Tracing In One Weekend】第3章,光线、相机、背景
本章实现了光线和根据光线碰撞出的颜色,初步对光线、相机有基础介绍,其效果如下:代码使用VS2015编写,可从如下地址下载:链接:https://pan.baidu.com/s/1YOHGuL6iG18AB634neM70Q提取码:4rge【光线】其中光线的定义是由起点和方向定义:起点是A,方向是构成,其中参数 t 代表在方向b上走t个长度得到一个顶点,在代码中...原创 2019-05-18 17:33:56 · 779 阅读 · 1 评论 -
【Ray Tracing The Rest of Your Life】第2章 使用蒙特卡洛计算一重积分与球面积分
这一章代码简单,但是理解起来颇有难度,又很重要,望仔细阅读。代码使用VS2015编写。链接:https://pan.baidu.com/s/1hmTUkAiXFd8Q0Lqy4Zt8bg提取码:jgg8第一步:理解pdf积分经常被用来计算面积或者体积,在图形学中应用颇广。之前我们渲染的图形都有噪点(比如【Ray-Tracing In Next Week】第6章 矩形和灯光...原创 2019-05-30 16:55:28 · 1862 阅读 · 4 评论 -
【Ray-Tracing In One Weekend】第4章 添加一个球
本章会在上一章【Ray-Tracing In One Weekend】第3章,光线、相机、背景的基础上,添加一个球体。也即要求光线是否与球相交,若与球相交则置红色。效果如下:使用VS2015编写的代码如下:链接:https://pan.baidu.com/s/1Y8_N4oZCFxmnhXl54NyY8Q提取码:msca【光线与球相交】光线与球相交有很多方法,在本章不...原创 2019-05-18 19:51:06 · 751 阅读 · 5 评论 -
【Ray-Tracing In One Weekend】第5章 添加球体表面法线和多个物体
本节为上一节的球添加表面法线以及添加多个球,实现效果如下:代码使用VS2015编写,可从如下链接下载链接:https://pan.baidu.com/s/1tkfqnUZlM3dhLgXKEKjn5w提取码:d2i9【法线的求解】首先在【Ray-Tracing In One Weekend】第4章 添加一个球的基础上我们可以求出球与线的交点P,只要P与球心C一连线就是法线,...原创 2019-05-18 21:46:00 · 831 阅读 · 0 评论 -
【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 ...原创 2019-06-01 14:00:56 · 998 阅读 · 1 评论 -
【Ray Tracing The Rest of Your Life】第4章 重要性采样
本节代码使用VS2015编写,通过如下链接下载:链接:https://pan.baidu.com/s/1IvsDuv4VfMa8lujtLVt82A提取码:da2t本节利用上一节的理论【Ray Tracing The Rest of Your Life】第3章 光线散射理论,然后对其中的s(direction)和p(direction)进行变化。以为了后面寻找更合适的pdf以让更...原创 2019-06-01 14:23:52 · 1037 阅读 · 3 评论 -
【Ray Tracing The Rest of Your Life】第5章 生成随机向量
本章代码使用VS2015编写,可以从如下链接下载:链接:https://pan.baidu.com/s/14wBWD7Y0alJaIBwRToV5mg提取码:9qkb本章我们会对123章的内容进行进一步理解,本章的综指是:使用随机数生成想要的值,在本章是使用随机数生成符合密度分布pdf的随机向量。就是即想让向量是随机的,还想要它符合一定的规律。在第2章其实也是根据随机数达到自己的...原创 2019-06-01 23:24:04 · 960 阅读 · 6 评论 -
【Ray Tracing The Rest of Your Life】第6章 正交基
本章代码使用VS2015编写:链接:https://pan.baidu.com/s/1IX_1trXOCZzbDACJqomePw提取码:tq7t在【Ray Tracing The Rest of Your Life】第5章 生成随机向量完成了按我们给定的pdf,在沿z轴正方向为法线方向的情况下,生成了按给定pdf的随机向量。本节实现将以任意表面点的法线为主方向来生成。这就涉及到...原创 2019-06-03 12:19:57 · 685 阅读 · 0 评论 -
【Ray Tracing The Rest of Your Life】第7章 向光源采样
本章代码使用VS2015编写:链接:https://pan.baidu.com/s/1XvcT835tDhXaRFQdSQpyLA提取码:vdsj渲染效果:为了减少噪点,需要反射光线直接射入灯光。这个操作按说是很简单的,直接将交点与灯光所在的位置的向量相减做为反射向量即可。但是灯光是一片区域,区域面积为A,则要模拟随机的效果,则对于单位面积其入射到A的光线的而无论是出射还是...原创 2019-06-03 15:12:46 · 1109 阅读 · 5 评论 -
【Ray Tracing The Rest of Your Life】第8章 混合密度
代码使用VS2015编写,下载链接如下:链接:https://pan.baidu.com/s/1QfurvQqSJt-FzZBTgUBiKw提取码:yi06效果如下:看上去已经像个样了,这张图是使用朝向光源pdf和按法线pdf两者各0.5的混合效果。本节章代码没有理论创新,封装了一个基类pdf,如下:class pdf{public: virtual floa...原创 2019-06-03 20:52:18 · 674 阅读 · 0 评论 -
【Ray-Tracing In Next Week】第9章 全书实例一张图
最后一节把全书所学的知识汇聚成了一张图:代码使用VS2015编写,可通过如下下载:链接:https://pan.baidu.com/s/1jF8utD0fw8Ozj5LFa7Yfaw提取码:lmho原创 2019-05-27 09:18:29 · 570 阅读 · 0 评论 -
【Ray-Tracing In Next Week】第8章 体渲染(Volume)
本节讨论体数据,下面是渲染效果:代码使用VS2015编写,从如下链接下载:链接:https://pan.baidu.com/s/1S8lrcyLnhl8nNKZB9svXMg提取码:5ayj【具体实现】首先要讲关于体数据的一些基本概念,一个体数据比如雾、烟、云,光可以射入其中,在其中可以散射等。体渲染是个大课题,本节我们实现最基本的体渲染。首先要明确:1、光线射入到体当...原创 2019-05-26 23:24:55 · 1174 阅读 · 0 评论 -
【Ray-Tracing In One Weekend】第7章 漫反射
本章就有些非常重要的概念需要在理念上进行理解,首先任何物体的表面都非完全光滑平坦的,有个粗糙度,比如完全光滑的玻璃球会反射光斑,而粗糙的水泥球就不会。我们认为每个表面细化到一定的程度都几乎是随机的,而随机之中又要有统计的势。这就是基于物理渲染的微表面理论。本节我们初步来实现一个反射方向随机的微表面。效果如下:代码如下:链接:https://pan.baidu.com/s/1y4y5...原创 2019-05-19 06:52:59 · 600 阅读 · 2 评论 -
【Ray-Tracing In One Weekend】第8章 金属材质
本节对材质进行抽象并且定义了两个材质,一个是lambertian材质,另一个是metal材质。本节材质之间的不同在于材质的颜色和材质表面微元的反射光线生成。假若按照入射光线严格的生成完美反射光线,那么就是理想的反射,在现实的生活中不存在理想的反射,入射光线与出射光线分别位于法线的两侧,但是夹角并不相等。对于金属材质来说我们对这个反射光线加了一个随机挠动fuzz。下面来对比几种效果:左图是分...原创 2019-05-19 09:10:23 · 683 阅读 · 0 评论 -
【Ray-Tracing In One Weekend】第9章 电解质,反射与折射
本章新建一个材质叫做电解质,包括水、玻璃等都属于电解质,它们都有反射和折射特性。实现的效果如下: 左图是只考虑折射不考虑反射,则在全反射时,会呈黑色。其次是折射光线的函数书中时而用v时而用uv,应该都用uv,修改之后就是中间这个图,最后一个图发现左侧的倒置的情况变成了正的,是因为最后一张图套了两个球,大球套小球且小球的法线是朝球心。代码使用VS2015编写,可通过如下链接下...原创 2019-05-19 14:17:44 · 761 阅读 · 0 评论 -
【Ray-Tracing In One Weekend】第10章 定义相机
【简介与代码下载】本节在上一节的基础上定义了相机,可以定义视点、朝向等。效果如下:代码下载:链接:https://pan.baidu.com/s/1kh7HxWxuxhuti-Xo5OZPfQ提取码:ak4x【相机实现】对于相机来说,有几个变量来确定,一个是相机的位置lookfrom,也叫eye,一个是相机朝哪里看是lookat,也叫center,一个是像机向上的...原创 2019-05-20 16:17:30 · 538 阅读 · 1 评论 -
【Ray-Tracing In Next Week】第2章 BVH加速结构
由于后面的程序越来越复杂,为了使测试得以正常的执行我们本节实施一个加速结构。相比上一章【Ray-Tracing In Next Week】第1章 运动模糊(Motion Blur)笔者的电脑渲染使用了4分钟3秒:而本章代码渲染只用了一分钟:本章代码使用VS2015编写,从如下下载:链接:https://pan.baidu.com/s/1_0Yvz8D-j1AP-6jiIym...原创 2019-05-24 12:58:30 · 2061 阅读 · 0 评论 -
【Ray-Tracing In Next Week】第3章 纹理
【简介与代码下载】本节实现纹理的基本思想,建立了两个纹理,一个是根据纹理坐标[u, v]永远返回某个单一颜色的纹理constant_texture,另一个是构建了一个网格纹理checker_texture。图示如下:代码:链接:https://pan.baidu.com/s/16VFGblya0Bp0rewU93nTOQ提取码:0tyc【具体实现】这一章的具体实现非常...原创 2019-05-24 13:44:07 · 467 阅读 · 0 评论 -
【Ray-Tracing In One Weekend】第11章 景深
【简介与代码】本文将实现景深的效果,也即给相机定义一个焦距,在这个焦距范围外的就模糊,在这个焦距处就清晰。效果如下:代码使用VS2015编译从如下下载:链接:https://pan.baidu.com/s/1807dLqlfisxJO3Q9mNNdBQ提取码:xwbw【实现原理】首先一改之前的由eye发出射线精准求交的方式:这样求出来的光线非常准确。那...原创 2019-05-20 22:55:07 · 853 阅读 · 1 评论 -
【Ray-Tracing In Next Week】第4章 柏林噪声
关于噪声是个高级话题,目前各领域都有自己模拟的噪声函数,云雾雨雪都有,要自己发明创造是很困难的,要不断找不断试,把效果交给骰子。下面来介绍本节的柏林噪声一步步实现效果,就知道数学和最终效果之间的想象力在噪声领域是匮乏的。使用VS2015编写的循徐渐进的代码:链接:https://pan.baidu.com/s/1SFleaSo_YaqeuTnW4QEllg提取码:y698【噪声定义...原创 2019-05-24 19:53:30 · 647 阅读 · 0 评论 -
【Ray-Tracing In Next Week】第5章 图片纹理映射
本节我们将使用图片做为一张纹理。渲染结果如下图:代码使用VS2015编写如下链接下载:链接:https://pan.baidu.com/s/1MinjETVM86NV3MXrkGSqJA提取码:lnrm【具体实现】第一步:使用球的顶点来求球面的纹理坐标。此时我们使用球坐标:纹理坐标的u值我们与相关,的范围是从,将其映射到u值的[0 , 1]之间即可,也即:u ...原创 2019-05-24 21:45:33 · 637 阅读 · 0 评论 -
【Ray-Tracing In One Weekend】第12章 封面图片渲染
在第1~11章的学习完毕之后,小经编写代码便可以形成以下【渲染结果】【代码下载】-使用VS2015编译链接:https://pan.baidu.com/s/1iZwhGSO9U5KmdyyfwR478w提取码:0cu0【实现】代码使用了随机数生成了500个球,渲染也耗费了大约10分钟。hitable *random_scene(){ int n = 5...原创 2019-05-22 09:45:26 · 515 阅读 · 0 评论 -
【Ray-Tracing In Next Week】第6章 矩形和灯光
在以前所有的章节,我们都是靠背景来支撑各种变换,也即当光线与场景无交时,取了一个颜色。按说应该取全黑。当取全黑时,场景中没有自发光的物体,那么场景就是全黑的。本章将定义一个发光体。建立一个BOX,里面放一个灯光。之所以看到有噪声是因为微平面的随机光线会射到外面无交,置全黑。本节代码使用VS2015编写,下载链接如下:链接:https://pan.baidu.com/s/14FdUn...原创 2019-05-25 19:52:11 · 911 阅读 · 0 评论 -
【Ray-Tracing In Next Week】第7章 添加实例(instance)
本节会在场景中添加两个盒子,并实现盒子的移动和旋转。代码使用VS2015编写,可从如下链接下载:链接:https://pan.baidu.com/s/1Fi_pICX1zJyYHiknoznHvw提取码:kxa9【实现】由于有上一章添加面的基础,因此box类很容易实现,添加六个面一组合就可以了:class box : public hitable{public:...原创 2019-05-26 08:34:16 · 632 阅读 · 1 评论 -
【Ray-Tracing In Next Week】第1章 运动模糊(Motion Blur)
【简介与代码】本章在上一章的基础上实现了运动模糊的功能:本章代码使用VS2015编写,下载地址:链接:https://pan.baidu.com/s/1sv_ie8DODAi-WG57q4SyxQ提取码:v2v3【具体实现】这里面首先有个运动物体,定义一个时间范围(t0, t1)代表球从t0时间时开始,运动到t1时刻,再定义球在t0时的位置center0,在t1时的位置...原创 2019-05-22 15:19:20 · 781 阅读 · 0 评论 -
【Ray Tracing The Rest of Your Life】第9章 一些架构上的讨论
本章原书中也并不包含代码。做如下翻译性质的惮述。写至此我们面临一些架构方面的决择,首先混合密度方式和传输的发射阴影光线的方式不同,我个人偏向于混合密度的方式,因为你可以在任何比如窗户缝或砖缝等任何你觉得应该明亮的地方渲染明亮。但是混合密度会依照反射定律发送更多的朝向灯光的光线,这会占用一些时间,会是你选择阴影光线方法的原因。这是个个人喜好决定。一些其它话题。pdf的构建是在color函...原创 2019-06-03 21:21:47 · 525 阅读 · 0 评论