• 【Unity Shader】顶点片元着色器01 基本命令介绍


    案例

    Shader "Unlit/shader01"
    {
        Properties
        {
    		_MyColor("color", Color) = (1,1,1,1)
    
        }
        SubShader
        {
            Tags { "RenderType"="Opaque" }
            LOD 100
    
            Pass
            {
                CGPROGRAM
                #pragma vertex vert
                #pragma fragment frag
    
                #include "UnityCG.cginc"
    
                struct appdata
                {
                    float4 vertex : POSITION;
                };
    
                struct v2f
                {
                    float4 vertex : SV_POSITION;
                };
    
    			fixed4 _MyColor;
    
                v2f vert (appdata v)
                {
                    v2f o;
                    //o.vertex = UnityObjectToClipPos(v.vertex);
    				//o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
                    return o;
                }
    
                fixed4 frag (v2f i) : SV_Target
                {
                    return _MyColor;
                }
                ENDCG
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    1. Properties

    对应编辑器里面可以编辑的属性值,需要在shader里面以及在Properties里面声明,如上面的_MyColor,除了color类型还可以使用别的类型

    2. SubShader

    一个Shader中可以有多个SubShader,但只执行第一个可执行的SubShader。

    2.1 Tags

    Tags语法格式如下:
    Tags { “TagName1” = “Value1” “TagName2” = “Value2” }
    这里重要注意:这种Tag有两种,一种是SubShader Tags,一种是Pass Tags, 也就是说Pass中Tags会覆盖SubShader里面的Tags,也可以Pass中不定义,直接使用SubShader里面的Tags,是一个继承关系

    可参考 tags

    2.1.1 Queue

    表示该物体渲染顺序,如透明物体属于Transparent队列,非透明物体属于Geometry队列,这里就是Geometry队列先进行渲染
    在这里插入图片描述
    如透明物体的话就是用 Tags { "Queue" = "Transparent" }
    这里注意还可以使用运算符 Tags { "Queue" = "Transparent+10" } ,表示这个material的渲染顺序是3010

    脚本中可以设置该值如 material.renderQueue=具体数值

    2.1.2 RenderType

    在这里插入图片描述

    如透明物体的话就是用 Tags { "RenderType"="Transparent" }
    暂时没用到,可不用,么感觉有啥用处
    参考 https://blog.csdn.net/wpapa/article/details/51319434

    2.2 LOD

    设置该值后,如LOD 100
    着色器会找到第一个<= Shader.maximumLOD 这个subShader执行,设置方式为shader.maximumLOD = 300;

    2.3 Pass

    SubShader里面包换的基本的Pass命令包含渲染状态设置命令的列表。

    在Shader的使用中会发现有时候只进行一次渲染是不够的,还要在它的基础上在加上一次或者多次才行,这就是多Pass的渲染的由来,如后处理的使用,就是基于这个

    这里重要注意:Pass里面被定义的语句在SubShader也可以被定义(要不然代码会巨长无比,也会有很多重复的部分)

    3. Fallback

    在所有SubShader的后面可定义 Fallback。基本上就是说,如果没有任何子着色器能够在此硬件上运行,则尝试使用另一个着色器中的子着色器

    如使用一个备选shader
    Fallback "name"
    或者直接关闭
    Fallback Off

  • 相关阅读:
    人工智能开启甲骨文整理研究新范式
    JavaScript:js实现在线五子棋人机(人人)对弈
    21天学习挑战赛之java多线程
    go进阶笔记
    Java安全之freemaker模版注入
    【蓝桥杯省赛真题14】python围圈报数 青少年组蓝桥杯python编程省赛真题解析
    HTML 表格
    MySQL的enum类型的踩坑记录
    Pytorch的入门操作(三)
    好用到爆,GitHub 星标 32.5k+的命令行软件管理神器,功能真强大
  • 原文地址:https://blog.csdn.net/qq_22849251/article/details/126572038