随笔分类 -  Material Effects

摘要:Radiosity试图使用不同于光线追踪的方法去考虑全局光照的问题,它将几何图元和场景光照划分为小的元素(called patches),然后不考虑摄像机的位置,来计算每一个patch的近似渲染方程。因此,Radiosity是一个和视点无关的方法。 1、定义 Solid Angle-将物体投影到单位球上所形成的角。如下图角w solid angle单位是球面度(steradian,... 阅读全文
posted @ 2012-06-04 09:38 Cavia 阅读(2752) 评论(1) 推荐(0)
摘要:上一篇文章我们已经可以求出由SH基函数组成特定复合函数的因子,现在我们就来实现三维空间的SHL,光源来自HDR图像。 该算法使用上一篇文章的SH因子计算过程、HDR图像导入过程,同时也使用了光线/物体相交过程。 这里新引进几个结构体。 SHRay-使用两个SHVector3d表示射线的起点和方向。 SHRGBColor-表示RGB颜色值,每个分量都是double精度的浮点数。 SHCoe... 阅读全文
posted @ 2012-05-31 22:51 Cavia 阅读(932) 评论(1) 推荐(1)
摘要:1、二维空间的勒让德多项式勒让德多项式定义在[-1,1]范围内,其递归式是下面这个函数的参数是给定的x,给定的l和m,其中l必须是正整数,而且m在[-l,l]范围内。//勒让德多项式计算方法double ALPStd(float x,int l,int m){ if(l==m) //doubleFactorial(x)计算x!! return (pow(-1,m)*doubleFactorial(2*m-1)*pow(sqrt(l-x*x),m)); if(l==m+1) return (x*(2*m+1)*ALPStd(x,m,m)); ... 阅读全文
posted @ 2012-05-31 16:52 Cavia 阅读(1292) 评论(1) 推荐(0)
摘要:1、背景知识1.1 光照表示之前我们都只考虑光源点和物体表面点的光照作用,而现在,我们考虑物体表面点延伸的微型平面,这个微型平面作为半球形的底部,因此光照射进来的范围就是整个半球形,这也是BRDF的基础。1.2 数据压缩对于压缩信号来说,很多压缩技术基于这样一个思路:使用不同基函数的不同组合来组成一个更为复杂的数字信号表示。保存数字信号的最繁琐方法是保存每一个数据点,然而一个复杂的信号可能有成千上万个点,所以需要找到方法来压缩。对于每一个基函数,我们用频率(frequency),振幅(amplitude)和相位(phase)来表示,这三个数被称为系数(coefficient),这样就大大减小了 阅读全文
posted @ 2012-05-29 16:21 Cavia 阅读(1908) 评论(0) 推荐(0)
摘要:Phong模型让物体看起来具有塑料感,需要其他模型来得到更精确的金属和高光材质。高光的颜色取决于材质类型,比如白色适合塑料,金属类导体的高光颜色最好是和材质颜色一样。1、Ward反射模型有各向同性和各向异性两种形式。两种形式下的漫反射分量都是常数。下面是各向同性的形式。sigma是材质的粗糙度(常数)效果:roughness=0.25下面是各向异性的形式。sigma是材质的粗糙度(表面两个垂直方向上的各不相同)效果:roughX=0.9,rough=0.12、Schlick反射模型该模型的效果和Phong模型相似,但是由于去掉了指数项,使得其计算速度更快。效果n=73、Cook-Torranc 阅读全文
posted @ 2012-05-28 18:40 Cavia 阅读(2762) 评论(0) 推荐(0)
摘要:Lambertian漫反射模型假设反射光均匀分布在所有方向,简单方便。1、Oren-Nayar漫反射一些粗糙的表面具有很大程度逆反射的性质(反射向量和入射光线在发现的同一边)。sigma是表面的粗糙度该算法在光照向量和观察向量比较接近时最有效。效果:roughness=sqrt(0.5);2、Minnaert漫反射特别适合天鹅绒外观的建模。效果:m=0.8 阅读全文
posted @ 2012-05-28 15:24 Cavia 阅读(1788) 评论(0) 推荐(0)
摘要: 阅读全文
posted @ 2012-05-28 14:55 Cavia 阅读(1047) 评论(0) 推荐(0)
摘要:1. Irradiance(辐照度) total amount of energy received per unit area of a surface 2. Illuminance(照明度) essentially same as irradiance,the difference is that illuminance measures the amount of visible... 阅读全文
posted @ 2012-05-28 14:38 Cavia 阅读(1993) 评论(0) 推荐(0)
摘要:1、随机采样 在基本光线追踪算法中,只追踪有限数目的光线。这是一个采样过程(sampling process)。 采样有很多种方法: a、均匀采样 举例:根据给定的区间绘制数学函数。 将区间划分为许多小的宽度一致的小区间,在小区间的中点处计算函数的值,最终将这些点平滑连接出来。 在小区间数目很少的情况下,均匀采样可能会得到错误的结果。 b、随机采样 使用随机间隔宽度代替统一间隔... 阅读全文
posted @ 2012-05-28 09:26 Cavia 阅读(1500) 评论(0) 推荐(0)
摘要:该伪代码总结了光线追踪算法。 Function Raytrace(Scene World){ for(each pixel of the image) { Calculate the ray corresponding to the pixel (projection); Pixel color=trace(ray,0); ... 阅读全文
posted @ 2012-05-27 23:13 Cavia 阅读(2039) 评论(0) 推荐(0)
摘要:问题:1、性能算法的递归性质和大数目的追踪光线,渲染过程可能持续数小时。80-90%的渲染时间花费在计算光线和物体交点上。2、走样3、尖锐的阴影基本的光线追踪算法只能得到尖锐的阴影(因为模拟的是点光源)。4、局部光照和着色算法只追踪少数目的光线,只有四种类型的光线被考虑在内,物体之间的漫反射光没有被考虑在内,即算法并不包括全局光照。解决方案:1、性能a、使用更多或者更好的硬件b、大规模并行计算每一个光线都相互独立。将图像分割,分配在多核上或者分布式网络上;或者分配在多个线程上。c、限制交点检测的数目使用包围盒的层次关系。快速判断光线是否和一组物体相交。物体被分组在封闭的包围盒中。利用空间细分技 阅读全文
posted @ 2012-05-27 16:50 Cavia 阅读(5440) 评论(0) 推荐(0)
摘要:1、主光线(Primary rays)从camera发出的光线。2、阴影光线(Shadow/Light rays)从交点发出的光线,指向光源。如果这条光线在指向光源之前不相交于任何物体,则这个光源对该交点有贡献值;否则,该交点位于该光源的阴影处。3、反射光线(Reflection rays)如果物体表面具有反射性质,则部分光将会被反射出去,继续在场景中前进。根据Snell定律,一条新的光线将会从交点发出。4、折射光线(Refracted rays)当物体表面具有折射性质并且部分透明,部分光线将会进入物体继续传播。根据Snell定律,一条新的光线将会从交点发出进入物体。 阅读全文
posted @ 2012-05-27 15:40 Cavia 阅读(3039) 评论(0) 推荐(0)
摘要:实际上叫反向光线追踪(backward raytracing),因为计算是从camera开始发射光线,而不是从光源发射光线。反向光线追踪步骤:1、camera的胶片被分成离散的网格(即像素点),我们的目标是确定每一个像素点的颜色值。2、对于每一个像素,从camera位置追踪一条光线,指向该像素点3、对于这束光线,判断其是否和场景中的物体相交。如果相交,则转到步骤4;否则,将背景色填充到当前像素中去,回到步骤2,继续处理下一个像素。4、如果光线和物体相交,计算物体表面交点的颜色值。该点的颜色值即为该像素的颜色值。a、首先检查每个光源在该交点的贡献值。追踪一条新光线去光源,用来确定交点是被全部照亮 阅读全文
posted @ 2012-05-27 15:16 Cavia 阅读(18360) 评论(0) 推荐(1)
摘要:一、Normal Mapping 图1在Pixel Shader中,光照方程中diffuse分量的计算是通过从像素点到光源的单位向量和该点的单位法向量进行点积得到的。如图1,diffuse=dot(L,N).如果使用一张法线贴图(3个通道的纹理),纹理中每个像素的三个通道对应X、Y、Z三个空间向量,组成一个法线,对现有的每个像素的法线进行替换,得到表面凹凸的效果。法线以RGB编码。因为法线各分量的范围为[-1,1],而RGB各分量的范围为[0,1],所以需要对法线进行转换,以便保存在纹理中。转换公式为RGB=(XYZ+1)/2,相应的,XYZ=RGB*2-1。在切空间中,指向屏幕外的法线为(0 阅读全文
posted @ 2011-12-08 14:50 Cavia 阅读(961) 评论(0) 推荐(0)