1. 简单光照明模型
    1. 发展历史
      1. 1967年,Wylie等人第一次在显示物体时加进光照效果[WYLI67]
      2. 1970年,Bouknight在Comm.ACM上发表论文,提出第一个光反射模型[BOUK70]
      3. 1971年,Gourand在IEEE Trans. Computers上发表论文[GOUR71],提出漫反射模型加插值的思想。
      4. 1975年,Phong在Comm. ACM上发表论文[PHON75],提出图形学中第一个有影响的光照明模型。
    2. 相关知识
      1. 光的传播
        1. 反射定律
          1. 入射角等于反射角,且反射光线、入射光线与 法向量在同一平面上。
          2. 反射定律示意
        2. 折射定律
          1. 折射角与入射角满足 $\frac{\eta_1}{\eta_2} = \frac{sin \varphi }{sin \theta}$
          2. 折射线在入射线与法线构成的平面上,式子中的符号如下图所示。
          3. 折射定律示意
        3. 能量关系
          1. 在光的反射和折射现象中,能量是守恒的
          2. 能量的分布情况满足这样的一个式 子:$I_i = I_d + I_s + I_t + I_v$
      2. 光的度量
        1. 立体角
          1. 面源ds向点源P所张的立体角dw为 $dw=\frac{ds}{r^2}$
          2. 点发光强度定义
        2. 点发光强度
          1. 光通量:单位时间内通过面元ds的光能量,记为dF。
          2. 发光强度
          3. 点光源在某个方向上的发光强度,定义为该方向上 *单位立体角* 内的光通量,即 $I=\frac{dF}{dw}=\frac{dF}{ds}\bullet r^{2}$
          4. 各向同性的点光源,在各个方向上单位立体角内通过的光通量相等,即在各个方向上发光强度相等。
          5. 设发光强度为I,则点光源向外辐射的整个光通量为球立体角内的光通量,即 F=$\int^{4\pi}_{0}{Idw} = 4\pi \bullet I$
    3. Phong光照明模型
      1. 理想漫反射
        1. $I_d= I_p * K_d * cos(\theta) $
          1. 入射光强为Ip
          2. 物体表面上点P 的法向为N
          3. 从点P指向光源的向量为L
          4. 两者间的夹角为 $\theta$
          5. K_d为漫反射系数, 0<Kd<1
        2. 当L、N为单位向量时
          1. $I_d= I_p * K_d * (L \bullet N)$
        3. 在有多个光源的情况下
          1. $I_d= K_d * \Sum_{i} I_{pi} * (L_i * N)$
        4. RGB颜色模型下
          1. 漫反射系数Kd有三个分量Kdr,Kdg,Kdb分别代表RGB三原色的漫反射系数
          2. 入射光强I设为三个分量Ir,Ig,Ib,通过这些分量的值来调整光源的颜色。
      2. 镜面反射光
        1. 镜面反射光将会在反射方向附近形成很亮的光斑,称为高光现象。
        2. 镜面反射光产生的高光区域只反映光源的颜色
        3. $ I_s = I_p * K_s * cos^{n}(a), a \in (0, \pi/2) $
          1. K_s 镜面反射系数
          2. a 视线方向V与反射方向R的夹角
          3. n 反射指数,反映了物体表面的光泽程度,一般为1~2000,数目越大物体表面越光滑。
        4. V和R都格式化为单位向量时
          1. $ I_s = I_p * K_s * (V \bullet R)^n $
          2. R可由 $R=N2cos\theta - L = 2N(N\bullet L)-L $ 计算
        5. 在有多个光源的情况下
          1. $I_s = K_s \Sum^{m}_{i=1}\begin{mbox}I_{pi}\bullet (R_i \bullet V) ^n \end{mbox} $
      3. 环境光
        1. 环境光是指光源间接对物体的影响,是在物体和环境之间多次反射,最终达到平衡时的一种光。
        2. 我们近似地认为同一环境下的环境光,其光强分布是均匀的,它在任何一个方向上的分布都相同。
        3. 在简单光照明模型中,我们用一个常数来模拟环境光,用式子表示为:Ie=Ia·Ka。
          1. Ia为环境光的光强
          2. Ka为物体对环境光的反射系数。
      4. Phong光照明模型
        1. 由物体表面上一点P反射到视点的光强I为环境光的反射光强Ie、理想漫反射光强Id、和镜面反射光Is的总和
        2. $ I=I_{a}K_{a}+I_{p}K_{d}(L\bullet N)+I_{p}K_{s}(R\bullet V)^n $
        3. Phone模型中的几何量示意
      5. Phong光照明模型的实现
        1. 为减少计算量,我们可以作如下假设
          1. 光源在无穷远处。即光线方向L为常数
          2. 视点在无穷远处,即视线方向V为常数
          3. 用$(H\bullet N)$近似$(R\bullet V)$
        2. 最终形式
        3. 示意彩图
      6. 不足
        1. 用Phong模型显示出的物体象塑料,没有质感
        2. 环境光是常量,没有考虑物体之间相互的反射光
        3. 镜面反射的颜色是光源的颜色,与物体的材料无关
        4. 镜面反射的计算在入射角很大时会产生失真等
    4. 增量式光照明模型
      1. 基本思想
        1. 在每一个多边形的顶点处计算合适的光照明强度或参数,然后在各个多边形内部进行均匀插值,得到多边形的光滑颜色分布。
      2. 与Phong光照明模型的对比
        1. 上:Phong光照明模型; 下:增量式光照明模型
      3. 主要算法
        1. 双线性光强插值(Gouraud明暗处理)
          1. 基本算法
          2. a)计算多边形顶点的平均法向。
          3. 用与顶点相邻的所有多边形的法向的平均值近似作为该顶点的近似法向量
          4. 顶点A的法向
          5. $N_a = \frac{1}{k}(N_1 + N_2 + \dots + N_k)$
          6. b)用Phong光照明模型计算顶点的平均光强。
          7. 在求出顶点A的法向Na后,我们可以用Phong光照明模型计算在顶点处的光亮度。
          8. 但是在Gourand提出明暗处理方法时,Phong模型还没有出现,他们采用的是 $I = I_{a}K_{a} + I_{p}K_{d}(L\bullet N_{a})/(r+k}$
          9. c)插值计算离散边上的各点光强。
          10. 用多边形顶点的光强进行双线性插值,可以求出多边形上各点和内部点的光强。
          11. 把线性插值与扫描线算法相互结合,同时还用增量算法实现各点光强的计算。
          12. 算法首先由顶点的光强插值计算各边的光强,然后由各边的光强插值计算出多边形内部点的光强
          13. 插值公式
          14. 双线性光强插值示意
          15. 增量算法
          16. 扫描线内部
          17. d)插值计算多边形内域中各点的光强。
          18. 优点
          19. 比以往的简单光照明模型有了很大的提高
          20. 解决了相邻多边形之间的颜色突变问题,产生的真实感图象颜色过渡均匀,图形显得非常光滑
          21. 比双线性法向插值计算量小
          22. 缺点
          23. 由于采用光强插值,它的镜面反射效果不太理想
          24. 相邻多边形的边界处的马赫带效应不能完全消除
        2. 双线性法向插值(Phong明暗处理)
          1. 以时间为代价,可以部分解决双线性光强插值的弊病
          2. 特点
          3. 保留双线性插值,对多边形边上的点和内域各点,采用增量法。
          4. 对顶点的法向量进行插值,而顶点的法向量,用相邻的多边形的法向作平均。
          5. 由插值得到的法向,计算每个象素的光亮度。
          6. 假定光源与视点均在无穷远处,光强只是法向量的函数。
          7. 插值公式
    5. 阴影的生成
      1. 阴影多边形算法
        1. 概述
          1. 1978年,Atherton等人提出了阴影多边形算法
          2. 第一次提出用隐藏面消除技术来生成阴影
          3. 相对光源可见的多边形被称为阴影多边形,而不见面就是非阴影多边形
          4. 非阴影多边形就处在物体多边形的阴影区域中
        2. 步骤
          1. 区分多边形阶段
          2. 用传统的隐藏面消除技术,相对于光源,把物体上的多边形区分为阴影多边形、非阴影多边形和逆光多边形
          3. 显示阶段
          4. 计算物体表面各个多边形的光强
          5. 对于非阴影多边形和逆光多边形,用某种方法来减少正常计算出来的光强值,使其有阴影的效果
      2. 阴影域多面体算法
        1. 阴影域
        2. 算法关键
          1. 如何有效的判定一个物体表面是否包含在阴影域多面体之内
        3. CROW77
          1. 基于扫描线隐藏面消除算法
      3. 其他方法
        1. 光线跟踪算法
        2. 辐射度算法
  2. 纹理及纹理映射
    1. 概述
      1. 纹理
        1. 颜色纹理
          1. 它可以是光滑表面的花纹、图案,是颜色纹理,这时的纹理一般都是二维图象纹理,当然它也有三维纹理
        2. 几何纹理
          1. 纹理还可以是粗糙的表面(如桔子表面的皱纹),它们被称为几何纹理,是基于物体表面的微观几何形状的表面纹理
      2. 纹理映射
        1. 把我们得到的纹理映射到三维物体的表面的技术
        2. 需要考虑的问题
          1. 如何定义纹理
          2. 图像纹理
          3. 将二维纹理图案映射到三维物体表面,绘制物体表面上一点时,采用相应的纹理图案中相应点的颜色值。
          4. 函数纹理
          5. 用数学函数定义简单的二维纹理图案,如方格地毯。或用数学函数定义随机高度场,生成表面粗糙纹理即几何纹理。
          6. 如何映射纹理
          7. 对于二维图象纹理,就是如何建立纹理与三维物体之间的对应关系
          8. 对于几何纹理,就是如何扰动法向量
      3. 纹理空间
        1. 纹理一般定义在正方形区域$(0\leq u \leq 1, 0\leq u \leq q)$之上
        2. 理论上,定义在此空间上的任何函数可以作为纹理函数
        3. 而在实际上,往往采用一些特殊的函数,来模拟生活中常见的纹理。
        4. 纹理空间的定义方法
          1. 用参数曲面的参数域作为纹理空间(二维)
          2. 用辅助平面、圆柱、球定义纹理空间(二维)
          3. 用三维直角坐标作为纹理空间(三维)
    2. 二维纹理域的映射
      1. 例:一个二维纹理的函数表示
        1. 二维纹理示意
        2. Subtopic 2
      2. 二维纹理还可以用图象来表示
        1. 就要建立物体空间坐标(x,y,z)和纹理空间坐标(u,v)之间的对应关系
      3. 常用映射方法
        1. 圆柱面映射
        2. 球面映射
    3. 三维纹理域的映射
      1. 二维纹理映射的局限性
      2. 基本思想
        1. 在三维物体空间中,物体中每一个点(x,y,z)均有一个纹理值t(x,y,z),其值由纹理函数t(x,y,z)唯一确定
      3. 例:木纹的纹理函数
        1. 首先求木材表面上的点到木材中心的半径R:$R=\sqrt{u^2 + v^2}$
        2. 对半径进行小的扰动: $R=R+2sin(20*a)$
        3. 对z轴进行小弯曲处理: $R=R+2sin(20*a+w/150)$
        4. 最后根据半径R用下面的伪码来计算color值作为木材表面上点的颜色
    4. 几何纹理
      1. 定义一个纹理函数F(u,v),对理想光滑表面P(u,v)作不规则的位移
      2. 具体是在物体表面上的每一个点P(u,v),都沿该点处的法向量方向位移F(u,v)个单位长度
      3. 新表面的法向量可通过对两个偏导数求叉积得到
      4. F的值相对于上式中其它的量很小,可以忽略不计
      5. 扰动后的向量单位化,用于计算曲面的明暗度,可以产生貌似凹凸不平的几何纹理。
      6. F的偏导数的计算,可以用中心差分实现。
      7. 几何纹理函数的定义与颜色纹理的定义方法相同,可以用统一的图案纹理记录
  3. 局部光照明模型
    1. 理论基础
      1. 光的电磁理论
        1. 光波是电磁波的一种,自然光是非偏振光
        2. 由自然光照射到物体表面产生的反射光及其反射率系数 $\rho$ 由 Fresnel 公式确定
          1. Fresnel公式
        3. Fresnel公式表明,物体的反射率不仅与光线的入射角有关,也与物体的折射率有关
          1. $\rho (\theta, \lambda)$
      2. 微平面理论
        1. 将粗糙物体表面看成是由无数个微小的理想镜面组成。这些平面朝向各异,随机分布
          1. 微平面示意图
        2. 对于每一个微平面,只有在它的反射方向上才有反射光,而在其他方向上都没有光出现。
    2. 局部光照明模型
      1. $I_r = I_{a}K_{a}+I_{i}(N\bullet L)dw(K_{d}R_{d}+K_{s}R_{s})$
        1. Ir为直接光照下物体表面表现出来的反射光强
        2. IaKa的定义与简单光照明模型相同,表示环境光的影响
      2. 优点
        1. (1)局部光照明模型是基于入射光能量导出的光辐射模型,而简单光反射模型基于经验,显然前者更具有理论基础。
        2. (2)局部光照明模型的反射项以实际物体表面的微平面理论为基础,反映表面的粗糙度对反射光强的影响,而简单光照模型只以(N*H)n近似,前者的模拟更精确。
        3. (3)局部光照明模型的高光由Fresnel定律,根据材料的物理性质决定颜色,而简单光照模型只以高光颜色与材料无关。
        4. (4)简单光照模型在入射角接近90°时会产生失真现象,而在局部光照明模型中可以很好的改进这一点。
        5. (5)用简单光照模型生成的物体图象,看上去象塑料,显示不出磨亮的金属光泽,而在局部光照明模型中,反射光强的计算考虑了物体材质的影响,就可以模拟金属的光泽。
  4. 光投射模型