• UnityShader入门学习(三)——Unity的Shader


    1 Unity Shader介绍

    1.1 Unity Shader的基础:ShaderLab

    在这里插入图片描述
    在这里插入图片描述

    1.2 Unity Shader属性块

    Shader ""
    {
    	Properties
    	{
    		_Int("Int", Int) = 2
    		_Float("Float", float) = 1.5
    		_Range("Range", range(0.0, 2.0)) = 1.0
    		_Color("Color", Color) = (1, 1, 1, 1)
    		_Vector("Vector", Vector) = (1, 4, 3, 8)
    		_MainTex("Texture", 2D) = "white"{}
    		_3D("3D", 3D) = "black"{}
    	}
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    1.3 Unity Shader SubShader

    在这里插入图片描述

    Tags

    Tags可以写在SubShader的一开始(所有的Pass用),也可以写在Pass块的内部(该Pass用)
    在这里插入图片描述

    渲染设置

    同Tags一样也可以写在Pass中或者写在Pass外面(SubShader一开始)
    在这里插入图片描述

    Pass介绍

    Pass里面可以定义Pass名称
    Pass里面的Tags还可以有额外的设置
    在这里插入图片描述
    还有CG语言所写的代码,主要是顶点片元着色器,使用以下关键字包裹
    CGPROGRAM
    ENDCG

    FallBack

    在这里插入图片描述

    2 SurfaceShader介绍

    SurfaceShader实际上是在顶点、片元着色器的基础上又进行了一层的封装,我们可以通过Show GenerateCode来查看到。(我们可以看到编译后的顶点、片元着色器是非常复杂的)

    SurfaceShader的结构和前面的顶点、片元着色器的结构是一样的。主要区别在于SubShader中。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    3 UnityShader != 真正的Shader

    Unity Shader实际上指的就是一个ShaderLab文件。以.shader作为后缀的一种文件。在Unity shader里面,我们可以做的事情远多于一个传统意义上的Shader。

    在传统的shader中,我们仅可以编写特定类型的Shader,例如顶点着色器,片元着色器等。在Unity Shader中,我们可以在同一个文件里面同时包含需要的顶点着色器和片元着色器代码。

    在传统shader中,我们无法设置一些渲染设置,例如是否开启混合,深度测试等,这些是开发者在另外的代码中自行设置的。而Unity shader中,我们通过一行特定的指令就可以完成这些设置。

    在传统shader中,我们需要编写冗长的代码设置着色器的输入和输出,要小心的处理这些输入输出的位置对应关系等。而在Unity shader中,我们只需要在特定语句块中声明一些属性,就可以依靠材质来方便的改变这些属性。而对于模型自带的数据(如顶点,纹理坐标,法线等),Unity Shader也提供了直接访问的方法,不需要开发者自行编码来传给着色器。

  • 相关阅读:
    【面试算法——动态规划 21】不同的子序列(hard)&& 通配符匹配(hard)
    Meta自动化脚本机器人:构建高效社交平台工具
    GC日志开启及分析
    ETCD快速入门-01 ETCD概述
    JS(JavaScript)详解
    json专题
    【Flink源码篇】Flink提交流程之有效配置和程序的封装
    Java8新特性之新日期时间API
    < element-UI中 el-select组件,下拉时内容无法显示滚动条 >
    新概念英语(第二册)复习——Lesson 6 - Lesson10
  • 原文地址:https://blog.csdn.net/ithot/article/details/126064002