PBR读书笔记四:Sampling Theory

对图像的描绘,本质上是场景重建(reconstruction)信号处理(signal processing),简单来说就是用离散的采样(像素点)来对连续的真实世界进行重建,那么就涉及到采样(sampling)的问题了。

傅立叶分析

傅立叶分析可以用来评估重建函数的质量,同时其被用来在频域上分析不同频率的函数,通常来说,高频率的函数变换的较为频繁、较快;低频率的函数变化的较缓慢。如下是两个函数图像:

7m6Gb6.png

与之对应的,是其在频域上的函数图像:

阅读更多

PBR读书笔记三:Color & Radiometry

众所周知,自然、物理界的光照不是靠RGB三个离散分量描述的,而是由不同强度的不同波长\(\lambda\)的光组成的,因此如果要基于物理地渲染,对于自然光谱的模拟是必不可少的,在pbrtmistuba两款渲染器中,都采用了Spectrum类来承载光谱数据,对于不同波长的数据,我们描述为SPD,aka spectral power distribution,光谱能量分布。

Spectrum

自然界光谱不是离散描述的,于是我们可以像傅立叶变换一样,用一组带系数的基底函数\(c_iB_i(\lambda)\)来逼近实际的波形。

pbrt中,定义了两种实际的Spectrum类,并且使用一个typedef来在实际的使用中切换两者的类型:

1
2
typedef RGBSpectrum Spectrum;
// typedef SampledSpectrum Spectrum;
阅读更多

PBR读书笔记二:Basic Shapes

在整个图形学领域,空间中的物体都是由基本的Shape构成的,比如基本的几何形体:Sphere、Box;或者能够达成更加复杂表现的Mesh等。这一章主要讲述了几种不同的形体的定义和相关计算。

形体基类

PBRT使用Shape类来为所有形体创建了一个基类,reverseOrientation用来决定图形的法线是否翻转(用来确定图形的内、外)。

对于每个形体有如下的基础函数和解释:

1
2
virtual Bounds3f ObjectBound() const = 0;
virtual Bounds3f WorldBound() const;
阅读更多

从零开始写一个光栅软渲染器

结束了GAMES101的学习(好久了,又因为大作业的毛发渲染由于生病暂时没法摸到自己的电脑,突发奇想的能不能做一个光栅渲染器(因为做raytracer的人实在太多力),于是便开了一个仓库来放相关的东西:Tiny Rasterizer

渲染管线

pipeline

这里,我们实现的时候因为偷懒因为方便,我只实现了以下的部分:

  • 顶点定义
  • 顶点变换
  • 光栅化
  • 片元着色
  • 样本操作(暂未实现)
阅读更多

Line, and more than line

在计算机图形学的几何分支中,直线和曲线都属于隐式表示(Implicit Represent)的几何组件,我们需要一些高效的方式将这些图形以较高的质量绘制到屏幕上。

布雷森汉姆算法

虽然是相对朴素的算法,但是布雷森汉姆算法至今仍有着较高的使用率。

算法的基本想法是通过斜率来不断累积一个error,每当error的值超过一个阈值(0.5)的时候就在另一个方向上进行长度为1像素的前进,最终绘制出一根在屏幕上连续的直线。

4Foeg0.png

阅读更多

正交投影&透视投影

Let's do some math.

由于我们在计算机中的三维图像最终都是需要渲染到屏幕上的,所以我们需要对其进行一次投影的操作,首先假定我们的坐标为右手系,我们首先在\((0,0,0)\) 原点坐标处放置朝向\(-z\)方向,上方为\(y\)轴方向的摄像机,需要得到的图像的大小为 1x1(假设下的理想情况)。现在,有两种投影方式可供选择:

正交投影 Orthographic Projection

虽然这并不是我们最终希望使用的投影方式,但是正交投影在许多场景如 2D 游戏、工程制图等都得到了较为广泛的应用。

6XPBMn.png

阅读更多