真实感图形 .ppt
真实感图形 现在学习的是第1页,共43页2主要内容l引言l光照明模型l多边形物体的明暗处理l光线跟踪算法l纹理映射l辐射度方法l实时绘制技术l非真实感图形绘制技术现在学习的是第2页,共43页3光线跟踪(Ray Tracing)算法l图例现在学习的是第3页,共43页4光线跟踪算法l迄今为止最为成功的生成真实感图形算法之一l算法简单l生成的图形真实感强l计算量大l其前身是光线投射(Ray Casting)算法现在学习的是第4页,共43页5光线投射算法原理l对屏幕上每一像素,执行下述3步操作:lStep1:从视点出发通过该像素中心向场景发出一条光线,并求出该条光线与场景中物体的全部交点lStep2:将各交点沿光线方向排序,获得离视点最近交点lStep3:依据局部光照明模型计算该交点处的光亮度,并将所得光亮度值赋给该像素l当所有屏幕像素都处理完毕 时,即得到一幅真实感图形现在学习的是第5页,共43页6光线投射算法原理lStep1l从视点出发通过屏幕上一像素中心向场景发出一条光线,并求出该条光线与场景中物体的全部交点现在学习的是第6页,共43页7光线投射算法原理lStep2l将各交点沿光线方向排序,获得离视点最近交点现在学习的是第7页,共43页8光线投射算法光线投射效果示例http:/alice.loria.fr/publications/papers/2007/ISVC_torus/photo/torus01.png现在学习的是第8页,共43页9Whitted模型:回顾lWhitted整体光照明模型Ic:由光源直接照射在表面上引起的反射光亮度Is:沿V的镜面反射方向r入射到表面上的环境光在表面上产生的 镜面反射光It:沿V的规则透射方向t入射到表面上的环境光通过透射在表面 上产生的规则透射光ks:表面的镜面反射率kt:表面的透射率 现在学习的是第9页,共43页lWhitted模型的求解10Whitted模型:回顾光线跟踪!现在学习的是第10页,共43页11光线跟踪算法原理l对屏幕上每一像素,执行下述4个步骤:lStep1:从视点出发通过该像素中心向场景发出一条光线R,并求出R与场景中物体的全部交点;获得离视点最近交点P;并依据局部光照明模型计算P处颜色值Ic(光线投射)lStep2:在P处沿着R镜面反射方向和透射方向各衍生一条光线l若点P所在表面非镜面或不透明体,则无需衍生出相应光线lStep3:分别对衍生出的光线递归地执行前面步骤,计算来自镜面反射方向和透射方向上周围环境对点P光亮度的贡献Is和ItlStep4:依据Whitted光照明模型即可计算出点P处的光亮度,并将计算出的光亮度赋给该像素l当所有屏幕像素都处理完毕时,即得到一幅真实感图形现在学习的是第11页,共43页12光线跟踪算法原理l逆向跟踪从光源发出的光经由物体之间的多次反射和折射后投射到物体表面,最终进入人眼的过程现在学习的是第12页,共43页13光线树现在学习的是第13页,共43页14光线跟踪递归过程终止条件l条件1l光线与环境中任何物体均不相交,或交于纯漫射面l条件2l被跟踪光线返回的光亮度值对像素颜色的贡献很小l条件3l已递归到给定深度现在学习的是第14页,共43页15光线跟踪算法的伪语言描述main()/主函数for(需要计算颜色的每一像素pixel)确定通过视点V和像素pixel的光线R;depth=0;/递归深度ratio=1.0;/当前光线的衰减系数,1.0表示无衰减/color是经计算后返回的颜色值RayTrace(R,ratio,depth,color);置当前像素pixel的颜色为color;/主函数main()结束现在学习的是第15页,共43页16光线跟踪算法的伪语言描述RayTrace(R,ratio,depth,color)/说明:光线跟踪子函数 if(ratio MAXDEPTH)/终止条件3置color为黑色;return;/to be continued现在学习的是第16页,共43页17光线跟踪算法的伪语言描述光线R与场景中的所有物体求交。若存在交点,找出离R起始点最近的交点P;if(交点不存在)/终止条件1置color为黑色;return;用局部光照明模型计算交点P处的颜色值,并将其存入local_color;/to be continued现在学习的是第17页,共43页18光线跟踪算法的伪语言描述if(交点P所在的表面为光滑镜面)计算反射光线Rr;/递归调用!RayTrace(Rr,ks*ratio,depth+1,reflected_color);if(交点P所在的表面为透明表面)计算透射光线Rt;/递归调用!RayTrace(Rt,kt*ratio,depth+1,transmitted_color);/to be continued现在学习的是第18页,共43页19光线跟踪算法的伪语言描述依照Whitted模型合成最终的颜色值,即:color=local_color+ks*reflected_color+kt*transmitted_color;return;/光线跟踪子函数RayTrace()结束现在学习的是第19页,共43页20关键问题之一:光线的表示l一般采用直线的参数方程来表示:R R(t)=P+t D DlP:起始点lD:方向,不妨设D为单位矢量l一般在世界坐标系中进行计算lt=0表示为光线起点,即点Plt 0表示在光线的正方向lt 0表示在光线的负方向,此时交点为无效交点现在学习的是第20页,共43页21关键问题之二:光线与物体的求交l光线方程:R(t)=P+t D Dl物体表示:l隐函数表示:f(X X)=0l参数表示:X X=g(u,v)l交点计算l将光线方程待入曲面方程,求根l隐函数表示:f(P+t D D)=01个方程1个未知数单变量求根参数表示:P+t D D-g(u,v)=03个方程3个未知数(t,u,v)多变量求根多数时候需要采用数值求解计算量大、误差有累积、甚至不收敛等问题现在学习的是第21页,共43页22光线与物体求交示例:光线与球求交l球面(位于原点)方程:x 2+y 2+z 2-r 2=0l光线方程代入球面方程,得到关于t 的二次方程:l(Px+t Dx)2+(Py+t Dy)2+(Pz+t Dz)2 r 2=0l整理后,得到:lAt 2+Bt+C=0lA=Dx2+Dy2+Dz2=1(假设光线方向为单位向量)lB=2(PxDx+PyDy+PzDz)lC=Px2+Py2+Pz2 r 2l利用一元二次方程求根公式,得到:lt1=(-B+sqrt(B2-4C)/2;t2=(-B-sqrt(B2-4C)/2l分别对应光线与球的两个交点,舍弃负根现在学习的是第22页,共43页23光线与物体求交示例:光线与三角形求交l思路lStep1:光线与三角形所在平面求交lStep2:若交点存在,判别交点是否位于三角形内部现在学习的是第23页,共43页24光线与物体求交示例:光线与三角形求交lStep1l平面方程:(x-q)n=0lq是平面上一点,可取为三角形一个顶点n是平面法向,可由三角形两条边向量做叉积得到平面方程重写为:xn+D=0等价于平面方程Ax+By+Cz+D=0,其中(A,B,C)=n,D=-qnl光线方程代入平面方程求解后得到:t=-(Pn+D)/(Dn)若Dn=0,则光线与平面平行无交点若t 0,则交点位于光线原点之后无效交点,舍弃l将t 代入平面方程,计算得到光线与平面的交点X现在学习的是第24页,共43页25光线与物体求交示例:光线与三角形求交lStep2l将三维空间中点在三角形内的判别问题转化到二维平面上l最理想的投影平面:xy,yz,zx.l投影方法l设平面方程为Ax+By+Cz+D=0,依据|A|,|B|,|C|大小决定投影平面若|A|=max(|A|,|B|,|C|),取yz为投影平面若|B|=max(|A|,|B|,|C|),取zx为投影平面若|C|=max(|A|,|B|,|C|),取xy为投影平面l一旦确定投影平面,即可在该平面内进行点在三角形内部的判别Example:设平面方程为z=3(A,B,C,D)=(0,0,1,-3),此时|C|最大,取xy为投影平面可仅利用x,y坐标进行计算现在学习的是第25页,共43页26关键问题之三:镜面反射方向计算lP为入射光线L和物体的交点;N为点P处的物体表面法向;Rr为镜面反射光线的方向li为L与N的夹角;r为Rr与N的夹角l由光线反射定律知道,irl假设L,N均为单位矢量 R Rr r=L L-2(L L N N)N N现在学习的是第26页,共43页27关键问题之四:透射方向计算lP为入射光线L和物体的交点;N为点P处的物体表面法向lRt为透射光线的方向lSnell定律位于折射率为1的介质1中、与表面法向N的夹角为1的入射光线L,在进入折射率为2的介质2后,将产生折射,其折射方向Rt与N的夹角为2,且有1sin12sin2现在学习的是第27页,共43页28阴影计算l从P出发向光源L发射一条阴影测试光线Rl若R在到达L的途中与场景中的物体不相交,则点P受光源L直接照射l反之,点P被位于它与光源L之间某一物体所遮挡l若遮挡物为不透 明体,则点P位 于光源阴影之中现在学习的是第28页,共43页29阴影计算l包含阴影计算的Phong模型现在学习的是第29页,共43页30光线跟踪阴影效果现在学习的是第30页,共43页31小结:光线跟踪中的四类光线现在学习的是第31页,共43页32小结:光线跟踪中的四类光线lEye raysl从视点发出lShadow raysl从物体表面上的点向 光源发出lReflected raysl从物体表面上的点沿 镜面反射方向发出lRefracted raysl从物体表面上的点沿透射方向发出现在学习的是第32页,共43页33反走样l引起走样的原因l光线跟踪算法本质上是对画面的点采样l示例现在学习的是第33页,共43页34反走样l反走样处理方法l超采样l自适应超采样现在学习的是第34页,共43页35反走样l反走样效果示例现在学习的是第35页,共43页36加速技术l为什么要进行加速?l常用加速技术l包围盒技术l空间分割技术现在学习的是第36页,共43页37包围盒技术l原理l将场景中的所有表面按其空间位置关系分层次组织成树状结构l根结点:整个场景l中间结点:空间位置较为接近的一组表面l叶结点:单个景物表面l每一结点中的表面或表面片集合都用一形状简单的包围盒包裹起来l当光线与包围盒有交时,才进行光线与其中所含的景物面片求交运算光线与包围盒不相交,必定不与其中所含的景物面片相交现在学习的是第37页,共43页38包围盒技术l层次包围盒示例现在学习的是第38页,共43页39包围盒技术l常用包围盒l包围盒l包围球l包围圆柱l平行2n面体现在学习的是第39页,共43页40空间分割技术l原理l将景物空间分割成一个个小的空间单元l被跟踪的光线仅与它所穿过空间单元中所含物体表面进行求交测试l利用相邻空间单元的空间连贯性,使光线快速跨越空单元,迅速到达非空单元,求得光线与景物的第一个交点现在学习的是第40页,共43页41空间分割技术l典型方法l均匀网格lKd树lBSP树l四叉树(二维)/八叉树(三维)现在学习的是第41页,共43页42实例程序之一l开源光线跟踪软件POVRay简介lhttp:/www.povray.org演示光盘中的实例程序现在学习的是第42页,共43页43实例程序之二lBerger-Perrin T.The sphere flake,in 100 lines of c code.lhttp:/ompf.org/ray/sphereflake/现在学习的是第43页,共43页