• Unity Shader入门精要读书笔记(二)UnityShader概述


    第三章UnityShader概述》的读书笔记:

    1.Unity Shader模板提供了几种选择:

    标准光照模型(新添加的基于物理的渲染方法)

    不含光照的基本的顶点、片元着色器

    屏幕后处理效果

    ComputeShader较为复杂,不做介绍

     

     

    2.Shader lab是一层抽象,开发者通过这一层抽象来写Shader,免去和很多文件打交道;

    3.Shader lab定义了一个材质需要的所有东西,而不仅仅是着色器代码;

    4.Shader lab就是我们直接写的那个Shader文件;

    5.Properties是材质和UnityShader之间的桥梁,例子:

    _2D(“2D”, 2D)=””{}

    _Cube(“Cube”, Cube)=”white”{}

    _3D(“3D”, 3D)=”black”{}

    这些花括号里面的内容在随后的版本中被弃用了;

     

    6.Properties语义块使得属性暴露在材质面板中;在subshader中也可以声明并使用Properties中没有声明的属性;

    7.Unityshader必须要有一个subshader语义块,Unity将会找到适合当前机器使用的第一个subshader语义块来执行(这一点很重要);subshader可以有多个,一个subshader可以有多个pass

    8.Subshader通常包括tags块,rendersetup块,pass块(必须),每一个pass定义一个完整的渲染流程;

    9.常见的渲染状态设置:

     

     

    10.subshader上写渲染状态,会应用到所有的pass中,如果只想影响一个pass,那么就写入到这个pass中;

    11.Tags是键值对,是subshader和渲染引擎之间的沟通桥梁;

     

     

    12.Pass也有Tags,不过和上面的应用在SubShader上的标签是不太一样的;

    13.使用UsePass命令时注意名称全大写,即UsePass “MyShader/MYPASSNAME”;

    14.Pass的标签规定我们如何渲染此物体;

    15.Pass的标签有:

     

     

    16.Fallback留一条后路,如果上述所有的subshader都无法使用,那么就用这一个shader,有:fallback “name” fallback off表示关闭;

    17.十分值得注意:fallback影响阴影。在渲染阴影纹理时,Unity会在每一个shader中寻找阴影投射的pass,而我们不需要专门实现一个pass,因为fallback中内置的shader常常有这样的通用的pass

    18.着色器代码可以写在SubShader语义块中(比如表面着色器),也可以写在Pass语义块中(比如顶点/片元着色器、固定函数着色器);

    19.[Unity的宠儿]表面着色器是顶点、片元着色器更高一层的抽象,能够做很多事情;

    20.CGPROGRAMENDCG之间的代码是CG/HLSL编写的,但是是经过封装的,有细微差别;

    21.[聪明孩子]用顶点、片元着色器来写CG/HLSL,更复杂但是灵活性好;

    22.顶点、片元着色器的代码在CGPROGRAMENDCG之间,只不过要写在Pass中;

    23.[被遗弃的孩子]固定函数着色器基本上废弃了;

    24.如果要实现自定义的渲染效果,使用顶点、片元着色器;

    25.Unity里的CGHLSL是等价的;

    26.本质上,表面着色器会转换为顶点片元着色器;

  • 相关阅读:
    一个十分诡异的NullReferenceException异常!
    如何去掉TabControl控件默认添加的TabPage
    GDI+发生一般性错误的解决方法
    C#中各种数组的性能比较
    酷享娱乐新生活
    关于ImageList.Images集合的特殊行为!
    WinForm窗体之间交互的一些方法
    实现单实例应用程序的三种方案
    MySql_Close 释放资源
    数组之List
  • 原文地址:https://www.cnblogs.com/JackSamuel/p/7272067.html
Copyright © 2020-2023  润新知