200 likes | 357 Views
第 8 章 真实图形. 8.1 光照模型. 8.1.1 基本光学原理 基本光照模型模拟物体表面对直接光照的反射作用,包括漫反射和镜面反射,物体之间的光反射作用没有充分考虑,仅仅用一个与周围物体、视点、光源位置都无关的环境光常量来近似表示。可以用如下等式表示: 入射光 = 环境光 + 漫反射光 + 镜面反射光. 8.1.2 环境光 环境光( ambient light )是在物体和周围环境之间多次反射后,最终达到平衡时的一种光,又称为背景光。 三维空间中任意一点对环境光的反射光强度可以用公式定量地表示为:
E N D
8.1 光照模型 • 8.1.1 基本光学原理 • 基本光照模型模拟物体表面对直接光照的反射作用,包括漫反射和镜面反射,物体之间的光反射作用没有充分考虑,仅仅用一个与周围物体、视点、光源位置都无关的环境光常量来近似表示。可以用如下等式表示: • 入射光=环境光+漫反射光+镜面反射光
8.1.2 环境光 • 环境光(ambient light)是在物体和周围环境之间多次反射后,最终达到平衡时的一种光,又称为背景光。 • 三维空间中任意一点对环境光的反射光强度可以用公式定量地表示为: • 其中:Ka是物体对环境光的反射系数,与物体表面性质有关; Ia是入射的环境光的光强,与环境的明暗度有关。
8.1.3 漫反射光 • 漫反射光是由物体表面的粗糙不平引起的,它均匀地向各个方向传播,与视点无关。 • 漫反射光在空间均匀分布,反射光强I与入射光的入射角θ的余弦成正比,即: • 其中,Kd是漫反射系数(0~1之间的常数),与物体表面性质有关;Ip是入射光(光源)的光强;θ是入射光的入射角,即入射光与物体表面法向量之间的夹角。
设物体表面在照射点P处的单位法向量为N,P到点光源的单位向量为L,则上式可表达为如下的向量形式: 设物体表面在照射点P处的单位法向量为N,P到点光源的单位向量为L,则上式可表达为如下的向量形式: • 如果有多个光源,则可以把各个光源的漫反射光照效果进行叠加:
8.1.4 镜面反射光和冯(Phong)反射模型 • Phong提出了一个计算镜面反射光亮度的经验模型,其计算公式为: • 其中:Ks是物体表面镜面反射系数,它与入射角和波长有关;α是视线与反射方向的夹角;n为镜面高光系数,用来模拟镜面反射光在空间中的汇聚程度,它是一个反映物体表面光泽度的常数; 近似地描述了镜面反射光的空间分布。
V和R分别是观察方向和镜面反射方向的单位矢量,则可以用点积V·R来代替 : • 在多个点光源照射下,Phong镜面反射模型可以写成:
引入矢量L和V的半角矢量H ,得到简化的Phong模型: • 在多个点光源照射下,简化的Phong模型为:
8.2 明暗处理 • 8.2.1 双线性光强插值(Gouraud明暗处理) • 基本思想:为了使多边形表面之间光滑过渡,首先计算物体表面多边形各顶点的光强,把它们作为曲面光强的采样点;然后对多边形顶点的光强插值计算出多边形内部区域中各点的光强。 • 若采用扫描线绘制算法,则可以沿当前扫描线进行双线性插值,即先用多边形顶点的光强线性插值出当前扫描线与多边形交点处的光强,然后再用交点的光强线性插值出扫描线位于多边形内区域段上每一点像素处的光强。
8.2.2 双线性法向插值(Phong明暗处理) • 基本思想:通过对多边形顶点的法向量进行插值,获得其内部各点的法向量,同时根据光照明模型计算各点的光强。
8.3 纹理 • 纹理:物体表面的各种表面细节和图案花纹。 • 8.3.1 概述 • 在真实感图形学中,我们可以用如下的两种方法来定义纹理: • 图像纹理:将二维纹理图案映射到三维物体表面,绘制物体表面上一点时,采用相应的纹理图案中相应点的颜色值。 • 函数纹理:用数学函数定义简单的二维纹理图案,如方格地毯;或用数学函数定义随机高度场,生成表面粗糙纹理即几何纹理。
8.3.2 二维纹理域的映射 • 在纹理映射技术中,最常见的纹理是二维纹理。映射将这种纹理变换到三维物体的表面,形成最终的图像。 • 为了实现这个映射,就要建立物体空间坐标(x,y,z)和纹理空间坐标(u,v)之间的对应关系,这相当于对物体表面进行参数化,反求出物体表面的参数后,就可以根据(u,v)得到该处的纹理值,并用此值取代光照明模型中的相应项。 • 经常使用的映射方法有圆柱面映射和球面映射。
8.3.3 三维纹理域的映射 • 三维纹理映射的纹理空间定义在三维空间上,与物体空间是同维的,在纹理映射的时候,只需把场景中的物体变换到纹理空间的局部坐标系中去即可。
8.3.4 几何纹理 • 为了给物体表面图像加上一个粗糙的外观,我们可以对物体的表面几何性质作微小的扰动,来产生凹凸不平的细节效果,就是几何纹理的方法。
8.4 光线跟踪 • 8.4.1 基本光线跟踪算法 • 在此场景中, • 有一个点光源L, • 两个透明的球体 • O1与O2,一个 • 不透明的物体O3。
首先,从视点出发经过视屏一个像素点的视线E传播到达球体O1,与其交点为P1。从P1向光源L作一条阴影测试线S1,若发现其间没有遮挡的物体,那么就用局部光照明模型计算光源对P1在其视线E的方向上的光强,作为该点的局部光强。同时还要跟踪该点处反射光线R1和折射光线T1,它们也对P1点的光强有贡献。在反射光线R1方向上,没有再与其他物体相交,那么就设该方向的光强为零,并结束这光线方向的跟踪。 首先,从视点出发经过视屏一个像素点的视线E传播到达球体O1,与其交点为P1。从P1向光源L作一条阴影测试线S1,若发现其间没有遮挡的物体,那么就用局部光照明模型计算光源对P1在其视线E的方向上的光强,作为该点的局部光强。同时还要跟踪该点处反射光线R1和折射光线T1,它们也对P1点的光强有贡献。在反射光线R1方向上,没有再与其他物体相交,那么就设该方向的光强为零,并结束这光线方向的跟踪。 • 然后对折射光线T1方向进行跟踪,来计算该光线的光强贡献。折射光线T1在物体O1内部传播,与O1相交于点P2,由于该点在物体内部,故假设它的局部光强为零,同时,产生了反射光线R2和折射光线T2,在反射光线R2方向,可以继续递归跟踪下去计算它的光强。
继续对折射光线T2进行跟踪。T2与物体O3交于点P3,作P3与光源L的阴影测试线S3,没有物体遮挡,那么计算该处的局部光强。由于该物体是非透明的,那么可以继续跟踪反射光线R3方向的光强,结合局部光强,来得到P3处的光强。反射光线R3的跟踪与前面的过程类似,算法可以递归的进行下去。继续对折射光线T2进行跟踪。T2与物体O3交于点P3,作P3与光源L的阴影测试线S3,没有物体遮挡,那么计算该处的局部光强。由于该物体是非透明的,那么可以继续跟踪反射光线R3方向的光强,结合局部光强,来得到P3处的光强。反射光线R3的跟踪与前面的过程类似,算法可以递归的进行下去。 • 重复上面的过程,直到光线满足跟踪终止条件。这样就可以得到视屏上的一个像素点的光强,也就是它相应的颜色值。
虽然在理想情况下,光线可以在物体之间进行无限的反射和折射,但是在实际的算法进行过程中,不可能进行无穷的光线跟踪,因而需要给出一些跟踪的终止条件。 虽然在理想情况下,光线可以在物体之间进行无限的反射和折射,但是在实际的算法进行过程中,不可能进行无穷的光线跟踪,因而需要给出一些跟踪的终止条件。 • 在算法应用的意义上,可以有以下的几种终止条件: • (1)该光线未碰到任何物体。 • (2)该光线碰到了背景。 • (3)光线在经过许多次反射和折射以后,就会产生衰减,光线对于视点的光强贡献很小(小于某个设定值)。 • (4)光线反射或折射次数即跟踪深度大于一定值。
8.4.2 光线与物体的求交 • 1.光线与球求交 • 2.光线与多边形求交 • 3.光线与二次曲面求交
8.4.3 光线跟踪算法的加速 • 1.自适应深度控制 • 2.包围盒及层次结构 • 3.三维DDA算法