Instances
我们的康奈尔盒现在还有些空荡,所以让我们在房间中再添加两个方块。首先,我们需要通过6个quad来组成一个方块,我们可以创建一个函数,用于返回一个box class quad final: public hittable {...}; inline shared_ptr<hittableList> box(const point3& a, const point3&am...
我们的康奈尔盒现在还有些空荡,所以让我们在房间中再添加两个方块。首先,我们需要通过6个quad来组成一个方块,我们可以创建一个函数,用于返回一个box class quad final: public hittable {...}; inline shared_ptr<hittableList> box(const point3& a, const point3&am...
光照是光线追踪的关键组件,早期的光线追踪器主要是用抽象的光源,比如空间中的一个点或方向。而现代光线追踪器更多地使用基于物理的光照,这些光源不仅有位置,还有大小。 7.1 首先我们来创建一个没有反射的自发光材质,并添加一个对应的emitted()函数,用于告诉光线这个材质是什么颜色的,原理类似于渲染器中的背景色,所以代码很简单: class diffuseLight final : pu...
此前我们的渲染器只支持球体这一种primitive,现在是时候添加四边形了。 6.1 Defining the Quadrilateral 虽然在代码中我们会以quad来命名新的primitive,但从技术上来说,我们实际要实现的是平行四边形。我们通过以下三个参数定义平行四边形: Q:起始的一角 u:表达平行四边形其中一条边的向量 v:表达平行四边形另一条边的向量 ...
w White noise的效果如下图所示: 而Perlin noise的效果则有些像模糊后的white noise: Perlin noise的一个重要特征是可重复性:只要输入的三维坐标不变,它返回的随机数就是固定的。Perlin Noise还有一个特征是使用的方法快速且复杂型相对较小,在本章节中我们将会实现自己的Perlin Noise类。 原博客中基本没有详细介...
在计算机图形学中,纹理映射指的是给场景中的物体添加材质效果,这里的效果指的是一种或多种材质属性,例如颜色、光泽度、凹凸等。其中,定义出物体表面上每个点的颜色是最常用的一种纹理映射。只是在实操中,我们通常是根据给定点的位置,在纹理上查找对应的颜色值。 4.1 Constant Color Texture 在我们的工程中,我们为纹理创建一个单独的类。texture类的主要函数是value()...
本章节将会是光线追踪系列博客中目前为止最难且最复杂的部分,我们之所以在当前的进度下引入BVH,一方面是为了让代码运行更快,同时也是因为实现BVH要求我们重构hittable类的部分代码,当我们在场景中添加长方体等其他物体时,我们就不再需要再回过头考虑hittable的重构了。 当前我们的渲染器的主要时间瓶颈在光线-物体的相交测试上,当我们向场景中发射数以百万计的光线时,我们可以首先对场景中...
在真实世界的相机中,相机会在一个短暂的时间窗口内保持开启,而在这个时间段内,相机和场景中的物体都有可能处于运动状态。为了能够在渲染器中实现这一效果,我们需要计算在快门的时间窗口中,相机对于场景的感知的平均值。 2.1 思路 原博客的这一部分我认为解释的有些繁琐,所以我就不再翻译原文内容了,直接写一写思路与代码。 实现运动模糊的思路很简单,光线追踪器在相机快门打开的时间窗口内随机选择不同...
Defocus Blur有一个更熟悉的说法,景深。 实现景深的思路相对来说很简单,我们只需要修改相机的模型即可,这主要涉及到相机的两个参数: 焦距距离(Focus Distance):指定一个距离,在这个距离上的物体会清晰对焦 光圈大小(Aperture Size):控制模糊的程度,光圈越大,则模糊越明显 13.1 Generating Sample Rays 在没有散焦...
现在,让我们进一步拓展相机的功能,首先我们为相机实现一个可以修改的fov,所谓的fov,就是指渲染图像从一边到另一边的角度。由于设置的相机宽高比不为1:1,所以fov在水平和竖直方向上的角度是不同的,在本系列博客中,我们将采用竖直方向上的fov,并且在构建相机时,我们给出指定的角度,然后在构建函数中转换到弧度。 12.1 Camera Viewing Geometry 想要调整相机的fo...
像水、玻璃和钻石这样的透明材料是电介质。当光线照射到它们时,会分裂成反射光线和折射(透射)光线。我们将通过随机选择反射或折射来处理这一现象,每次交互只生成一条散射光线。 折射光线在从环境进入材料本身时会发生弯曲(例如玻璃或水)。这就是为什么当铅笔部分插入水中时会看起来弯曲。折射光线弯曲的程度由材料的折射率决定。通常,这是一个描述从真空进入材料时光线弯曲程度的单一值。玻璃的折射率大约在1.5...