美文网首页
《Unity Shader入门精要》学习笔记

《Unity Shader入门精要》学习笔记

作者: Mr_Baymax | 来源:发表于2022-10-16 20:16 被阅读0次

    基础篇

    渲染流水线

    • 定义:渲染流水线的工作任务由一个三维场景出发,生成(或者渲染)一张二维图像。换句话说,计算机需要从一系列的顶点数据,纹理等信息出发,把这些信息最终转换成一张人眼可见的图像。这个工作有GPU和CPU共同完成
    • 三个阶段


      渲染流水线的三个概念阶段.png
      • 应用阶段:应用主导,CPU实现,开发者可以控制
      • 几何阶段:对渲染图元进行处理,由GPU实现
      • 光栅化阶段:使用上一阶段传递的数据来产生屏幕像素,最终渲染出图像,由GPU实现
    • CPU和GPU之间的通信
      • 数据加载到显存


        渲染所需的数据(两张纹理以及3个网格)从硬盘最终加载到显存中。在渲染时,GPU可以快速访问这些数据.png
      • 设置渲染状态(渲染状态:定义了场景的网格是怎样渲染的,使用哪个顶点着色器/片元着色器、光源属性、材质等)


        在同一状态下渲染三个网格。由于没有更改渲染状态,因此三个网格的外观看起来像是同一种材质的物体.png
      • 调用Draw Call


        CPU通过调用Draw Call来告诉GPU开始进行一个渲染过程。一个Draw Call会指向本次调用需要渲染的图元列表.png
    • GPU流水线
      概述:当GPU从CPU那里得到渲染命令后,就会进行一系列流水操作,最终渲染到屏幕上,用一幅图表示:


      image.png
      • 顶点着色器(Vertex Shader):可编程的,用于实现顶点的空间变换、顶点着色等功能,需要完成坐标变换和逐顶点光照。


        GPU在每个输入的网格顶点上都会调用顶点着色器。进行顶点的坐标变换,需要时还可以计算和输出顶点的颜色.png
        顶点着色器会将模型顶点的位置变换到齐次裁剪坐标空间下.png
      • 剪裁
        概述:由于场景可能很大,摄像机覆盖不到所有的物体,不在视野内的无需处理,所以有了剪裁


        只有在单位立方体的图元才需要被继续处理.png
      • 屏幕映射
        概述:屏幕映射的任务时把每个图元的x和y坐标转换到屏幕坐标系下(输入的z坐标不处理,直接传递到光栅化阶段)


        屏幕映射将x、y坐标从(-1, 1)范围转换到屏幕坐标系中.png
        OpenGL和DirectX的屏幕坐标系差异.png
      • 三角形设置
      • 三角形遍历
      • 片元着色器
        概述:另一个非常重要的可编程着色器。输入是上一阶段对顶点的插值结果,使用到重要的渲染技术是纹理采样。


        根据上一步插值后的片元信息,片元着色器计算该片元的输出颜色.png
      • 逐片元操作
        渲染最后一步:测试、合并/混合。
        两个重要的概念:深度测试混合Blend
        逐片元操作阶段所做的操作.png
    • 一些容易困惑的地方
      • 什么是OpenGL和DirectX:图像应用编程接口,这些接口架起了上层应用和底层GPU的沟通桥梁
      • 什么是HLSL、GLSL、CG:对应DirectX、OpenGL、NVIDIA的着色语言
      • 如何减少Draw Call:主要使用批处理技术

    Unity Shader 基础

    • Unity Shader概述:一对好兄弟,材质(Material)和Unity Shader,Unity中需要材质和Shader配合才能达到效果。材质需要赋值给Mesh或者粒子系统
    • Unity Shader的基础:ShaderLab,专门为Unity Shader服务的语言


      Unity Shader为控制渲染过程提供了一层抽象。如果没有使用Unity Shader(左图),开发者需要和很多文件和设置打交道,才能让画面呈现出想要的效果;而在Unity Shader的帮助下(右图),开发者只需要使用ShaderLab来编写Unity Shader文件就可以完成所有的工作.png
    • Unity Shader结构
      • 名字
      Shader "Custom/MyShader"
      
      • Properites:显示在面板中
      • SubShader:重量级成员,至少需要一个
      • Fallback:如果所以的SubShader都不能在这块显卡运行,则使用兜底的这个Shader
    • Shader的形式
      • 表面着色器
      • 顶点/片元着色器
      • 固定函数着色器(被抛弃)
      • 如何选择


        选择哪种着色器.png

    学习Shader所需的数学基础

    • 简介:这张主要介绍数学基础,讲述了各个坐标系、点和矢量、矩阵、坐标空间等知识,有些枯燥和难懂,建议自行阅读书籍深入学习。

    初级篇

    开始Unity Shader的学习之旅

    • 一个最简单的顶点/片元着色器


      image.png
    • ShaderLab属性和CG对应关系


      image.png
    • Unity提供的内置变量,可以从官网下载
      http://unity3d.com/cn/get-unity/download/achive
      
    image.png
    • CGIncludes中主要包含的文件以及它们的主要用处


      image.png
    • UnityCG.cginc一些常用的结构体


      image.png
    • UnityCG.cginc一些常用的帮助函数


      image.png
    • 从应用传递模型数据给顶点着色器是Unity支持的常用语义


      image.png
    • 从顶点着色器传递给片元着色器时Unity使用的常用语义


      image.png
    • 片元着色器输出时Unity支持的常用语义


      image.png
    • 如何定义复杂的变量类型,例如:


      image.png
    • 如何Debug
      • 使用假彩色图像输出到屏幕
      • 使用Visual Studio
      • 最新利器:帧调试器(Frame Debugger)


        帧调试器.png
    • shader整洁之道
      • float、half、fixed等使用合适的精度
      • 慎用分支和循环
      • 不要除以0
      • 避免不必要的计算


        image.png

    Unity中的基础光照

    • 我们如何看到这个世界的?
      • 光源
      • 吸收和散射
      • 着色:根据材质属性、光源信息计算沿某个观察方向的出射度,也称为光照模型
      • BRDF光照模型
    • 标准光照模型
      • 环境光
      • 自发光
      • 漫反射
      • 高光反射
      • 逐像素还是逐定点:在片元着色器中计算,也被称为逐像素光照;在顶点着色器中计算,也被称为逐顶点光照

    基础纹理

    • 目的


      image.png
    • 纹理属性


      image.png
    • Wrap Mode
      • Repeat:如果纹理坐标超过1,整数部分舍弃,使用小数部分采用,这样的纹理结果会不断重复
      • Clamp:该模式下,如果纹理坐标超过1,将会截取到1.如果小于0,截取到0
    • 两种模式对比


      Wrap Mode决定了当纹理坐标超过[0, 1]范围后将会如何被平铺.png
    • 偏移属性(Offset)


      偏移(Offset)属性决定了纹理坐标的偏移量.png

    透明效果

    • 概述
      image.png
    • 为什么渲染顺序很重要?
      image.png
      image.png
    • Unity Shader渲染顺序
      渲染队列.png
      image.png
    • ShaderLab混合指令


      image.png
    • ShaderLab混合因子


      image.png
    • ShaderLab混合操作


      image.png
    • 双面渲染透明效果


      image.png

    中级篇和高级篇

    • 比较复杂了,需要结合实际运用,在此就不叙述了

    总结

    • 这本书可以说是很经典的入门书籍,特别适合有一定数学基础和或者想往技术美术方向发展的人学习。看完后觉得Shader就这样,不算难。但是真正要实现一个特效时,又无从下手,就是这么神奇。收获还挺大的,学到了很多Shader方面的基本概念。以后有机会再回过头来看一看吧。

    相关文章

      网友评论

          本文标题:《Unity Shader入门精要》学习笔记

          本文链接:https://www.haomeiwen.com/subject/bfuzartx.html