shader-1

standard surface shader: 标准光照模型的表面着色器;

unlit shader:不含光照(但含雾效)的基本顶点/片元着色器;

image effect shader:实现屏幕后处理效果的一个模板;

compute shader:利用GPU的并行性进行一些与常规渲染流水线无关的计算。

shaderLab 渲染状态设置指令:

    Cull:  Cull Back|Front|Off     设置剔除模式,剔除背面/正面/关闭剔除

    ZTest: ZTest Less Greater|LEqual|GEqual|NotEqual|Always     深度测试时使用的函数

    ZWrite:  ZWrite On|Off    开启|关闭深度写入

    Blend: Blend SrcFactor|DstFactor  开启并设置混合模式

 --------:设置相应的状态后,会应用到所有的pass

shaderLab的标签:tags {"key"="value"  "key"="value"} 仅仅在SubShader中进行设置,不能在pass中进行设置

pass中的标签类型:

Shader "Custom/shader_1"
{
    //面板显示 定义的属性
    Properties
    {
        /*
        * 各种所需的属性
        */
        _Color ("color", Color) = (0,0,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _Glossiness ("smoothness", Range(0,1)) = 0.5
        _Metallic ("Metallic", Range(0,1)) = 0.0
        _Vertor("Vector",Vector)=(1,2,3,4)
        _2D("2D",2D)=""{}
        _3D("3D",3D)="black"{}
        
       
    }
    SubShader
    {
       //标签 key:value 形式
       //Queue 控制渲染顺序
       //RenderType 对着色器进行分类
       //DisableBatching 是否对该SubShader进行批处理
       //ForceNoShadowCasting 控制该物体是否会投射阴影
       //IgnoreProjector 是否收projector的影响 通常用于半透明物体
       //CanUseSpriteAtlas 用于2d时将该标签设为false
       //PreviewType 如何预览材质 value为形状 skyBox plane
        Tags { "RenderType"="opaque" "Queue"="Transparent" "DisableBatching"="True" "ForceNoShadowCasting"="True"
         "IgnoreProjector"="true" "CanUseSpriteAtlas"="False" "PreviewType"="Plane"}
        
        /*
        *cg代码可以写在 SubShader中(表面着色器的做法)或写在pass中(顶点/片元着色器的做法)
        */
        pass{
            //UsePass  其他shader可通过UsePass "shader名称/pass名称(自动转为大写)" 进行复用
            //GrabPass 该pass负责抓取屏幕并将结果存储在一张纹理中,以用于后续的pass
           //[Name] 定义name后 其他shader可通过UsePass "shader名称/pass名称(自动转为大写)" 进行复用
           //LightMode :设置该pass在unity的渲染流水线中的角色
           //RequireOptions:满足某些条件时渲染该pass
           //[Tags] Tags {"LightMode"="ForwardBase" "RequireOptions"="SoftVegetation"}
           //[RenderSetup]
       
        }
        
    }
    //FallBack 如果在显卡上不能运行该SubShader 就用指定的shader
    //FallBack "name"
    //FallBack Off 或者直接关掉,不使用
    FallBack "Diffuse"
}
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "Custom/Surface_Shader"
{
   Properties{
      _Color("Main Color",Color)=(0,0,0,0)
   }
   SubShader
    {
        Tags { "RenderType"="Opaque" }
        CGPROGRAM
            /*
             *CG代码块 surface 表面着色器写在subShader里面
            */
            //surface 表面着色器
            #pragma surface surf  Standard 
           
            struct Input
            {
                float4 color:COLOR;
            };
            void surf (Input IN, inout SurfaceOutputStandard o)
            {
               o.Albedo=1;
            }
        ENDCG
    }
    SubShader{
     Pass{
       // 标签或状态的设置
       CGPROGRAM
            /*
             *CG代码块 vertex fragment 顶点或片元着色器写在pass里面
            */
         //顶点着色器
        #pragma vertex vert
        //片元着色器
        #pragram fragment frag
        
        float4 vert(float4 v: POSITION):SV_POSTION{
          return UnityObjectToClipPos(v);
        } 
       fixed4 frag():SV_Target{
         return fixed4(1.0,0.0,0.0,1.0);
       }
       ENDCG
     }
    }
    SubShader{
       Pass{
       //固定函数着色器
       //当对于一些旧的设备 不支持可编程管线着色器 可以使用固定函数着色器(基本不会使用到,可以说不存在了)
          Material{
            Diffuse [_Color]
          }
          Lighting On
       }
    }
   FallBack "Diffuse"
}
发布了24 篇原创文章 · 获赞 1 · 访问量 1256

猜你喜欢

转载自blog.csdn.net/birdswillbecomdragon/article/details/104760256