Computer Graphics

浏览量:435

several color model

The eye is a detector of light whose sensitivity to the quality or wavelength of the light has developed into color perception. Color is the only one of several qualities that go to make up our field of vision. The

spacer
浏览量:647

高动态范围光

本篇文章谢绝转载,也禁止用于任何商业目的。文章中的源码实现的下载地址参见https://github.com/twinklingstar20/hdr_demo 1. 色阶重建 色阶重建(Tone Mapping)是什么样的一个技术呢,它与高动态光照渲染(High Dynamic Range, HDR)又有什么关系呢?,且听我娓娓道来。 假设你是一名摄影爱好者,一定听过HDR这个词,它的专业称法为高动态范围成像(High Dynamic Range Image, HDRI),是用来实现比普通图像(每个颜色通道占8位)表示的曝光范围更大的一种技术,高动态范围成像的目的就是要正确地表示真实世界中从太阳光直射到最暗的阴影这样大的范围亮度。举个例子来解释,大晴天出门去摄(zhuang)影(bi),拍摄了图1所示的一张图,一定会被人喷不专业,因为你这是想证明你对自然景色更感兴趣呢,还是对中国的文化遗产更感兴趣呢?照顾了天空的曝光,就使得暗部欠缺曝光。 图1. 想更准确的拍摄天空 你为了证明你是爱中国的文化遗产,你想重点关注建筑物,于是你拍摄了另外一张图,如图2所示,确实证明了你的爱,但是背景又是什么鬼,那是霾吗,大北京这么难能可贵的大晴天,却拍出了雾霾的效果。 分析下造成这个问题的原因,简单来说,照相机拍摄的亮度(Luminance)范围是有限的,如果想要亮部更加清晰,特别暗的区域就显得比较黑;相反,如果想要暗部更加清晰,特别亮的区域就会被截断(Clamp to white)成白色,显得特别的亮。我们想要的结果如图3所示,不仅能清楚的显现出建筑的模样,同时还有一个比较清晰的背景,这就是色阶重建技术达到的效果,它把一个高动态范围的亮度,变换为低动态范围(Low Dynamic Range)的亮度,使仅用低动态范围的亮度能清晰、有效地还原场景的效果,PERFECT!!! 图3. 高动态范围成像技术达到的效果图 再举个例子,如图4所示,我们可以用不同的曝光度,拍摄一组图片,由暗到亮,然后采用色阶重建技术把它变换为一组明暗协调的图片,如图5所示。色阶重建技术,又可以细分为全局色阶重建和局部色阶重建,想要了解各种色阶重建技术可以参见Reinhard etc。 图4. 不同曝光度的一组图像 图5. 全局和局部色阶重建后的图像 至此,介绍了高动态范围成像(HDRI)和色阶重建之间的关系,可以简单把色阶重建技术划分为全局色阶重建和局部色阶重建。接下来,又提出一个问题,在实时渲染中,特别在多光源的光照计算中,为什么存在无法渲染高动态范围的问题呢? 在计算机的颜色缓冲区中,存储的颜色范围是\(\),当多光源的光照计算,由于亮度的叠加,容易导致亮度超过1.0,此时,硬件设备(GPU)会把它截断至亮度1.0,大部分情况下做这样一种截断处理是没有问题的。但是如果一个场景中绝大部分的片断(像素)经过多光源的光照叠加,它的亮度都超过1.0,简单的把颜色截断至\(\)范围内,那么整个场景有会显得曝光过度,物体的细节无法有效的得到呈现,如图6所示,整块区域就显得白花花的。可以模仿摄影中的色阶重建技术,同时渲染多张不同曝光度的高动态范围的图像,再通过色阶重建技术得到低动态范围的图像。那么问题来了,在实时渲染中,颜色缓冲区会把亮度超过1.0的图像自动截断至1.0,换句话说,就是GL_RGB类型的颜色缓冲区是无法存储高动态范围的帧,此时又如何存储渲染出来的高动态范围的帧呢? 图6. 曝光过度的渲染效果 这就有了新的图像存储格式的诞生,最早由Greg Ward在1985年提出了RGBE 32位的图像存储格式,RGB表示颜色值,E(Exponent)表示RBG颜色的指数系数,通过指定不同的E,就能有效的存储不同高动态范围的图像。后续又出现了多种不同的HDR格式的标准,例如Pixar Log Encoding(TIFF)、Radiance RGBE

