shader学习之基础纹理透明效果

来源:互联网 发布:win7旗舰版服务优化 编辑:程序博客网 时间:2024/06/05 02:41

Shader学习之透明效果

  • Cg语言
    • Cg语言(C for Graphics)是为GPU编程设计的高级着色器语言,由NVIDIA公司开发
    • 目前已没有积极开发与支持,更推荐使用GLSL或HLSL Windows
    • Cg的设计考虑了GPU的体系结构,如可编程多处理单元(顶点处理器、像素处理器、外加不可编程单元)。Cg语言允许分别为顶点和像素写程序。
    • Cg语言有6种数据类型:
      • float:32位浮点数
      • half:16位浮点数
      • int:32位整数
      • fixed:12位定点数
      • bool:布尔值
      • sampler*-代表纹理对象(texture object)
  • 透明度测试
    • 概念:只要一个片元的透明度不满足条件(通常是小于某个阈值),那么它对应的片元就会被舍弃。被舍弃的片元将不会再进行任何处理,也不会对颜色缓冲产生任何影响;否则,就会按照普通的不透明物理的处理方式来处理它。
    • 核心函数:clip函数
      • clip是Cg的一个函数
      • void clip(floatn x)
      • 参数:裁剪时使用的标量或矢量条件
      • 描述:如果给定参数的任何一个分量是负数,就会舍弃当前像素的输出颜色。
  • ShaderLab属性类型
    • Color,Vector,Range,Float,2D,Cube,3D
  • Unity中一些常用的包含文件
    • UnityCG.cginc:包含了最常使用的帮助函数、宏和结构体等
    • UnityShaderVariables.cginc:在编译Unity Shader时,会自动包含进来。包含了很多内置的全局变量,如UNITY_MATRIX_MVP
    • Lighting.cginc:包含了各种内置的光照模型,如果编写的是Surface Shader的话,会自动包含进来;
    • HLSLSuport.cginc:在编译Unity Shader时,会被自动包含进来。声明了很多用于跨平台编译的宏和定义
  • Texture的本质应该就是一张图片,后缀可以使jpg,png,psd等,psd格式的文件中可能包含更多的信息?
  • GPU的渲染流水线
    • GPU的渲染流水线就是指GPU渲染的过程
    • 总的分为两个阶段
      • 几何阶段
      • 光栅化阶段
        • 几何阶段的输出信息是屏幕坐标系下的顶点位置以及和它们相关的额外信息,如深度值、法线方向、视角方向等
        • 光栅化阶段有两个重要的目标:
          • 计算每个图元覆盖了哪些像素
          • 为这些像素计算它们的颜色
    • GPU的渲染流水线接收顶点数据作为输入,这些数据随后被传递给顶点着色器。
    • 顶点着色器介绍
      • 顶点着色器的处理单位是顶点,也就是说,输入进来的每个顶点都会调用一次顶点着色器。
      • GPU利用本身的特性并行处理每一个顶点,这意味着这一阶段的处理速度会很快
      • 主要工作:
        • 坐标变换
          • 顶点着色器必须完成的一个工作是:把顶点坐标从模型空间转换到齐次裁剪空间(齐次是指空间坐标最大为1?),类似代码如下:
            • o.pos=mul(UNITY_MVP,v.position)
          • 顶点着色器可以在这一步中改变顶点的位置,这在顶点动画中是非常有用的。例如,我们可以通过改变顶点位置来模拟水面、布料等。
        • 逐顶点光照
    • 裁剪
      • 这个阶段是可配置的,但是不可编程
      • 将那些不在摄像机视野内的顶点裁减掉,并剔除某些三角图元的面片
    • 屏幕映射
      • 这个阶段不可配置,不可编程
      • 负责把个图元的坐标转换到屏幕坐标系中
    • 三角形设置
      • 不可配置,不可编程
      • 这个阶段会计算光栅化一个三角网格所需的信息。
        • 上一阶段输出的都是三角网格的顶点,即我们得到的是三角网格每条边的两个端点。但如果要得到整个三角网格对像素的覆盖情况,就必须计算每条边上的像素坐标。为了能够计算边界像素的坐标信息,我们就需要得到三角形边界的表示方式。这样一个计算三角网格表示数据的过程叫做三角形设置
    • 三角形遍历
      • 不可配置,不可编程
      • 三角形遍历阶段将会检查每个像素是否被一个三角网格所覆盖。如果被覆盖,就会生成一个片元
      • 找到那些像素被三角网格覆盖的过程就是三角形遍历。
      • 也称为扫描转换
      • 输出是一个片元序列
      • 注意:
        • 一个片元并不是一个真正意义上的像素,而是包含了很多状态的集合,这些状态用于计算每个像素的最终颜色。
    • 片元着色器
      • DirectX中也称为像素着色器
阅读全文
0 0