2.逐顶点和逐片元的光照模型

  1. 2.光照模型-逐顶点光照和逐片元光照
    1. 2.1 知识点
      1. 知识回顾:光照模型
      2. 提出问题
      3. 逐顶点光照
      4. 逐片元光照
      5. 关于逐顶点光照的插值运算
      6. 总结
    2. 2.2 知识点代码

2.光照模型-逐顶点光照和逐片元光照


2.1 知识点

知识回顾:光照模型

光照模型是用于计算光照效果的数学公式,是业界前辈们探索出来的计算规则。

提出问题

光照效果相关的计算,应该写在顶点着色器还是片元着色器中呢?本节课学习的知识就是为了解答这一问题。

逐顶点光照

  • 在哪计算:顶点着色器回调函数中。

  • 计算方式:逐顶点光照会在每个物体的顶点上进行光照计算。这意味着光照计算只在物体的顶点位置上执行,而在顶点之间的内部区域使用插值来获得颜色信息。

  • 说人话:只计算顶点上的颜色,非顶点部分使用权重或者差值运算。

  • 优点:逐顶点光照的计算量较小,通常在移动设备上性能较好,适用于移动游戏等对性能要求较高的场景。

  • 缺点:照明效果可能不够精细,特别是在物体表面上的细节区域,因为颜色插值可能不足以捕捉到细微的照明变化。

  • 适用场景:逐顶点光照适用于需要在有限资源下获得较好性能的场景,例如移动游戏。

逐片元光照

  • 在哪计算:片元着色器回调函数中。

  • 计算方式:逐片元光照会在每个像素(片元)上进行光照计算。每个像素会根据其位置、法线、材质等信息独立进行光照计算。

  • 说人话:每个像素都进行光照计算。

  • 优点:逐片元光照提供了更高的精细度,可以捕捉到物体表面上的细微照明变化,提供更逼真的效果。

  • 缺点:计算量较大,对于像素密集的场景需要更多的计算资源。

  • 适用场景:逐片元光照通常用于需要高质量照明效果的PC和主机游戏,以及要求视觉逼真度较高的场景。

关于逐顶点光照的插值运算

  • 我们不需要自己处理插值运算,插值由图形硬件(GPU)来执行。GPU负责处理3D图形的渲染,包括顶点插值和像素插值等操作。

  • 插值运算过程在图形硬件中高度优化,因此在实时渲染中能够快速而高效地执行。

  • 我们只需要了解插值运算的大概规则。假设三角面片的三个顶点 A、B、C,任何位于该三角面片中的像素 P,首先会计算出它相对于 3 个顶点的位置权重 WeightAWeightBWeightC,然后使用这些权重参与 P 点的颜色计算:

    PixelColorP = WeightA * ColorA + WeightB * ColorB + WeightC * ColorC
    
  • 最终计算出 P 点的颜色 PixelColorP

总结

  • 光照效果的计算可以在顶点着色器和片元着色器中完成。

  • 在顶点着色器回调函数中:计算量小,效果差,适合低配设备。

  • 在片元着色器回调函数中:计算量大,效果好,适合高配设备。

  • 实际在哪个阶段实现光照计算,取决于项目的具体需求和硬件性能。

  • 之后在学习光照模型时,每一种光照模型都会包含两种实现方式:逐顶点光照和逐片元光照。


2.2 知识点代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson02_光照模型_逐顶点光照和逐片元光照 : MonoBehaviour
{
    void Start()
    {
        #region 知识回顾 光照模型
        
        //光照模型就是用来计算光照效果的数学公式
        //是业界前辈们探索出来的计算规则

        //提出问题
        //具体的光照效果相关的计算
        //应该写在顶点还是片元着色器中呢?
        //本节课学习的必备知识就是用来回答该问题的
        
        #endregion

        #region 知识点一 逐顶点光照
        
        //在哪计算:
        //顶点着色器 回调函数中

        //计算方式:
        //逐顶点光照会在每个物体的顶点上进行光照计算
        //这意味着光照计算只在物体的顶点位置上执行
        //而在顶点之间的内部区域使用插值来获得颜色信息

        //说人话:
        //只计算顶点上的颜色,非顶点使用权重或者差值运算
        
        //优点:
        //逐顶点光照的计算量较小,通常在移动设备上性能较好,适用于移动游戏等要求性能的场景

        //缺点:
        //照明效果可能不够精细,特别是在物体表面上的细节区域,因为颜色插值可能不足以捕捉到细微的照明变化

        //适用场景:
        //逐顶点光照适用于需要在有限资源下获得较好性能的场景,例如移动游戏
        
        #endregion

        #region 知识点二 逐片元光照
        
        //在哪计算:
        //片元着色器 回调函数中

        //计算方式:
        //逐片元光照会在每个像素(片元)上进行光照计算
        //这意味着每个像素都会根据其位置、法线、材质等信息独立地进行光照计算
        
        //说人话:
        //每个像素都进行计算
        
        //优点:
        //逐片元光照提供了更高的精细度,可以捕捉到物体表面上的细微照明变化,提供更逼真的效果

        //缺点:
        //计算量较大,对于像素密集的场景需要更多的计算资源

        //适用场景:
        //逐片元光照通常用于需要高质量照明效果的PC和主机游戏,以及要求视觉逼真度较高的场景
        
        #endregion

        #region 知识点三 关于逐顶点光照的插值运算
        
        //我们不需要自己去处理这个插值运算
        //插值运算是由图形硬件(GPU)来执行的
        //GPU负责处理3D图形的渲染,包括顶点插值和像素插值等操作
        //这个过程在图形硬件中被高度优化过,因此在实时渲染中能够快速而高效地执行

        //我们只需要了解插值运算的大概规则即可
        //假设:
        //三角面片的三个顶点A、B、C
        //该三角面片中的任何像素P,首先会计算出它相对于3个顶点的位置权重WeightX
        //然后使用这个权重参与到P点的颜色计算中
        //PixelColorP = WeightA * ColorA + WeightB * ColorB + WeightC * ColorC
        //最终计算出P点的颜色PixelColorP
        
        #endregion

        #region 总结
        
        //光照效果的计算在顶点着色器和片元着色器中都可以做
        //在顶点着色器回调函数中:消耗低,效果差,适合低配设备
        //在片元着色器回调函数中:消耗高,效果好,适合高配设备
        //具体在哪里实现,根据项目实际情况而定

        //我们之后在学习光照模型时
        //每一种光照模型都会讲解两种实现
        //即 逐顶点 和 逐片元 光照
        
        #endregion
    }


}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