spacer
浏览量:1,017

伽马校正

本篇文章谢绝转载,也禁止用于任何商业目的。 首先,解释下伽马(Gamma)是什么鬼。 以一个数字照相机为例,光子打到传感器上,显现出图像,如果有双倍的光子打到传感器,就会有双倍的电子信号,它是一个线性的关系。但是,人眼对光的感知并不是一个线性的关系,与照相机相比,人眼对暗色调会更加敏感些,使得人眼能感知的光照范围更加广(我也不知道为什么!!!)。如图1所示,图(1)人眼观测到的50%亮度的,实际上只有百分之二十多;图(2)是照相机捕获的50%亮度的颜色,明显比图(1)更亮。 图1. 人眼观测到的与照相机检测到的亮度对比 这与伽马又有什么关系呢?伽马建立起了一个照相机捕获的亮度与人眼观察到的亮度的对应关系,称之为伽马编码。设输入和输出的光照分别表示为\({{L}_{in}},{{L}_{out}}\),伽马系数为\(gamma\),得到关系等式(1),等式(1)的函数示意图如图2所示。\(gamma\succ 1\)的函数变化曲线如图中的红色曲线所示,\(gamma\prec 1\)的函数变化曲线如图中的蓝色曲线所示。 \({{L}_{out}}={{L}_{in}}^{gamma} \tag{1}\) 图2. 幂函数的示意图 因为人眼对暗色调(Dark Tone)更敏感,我们在存储图像文件的时候,对颜色进行伽马编码(Gamma Encoding),如图3所示,伽马编码产生的颜色带中暗色范围更宽。以相同的位数来表示颜色(例如8位),线性编码(Linear Encoding)可能需要更多的位数才能表现与伽马编码相同的效果。 图3. 以2.2伽马系数进行编码的颜色表对比图 伽马编码可以使得8位就能有效的描述绝大部分场景,但是它使得图像的存储和呈现过程变得更加复杂。(1)图像的存储过程,颜色通过系数为\(1/gamma\)的幂函数进行处理;(2)图像的显示,存储的颜色,需要通过显示器采用系数\(gamma\)的幂函数进行处理,即与图像存储相反的过程,它是显示设备内置的处理过程,我们可以把它理解为所有的显示设备都会行进伽马编码的逆处理。如图4所示,(1)图像伽马处理,把图像保存为JPEG或TIFF,(所有的JPEG格式的文件都会进行伽马编码)会采用系数为\(1/gamma\)的幂函数进行预校正,使得指定的位数有效的表示图像;(2)显示伽马处理,是显示设备对颜色进行的校正,两个过程中和后能有效的呈现的颜色。绝大部分显示设备采用的伽马系数为2.2。 图4. 伽马编码和显示 如果图像伽马处理与显示伽马处理不能达到中和,就会使得呈现出来的图像过暗或者过亮。如图5所示,蓝色表示图像伽马处理曲线,红色表示显示伽马处理曲线,紫色表示两者叠加处理后的函数曲线图,不同的中和结果就会产生不同的效果。 图5. 设图像伽马系数为2.2,与不同的显示伽马系数中和作后呈现出来的效果对比图 至此,我们知道,伽马是什么,为什么需要伽马编码,不同的伽马处理对呈现出来的图像的影响。前面阐述的是伽马编码在摄像机(照相机)从现实生活中捕获图像数据,再呈现到显示设备上影响。而在实时渲染的过程中,图像数据的捕获过程就相当于GPU的渲染过程,它可能没有涉及伽马编码,但是显示设备仍然会偷偷滴地帮我们完成伽马编码的逆处理,那么它会引发什么样的问题呢?很多时候,我们渲染出一帧的图像,都会通过显示设备调整渲染出的效果至到它符合我们预期,其实这个过程也考虑到了显示设备隐藏的逆处理,虽然它调试的显示器上显示正常,可能在不同的伽马系数的显示器就会有不同的呈现效果,而且有些情况,我们需要在渲染上对输出到显示设备的帧数据进行校正,特别是有大量动态范围光照的渲染中。这里引入一个概念,伽马校正(Gamma Correction),它是对显示设备对最终输出颜色逆处理的逆处理过程,没有写错,是逆处理的逆处理。 举个例子来阐述下伽马校正的原理,设颜色\(c=\left( 0.5,0,0 \right)\),显示设备的伽马系数为\(gamma=2.2\)经过显示设备的幂函数处理,实际上我们看到它呈现出来的颜色为\({{\left( 0.5,0,0 \right)}^{2.2}}=\left( 0.218,0,0 \right)\)。但是如果在输出到显示设备前,对它进行伽马校正,即\({{\left( 0.5,0,0 \right)}^{1/2.2}}=\left( 0.730,0,0 \right)\),那么,我们在显示设备上实际看到的颜色为 \({{\left( 0.730,0,0 \right)}^{2.2}}=\left(

spacer
浏览量:651

凹凸纹理

本篇文章谢绝转载,也禁止用于任何商业目的。 代码下载地址:https://github.com/twinklingstar20/BumpMapping 1. 凹凸纹理简介 凹凸纹理(Bump Mapping)是计算机图形学中,使物体表面仿真出褶皱效果的技术,该技术通过(1)扰动对象平面的法向量,(2)利用扰动的法向量进行光照计算,来实现。物体表面呈现出来的褶皱效果,不是由于物体几何结构的变换,而是光照计算的结果,凹凸纹理技术的基本思想最早由James Blinn在1978年提出的。凹凸纹理的效果如图1所示,左图是一个光滑的小球,中间图是一张扰动纹理贴图,通过它来扰动小球平面的法向量,再经过光照计算,就能产生右图所示的带有褶皱表面的小球。 图1. 凹凸纹理效果图 2. Blinn技术 2.1. 数学原理 任何一个三维几何面片,可以用三个带有两个变量的参数形式的表示: \(X=X(u,v),Y=Y(u,v),Z=Z(u,v) \tag{1}\) 其中,\(u,v\)的取值在区间之间,几何面片的局部点的偏微分表示该点的两个方向向量: \(\overrightarrow{{{P}_{u}}}=\left( {{x}_{u}},{{y}_{u}},{{z}_{u}} \right),\overrightarrow{{{P}_{v}}}=\left( {{x}_{v}},{{y}_{v}},{{z}_{v}} \right) \tag{2}\) 单位向量\(\overrightarrow{{{P}_{u}}},\overrightarrow{{{P}_{v}}}\)表示与该局部点相切的两个方向的切线,那么该点的法向量可以通过这两个切线向量的叉积得到,如图2所示: \(\overrightarrow{N}=\overrightarrow{{{P}_{u}}}\times \overrightarrow{{{P}_{v}}} \tag{3}\) 图2. 三维几何面片的法向量 实时渲染中的光照计算,特别是漫反射光和镜面反射光(Phong光照模型),依赖平面的法向量,Blinn技术的原理就是,使用一个扰动函数,对平面的法向量进行扰动,再将扰动后的法向量用于光照的计算。图3(a)~(d)描述了Blinn技术对法向量扰动的基本过程。 图3. 法向量的扰动过程 设扰动函数表示为\(F(u,v)\),原始平面上的一个点 \(P\),经过扰动后的位置为: \(P'=P+F\cdot \overrightarrow{N}/\left| \overrightarrow{N} \right| \tag{4}\) 而扰动的法向量\(\overrightarrow{N'}\)仍然可以由两个方向向量的偏微分得到:

spacer
浏览量:1,647

Perlin噪声

本篇文章谢绝转载,也禁止用于任何商业目的 1. Perlin噪声 Ken Perlin在1983年提出了一种渐变噪声,Perlin在1985年的SIGGRAPH有该算法的描述,称之为经典Perlin噪声(Classical Perlin Noise)。为了简化计算,方便使用硬件实现,并解决经典Perlin噪声中存在的错误,到2001年,Ken Perlin再次对原始的噪声算法进行了改进,称之为Simplex噪声(Simplex Noise),这两种算法都可以称为Perlin噪声。但是,我们有时候也把分形噪声也称为Perlin噪声,甚至在严肃的学术论文中都有这种称法。为了避免歧义,本文指的Perlin噪声特指经典Perlin噪声和Simplex噪声。 Stefan Gustavson指出:Simplex噪声有更小的算法复杂度,要求更少的乘法,在\(N\)维空间上,经典Perlin噪声的算法复杂度为\(\log \left( {{2}^{N}} \right)\),但是Simplex噪声的算法复杂度为\(\log \left( {{N}^{2}} \right)\)等优点。虽然Stefan Gustavson提供了对Simplex算法的注解,但是我依然不能理解Simplex噪声背后的数学原理,对Simplex噪声不作进一步阐述。 2. 经典Perlin噪声 经典Perlin噪声是Ken Perlin在1983年提出的噪声,Ken Perlin提供了一维、二维、三维算法的C实现,我们无法仅从他提供的代码理解其数学原理,Matt Zucker从数学原理的角度,对经典Perlin噪声进行了解读。本节将详细介绍二维、三维的Pernlin噪声的数学原理,算法的C语言实现源码如下所示: /* coherent noise function over 1, 2 or 3 dimensions */ /* (copyright Ken Perlin) */ #include

spacer
浏览量:1,783

实时阴影技术

转载请注明原文章链接:http://www.twinklingstar.cn/2015/1717/tech-of-shadows/ 示例代码下载地址:https://github.com/twinklingstar20/twinklingstar_cn_tech_of_shadows/ 1. 阴影介绍 在现实生活中,阴影随处可见,如图1中所示的两个例子,一个温暖窝心,一个浪漫感动。光与物的结合,形成阴影,使得场景更加的真实。如果没有阴影的存在, 这两个场景将变得十分的不自然。 图1. 现实中的阴影 想起高中时学过的一首由马致远创作的小令《天净沙•秋思》 枯藤老树昏鸦 小桥流水人家 古道西风瘦马 夕阳西下 断肠人在天涯 顿时在脑海中闪现一个画面:在深秋村野上,出现了一位漂泊天涯的游子,在残阳夕照的荒凉古道上,牵着一匹瘦马,迎着凄苦的秋风,信步满游,背后拖着长长的身影。 在图形学领域,给出一个阴影的定义: Shadow the region of space for which at least one point of the light source is occluded. (由于光源上存在点被障碍物阻挡而产生的区域,就形成了阴影) 这个定义存在两个局限:(1)只考虑到直接来自于光源的光照,不考虑由平面反射出的光照;(2)默认障碍物是不透明。本篇文章讨论的阴影就基于这两个 “不符合”实际的假设来进行的。 首先,介绍几个与阴影相关的重要概念。阴影渲染中的三个关键元素是:(1)光源,(2)遮挡物(Occluders, Blockers, Shadows

spacer
浏览量:4,743

环境贴图

本文主要首先介绍下什么是环境贴图,然后分别介绍球面贴图,立方体贴图,和双抛物面贴图,比较三种贴图方式的优缺点,立方体贴图的代码的下载地址为:https://github.com/twinklingstar20/twinklingstar_cn_environment_mapping(从NVIDIA网站上下载下来的)。 一. 环境贴图是什么 环境贴图(Environment Mapping,EM)也称为反射贴图(Reflection Mapping),把反射对象当作一个虚拟眼睛,生成一张虚拟的纹理图,然后把该纹理图映射到反射对象上,得到的图像就是该场景的一个影像。举个例子,比如镜子中的图像,就是对真实场景的一个影像。环境贴图这项技术最早由Blinn和Newell提出的【4】,主要实现的功能是:使物体表面能显示出真实场景的影像。如下图所示,小球表面就有周围环境的影像。 图1. 环境贴图 实现环境贴图,很常见到的主要有三种技术:球面贴图(Spherical Environment Mapping),双抛物面贴图(Dual Paraboloid Mapping)和立方体环境贴图。 环境贴图基本的思想如图2所示,假设场景离对象很远而且对象不会产生自我反射,在对象上某一点的影像就能通过反射向量r来确定。 图2. 环境贴图基本思想 那么环境贴图主要分5个步骤: (1)       创建一个2D环境纹理 (2)       计算反射对象上每个像素点的法向量 (3)       基于人眼位置和平面的法向量,计算反射向量 (4)       使用反射向量,计算该像素点在2D纹理上的值 (5)       使用得到的纹理值来绘制像素 基于人眼位置和平面的法向量,来计算反射向量,也很简单,如下面的图所示: 图3. 计算反射向量 接下来分别介绍3种具体的环境贴图的算法和实现,并且分析各种方法的优缺点。 二. 球面贴图 如图1所示,就是一个经典的球面贴图的样例。假设观察者在无穷远处,则所有的入射光线都是平面,如图4所示。 图4. 球面贴图的几何图示,红色表示法向量,蓝色表示反射射线,黄色表示入射光线 现在考虑如何将表面的颜色值与纹理上的纹理值对应起来。如图5所示,从观察者到顶点的坐标值用U来表示,归一化向量U,得到U’。既然是在视点坐标系统下进行的计算,则眼睛被放置在原点,向量U的值就等于顶点在视点空间下的坐标。当前的向量N也被变换到视点空间下,并且进行规一化,得到N’,反射向理就可以通过下面的等式计算得到: \(R = U' - 2(N'

spacer
浏览量:679

How AGP Work(转载)

本文转载于http://computer.howstuffworks.com/agp.htm,对AGP进行了介绍。在图形渲染中主要有三种内存:系统内存(System Memory),显存(Video Memory)和AGP内存(AGP Memory)。系统内存和显存都容易理解,不过AGP内存是什么呢?简单来说,就是把RAM中划出一小块内存,当作显存来用,在“AGP Memory Improvements”小节,有详细的介绍。 Introduction You point, you click; you drag and you drop. Files open and close in separate windows. Movies play, pop-ups pop, and video games fill the screen, immersing you in a world of 3-D

spacer
浏览量:3,436

八叉树颜色量化

本文简单的介绍了颜色量化的几种方法,重点介绍八叉树颜色量化算法,并实现了该算法。算法实现的下载地址(参见下载)。 一. 颜色量化介绍(Color Quantization) 计算机图形学中,常采用的一种方法是把颜色看成是基于红、绿、蓝三种颜色的混合,也可以采用色度、彩度、亮度等描述颜色,用多种不同的描述符来表示颜色,就称为颜色模型(Color Model),如果有人能量化这三种不同的描述符的数值,就可以用一个三元组来表示一种颜色,例如(r,g,b),这就形成了一个描述颜色的三维坐标系统,选择不同的颜色模型能形成不同坐标系统,坐标系统上所有颜色的集合就称为颜色空间(Color Spaces)。 在图形学中,颜色量化是为了减少一张图像中的颜色数并且使用它尽可能的与原始图像一样,在一些由于内存限制只能显示有限颜色的设备上,颜色量化就显得特别的重要,根据参考【5】的总结,介绍几种颜色量化方法,最后重点介绍八叉树颜色量化方法。 1.1   统一颜色量化(Uniform Quantization) 在RGB颜色模型,颜色可以表示成三维空间中的一个坐标,颜色空间可以表示为X,Y,Z轴都在范围的值,这样颜色空间就相当于一个正方体。统一颜色量化的基本思想就是独立的看待颜色空间中的每个坐标轴,把它们平均分成N条线段,这样就能形成一个个小方块,每个方块当作一种颜色。有时候把红和绿的坐标轴分成8段,把蓝色的坐标轴分成4段,这样就可以生成256个小方块,即256种颜色;除此之外,当然还有别的划分方法,例如可以把红色和蓝色分成6段,绿色分成7段,这样就能产生252种颜色。每个方块内的颜色值,可以取该方块所有颜色值的平均值。这种方法实现非常的简单快速,但是产生的结果并不好。 1.2   流行色算法(Popularity Algorithm) 通过某种颜色在图像中发生的频率来进行颜色量化,频率越高的赋予越大的优先级,这种方法不考虑常用的颜色之间是否是相似的,即可能频率较高的几种颜色很相近,但是确实又有不同的颜色坐标。流行色算法基本的做法通过两次扫描来处理:第一次扫描图像,创建一个包括颜色和颜色计数的表,以颜色计数从大到小排序,选择前K种颜色作为这张图像的调色板,别的颜色都丢弃掉;第二次扫描,需要计算图像上的颜色在调色板上的索引值,例如颜色(red,green,blue),通过计算它与调色板上所有颜色距离的平方值dist,找到dist值取最小时的索引i值,就是图像上该种颜色的索引值。 dist=(red - red )^2 + (green - green )^2 + (blue - blue )^2 1.3   中值切割法(Median Cut Algorithm) 与统一颜色量化方法有些相似,也是把颜色空间分成K个子块,使得每个了块尽可能的估计出相同数量的颜色。为了简化说明,这里用二维的平面来解释这个过程,如下图所示。原始图像上的颜色值放到颜色坐标系统上,沿着它最长的维度的中位数位置分成两半,剩下的子块按照类似的方法进行处理,得到右边那张图所示的结果。注意:中位数跟中点不是相同的概念。 图1. 中值切割 算法的基本过程如下所示: (1)       找到包含所有图像颜色的最小方块 (2)      

spacer
浏览量:970

随机采样和分布式光线追踪

本文主要叙述了论文【3】【4】中的两个方法,一种是随即采样,一种是分布式光线追踪方法,在介绍随机采样方法前,由泊松圆盘采样引入。 一.泊松圆盘采样(Poisson Disk Distribution) 一个采样位置不均匀分布的例子就是眼睛,眼睛有有限数量的光感受器,就像其它采样过程一样,应该是有一个奈奎斯特极限(Nyquist limit),但是眼睛正常情况下是不会发生锯齿现象的。在眼睛的中央窝(Fovea)中,六边形图案的细胞是紧密排列起来的,晶状体就扮演着低通滤波器的作用,这就避免了锯齿的发生。但是在中央窝外部,细胞的排列都很稀疏,所以采样率是很低的,然而在那里却也没有发生锯齿,原因就是通过细胞的不均匀分布来避免这个区域发生锯齿。 已经有人过研究眼睛中视锥细胞的分布,与人眼相似,光感受器在猴子眼睛的中央窝外部的分布如图1所示,这样一个分布称之为泊松圆盘分布:采样点随机分布在一定的范围内且任意两个采样点之间的距离不小于某个值。距离的最小值能限制噪声的数量,举个例子,胶片颗粒(Film Grain)就是随机分布的,如图2所示,但是没有像泊松圆盘分布一样有最小距离的限制,而是采用纯随机分布。造成的结果就是一些样本点会集中一些区域而在其它的某些区域留下大量空白,所以胶片(Film)没有锯齿,有噪声(Noise)存在。 图1. 猴子眼睛中光感受器的分布 图2. 胶片颗粒 一种简单的实现泊松圆盘分布的方法是:(1)随机生成采样位置,如果随机生成的采样位置与已经选择过的距离小于一给定值,则丢弃它,至少采样区域满为止,采用这种方法可以创建一个查询表(Lookup Table);(2)还需要计算滤波器的值,该值描述了每个采样点与周围的像素点的关系。位置信息和滤波器的值存储在一个查询表中,这种简单的方法确实能产生很好的图像效果,但是要求有一个非常大的查询表。因此这里引入另外一种技术:抖动。 二. 随机采样(Stochastic Sampling) 抖动技术也可以称在采样位置中加入一些噪声,它是随机采样的一种形式,是一种逼近泊松圆盘分布的技术。抖动技术又有很多种类型,这里主要介绍规格网格的抖动技术,这种技术能产生较好的实验结果并且很适用于图像渲染算法。抖动可以使得高频信号降低,但是降低的高频信号中的能量会出现在噪声中而不会消失,因此基本的光谱组合没有发生变化。与纯种的泊松圆盘分布技术相比,该技术可能会造成更多的噪声,而且可能会留下部分锯齿。 举个抖动的例子,计算时间抖动(Time Jitter)的效果,第n个样本抖动ζn的量,所以会在nT+ζn的位置采样,T表示采样周期,如图3所示,就是时间抖动的效果。可以采用不同的模型来表示抖动量ζn,比如用方差是σ2的高斯分布函数,增益量就可以为频率μ的函数,如下等式所示: 图3时间抖动 把一个像素看成是一个网格,或者由多个子像素(subpixel)网格构成的大网格,这样就是一个二维的抖动。噪声随机的加到X方向上的位置或者Y方向上的位置,X,Y方向相互独立,就相当于是两个一维的抖动构成的,要求使得每个采样点发生在某个像素网格范围内的随机位置上。如果已知道哪些采样点是可见的,则通过重构过滤器(Reconstruction Filter)对那些采样点的值进行处理。重构过滤器的实现方法是一个开放性的问题,最简单的重构过滤器是箱式滤波器(Box Filter):取多个采样点的平均值。也可以采用加权重构滤波器,这种情况下,滤波器是一个采样位置与周围像素相关的加权值。每个像素是附近采样点的值乘以加权值的总和,这些滤波器可以提前计算好保存在一个查询表中。 总结下随机采样的步骤:(1)加入随机抖动的采样样本;(2)重构过滤器重构该像素值。 三. 分布式光线追踪(Distributed Ray Tracing) 3.1 分布式光线追踪的概念和作用 它不是在分布式系统上的光线追踪,而是一种基于随机、分布式、超采样的光线追踪方法,解释下这里面有几个关键词的意思,如图4所示: (1)超采样,传统的光线追踪,是一个像素对应一条光线,而分布式光线追踪是一个像素多个采样点,所以一个像素就有多条光线,不限于图中所示的9条; (2)随机性,其实图4表示分布式光线不太准确,因为几条光线都是均匀分布的,由于本人比较懒就不画新的图片演示了,分布式光线中说的几条光线是随机的分布在一个像素方格内。 传统的光线追踪方法能产生较严重的锯齿,使得渲染出来的图像并不是自己想要的。而且在真实世界中,产生的图像不并像计算机产生的世界那样完美,即真实世界中,几何模型的边界棱角可能是模糊的,阴影的显示也有一个过渡过程。基于这个需求,分布式光线追踪这种技术应运而生,它是一种尽可能逼近这种效果的技术。 图4 分布式光线追踪 计算机图形学尝试将一个真实的世界显示在一个视频显示器上,真实的世界是由无穷多个像素组成的,但是显示器的光栅显示有像素数量的限制,显示器上的每个像素只能覆盖场景中的某个区域,所以像素值必需是该区域的估计。传统的光线追踪方法,每个像素只有一条光线穿过,依靠它来获取真实的世界中值,这种方法很简单,但是不精确。相反,如果采用多条光线的话,这个效果就不言而喻了。 3.2 着色模型 场景上一个点的光照强度值用数学解析函数可以表示成发光函数(Illumination Function)和反射函数(Reflectance

spacer