Shader

渲染管线
有一个物体需要渲染,首先是cpu经过判断,然后把这个物体顶点数据收集起来交给gpu,一个物体就是一个drawcall,drawcall就是准备顶点数据通知gpu的过程
顶点处理:拿到数据做顶点坐标的一些转换
图元装配:把点变成面
光栅化:把面对应的像素计算出来,计算zbuffer深度值
像素处理:进行上色,zbuffer近的进行着色
缓存:显示的数据都在帧缓存里面
显卡从缓存里面拿数据显示在屏幕上,一帧做一次

固定管线着色器 shaderlab

Shader "MyShader/ShaderProperties"
{
    Properties
    {
        //属性名 面板显示名 属性类型 初值
        _Value("一个浮点数",float) = 0
        //※※※
        _RangeValue("一个范围浮点数",Range(0,10))=5
        _Vector("一个四维数",Vector) = (1,1,1,1)
        //※※※
        _Color("一个颜色",Color)=(1,0,0,1)
        //※※※
        _Texture2D("一个二阶贴图",2D) = ""{}
        _Rect("一个非二阶贴图",Rect)=""{}
        _TextureCube("一个立方体贴图",Cube)=""{}
    }
    
    SubShader
    {
        Pass
        {
            
        }
    }
}







颜色系列
Shader "MyShader/Fixed/Fixed001"
{
    Properties
    {
        _MainColor("主颜色",Color)=(0,1,0,1)
    }
    SubShader
    {
        Pass
        {
            //固体纯色渲染
            //Color(1,0,0,1)
            //可变纯色渲染
            Color[_MainColor]
        }
       
    }
}






漫反射系列
Shader "MyShader/Fixed/Fixed002"
{
    Properties
    {
        _MainColor("主颜色",Color)=(0,1,0,1)
    }
    SubShader
    {
        Pass
        {
            //开启顶点光照
            Lighting   On
            Material
            {
                //固定漫反射颜色
                Diffuse(1,0,0,1)
                //可变漫反射颜色
                Diffuse[_MainColor]
            }
        }
       
    }
}







各种光系列
Shader "MyShader/Fixed/Fixed003"
{
    Properties
    {
        _MainColor("主颜色",Color)=(0,1,0,1)
        _AmbientColor("环境光颜色",Color)=(1,0,0,1)
        _SpecularColor("高光颜色",Color)=(1,0,0,1)
        _Shininess("光泽度",Range(0.1,1))=1
        _EmissionColor("自发光颜色",Color)=(0,0,0,0)
    }
    SubShader
    {
        Pass
        {
            //开启顶点光照
            Lighting   On
            //开启镜面反射
            SeparateSpecular On
            Material
            {
                //固定漫反射颜色
                Diffuse(1,0,0,1)
                //可变漫反射颜色
                Diffuse[_MainColor]
                //可变环境光颜色
                Ambient[_AmbientColor]
                //可变高光颜色
                Specular[_SpecularColor]
                //可变光泽度
                Shininess[_Shininess]
                //可变自发光
                Emission[_EmissionColor]
            }
        }
       
    }
}






多边形剔除系列
Shader "MyShader/Fixed/Fixed004"
{
    Properties
    {
        _MainColor("主颜色",Color)=(0,1,0,1)
        _AmbientColor("环境光颜色",Color)=(1,0,0,1)
        _SpecularColor("高光颜色",Color)=(1,0,0,1)
        _Shininess("光泽度",Range(0.1,1))=1
        _EmissionColor("自发光颜色",Color)=(0,0,0,0)
    }
    SubShader
    {
        Pass
        {
            //多边形剔除【剔除正面,渲染背面】
            Cull Front
            Color(0,1,0,1)
        }
    
    
        Pass
        {
            
            //多边形剔除【剔除背面,渲染正面】
            Cull Back
            //多边形剔除【剔除关闭,正面背面都渲染】
            Cull Off
            
            
            //开启顶点光照
            Lighting   On
            //开启镜面反射
            SeparateSpecular On
            Material
            {
                //固定漫反射颜色
                Diffuse(1,0,0,1)
                //可变漫反射颜色
                Diffuse[_MainColor]
                //可变环境光颜色
                Ambient[_AmbientColor]
                //可变高光颜色
                Specular[_SpecularColor]
                //可变光泽度
                Shininess[_Shininess]
                //可变自发光
                Emission[_EmissionColor]
            }
        }
       
    }
}







深度缓存系列

Shader "MyShader/Fixed/Fixed005"
{
    Properties
    {
        _MainColor("主颜色",Color)=(0,1,0,1)
        _AmbientColor("环境光颜色",Color)=(1,0,0,1)
        _SpecularColor("高光颜色",Color)=(1,0,0,1)
        _Shininess("光泽度",Range(0.1,1))=1
        _EmissionColor("自发光颜色",Color)=(0,0,0,0)
    }
    SubShader
    {
        Pass
        {
            //大于等于
            ZTest GEqual
            //关闭深度缓存
            
            Color(0,0,1,1)
            
        }
        ZWrite Off
    
        Pass
        {
            //开启顶点光照
            Lighting   On
            //开启镜面反射
            SeparateSpecular On
            Material
            {
                //固定漫反射颜色
                Diffuse(1,0,0,1)
                //可变漫反射颜色
                Diffuse[_MainColor]
                //可变环境光颜色
                Ambient[_AmbientColor]
                //可变高光颜色
                Specular[_SpecularColor]
                //可变光泽度
                Shininess[_Shininess]
                //可变自发光
                Emission[_EmissionColor]
            }
        }
       
    }
}






渲染队列系列

Shader "MyShader/Fixed/Fixed006a"
{
    Properties
    {
        _MainColor("主颜色",Color)=(0,1,0,1)
        _AmbientColor("环境光颜色",Color)=(1,0,0,1)
        _SpecularColor("高光颜色",Color)=(1,0,0,1)
        _Shininess("光泽度",Range(0.1,1))=1
        _EmissionColor("自发光颜色",Color)=(0,0,0,0)
    }
    SubShader
    {
        Tags
        {
            "Queue"="Transparent"
        }
        ZTest off
    
        Pass
        {
            
            //开启顶点光照
            Lighting   On
            //开启镜面反射
            SeparateSpecular On
            Material
            {
                //固定漫反射颜色
                Diffuse(1,0,0,1)
                //可变漫反射颜色
                Diffuse[_MainColor]
                //可变环境光颜色
                Ambient[_AmbientColor]
                //可变高光颜色
                Specular[_SpecularColor]
                //可变光泽度
                Shininess[_Shininess]
                //可变自发光
                Emission[_EmissionColor]
            }
        }
       
    }
}




//纹理颜色合并系列
Shader "MyShader/Fixed/Fixed007"
{
    Properties
    {
        _MainColor("主颜色",Color)=(0,1,0,1)
        _AmbientColor("环境光颜色",Color)=(1,0,0,1)
        _SpecularColor("高光颜色",Color)=(1,0,0,1)
        _Shininess("光泽度",Range(0.1,1))=1
        _EmissionColor("自发光颜色",Color)=(0,0,0,0)
        _MainTexture("主纹理",2D)=""{}
    }
    SubShader
    {

    
        Pass
        {
            //开启顶点光照
            Lighting   On
            //开启镜面反射
            SeparateSpecular On
            Material
            {
                //固定漫反射颜色
                Diffuse(1,0,0,1)
                //可变漫反射颜色
                Diffuse[_MainColor]
                //可变环境光颜色
                Ambient[_AmbientColor]
                //可变高光颜色
                Specular[_SpecularColor]
                //可变光泽度
                Shininess[_Shininess]
                //可变自发光
                Emission[_EmissionColor]
            }
            SetTexture[_MainTexture]
            {
                //先声明一个固定颜色
                constantcolor(1,0,0,1)
                //固定颜色和纹理合并
                //combine texture * Primary 
                combine texture * constant
            }
        }
       
    }
}





纹理合并系列
Shader "MyShader/Fixed/Fixed008"
{
    Properties
    {
        _MainColor("主颜色",Color)=(0,1,0,1)
        _AmbientColor("环境光颜色",Color)=(1,0,0,1)
        _SpecularColor("高光颜色",Color)=(1,0,0,1)
        _Shininess("光泽度",Range(0.1,1))=1
        _EmissionColor("自发光颜色",Color)=(0,0,0,0)
        _MainTexture("主纹理",2D)=""{}
        _DetailTexture("细节纹理",2D)=""{}
    }
    SubShader
    {

    
        Pass
        {
            //开启顶点光照
            Lighting   On
            //开启镜面反射
            SeparateSpecular On
            Material
            {
                //固定漫反射颜色
                Diffuse(1,0,0,1)
                //可变漫反射颜色
                Diffuse[_MainColor]
                //可变环境光颜色
                Ambient[_AmbientColor]
                //可变高光颜色
                Specular[_SpecularColor]
                //可变光泽度
                Shininess[_Shininess]
                //可变自发光
                Emission[_EmissionColor]
            }
            SetTexture[_MainTexture]
            {
                //先声明一个固定颜色
                constantcolor(1,0,0,1)
                //固定颜色和纹理合并
                //combine texture * Primary 
                combine texture * constant
            }
            SetTexture[_DetailTexture]
            {
                //当前纹理和上一次SetTexture的结果合并
                combine previous * texture
            }
        }
       
    }
}







//纹理合并插值运算

Shader "MyShader/Fixed/Fixed009"
{
    Properties
    {
        _MainColor("主颜色",Color)=(0,1,0,1)
        _AmbientColor("环境光颜色",Color)=(1,0,0,1)
        _SpecularColor("高光颜色",Color)=(1,0,0,1)
        _Shininess("光泽度",Range(0.1,1))=1
        _EmissionColor("自发光颜色",Color)=(0,0,0,0)
        _MainTexture("主纹理",2D)=""{}
        _DetailTexture("细节纹理",2D)=""{}
        _LerpValue("插值比例",Range(0,1))=0
    }
    SubShader
    {

    
        Pass
        {
            //开启顶点光照
            Lighting   On
            //开启镜面反射
            SeparateSpecular On
            Material
            {
                //固定漫反射颜色
                Diffuse(1,0,0,1)
                //可变漫反射颜色
                Diffuse[_MainColor]
                //可变环境光颜色
                Ambient[_AmbientColor]
                //可变高光颜色
                Specular[_SpecularColor]
                //可变光泽度
                Shininess[_Shininess]
                //可变自发光
                Emission[_EmissionColor]
            }
            SetTexture[_MainTexture]
            {
                //先声明一个固定颜色
                constantcolor(1,0,0,1)
                //固定颜色和纹理合并
                //combine texture * Primary 
                combine texture * constant
            }
            SetTexture[_DetailTexture]
            {
                constantcolor(0,0,0,[_LerpValue])
                //当前纹理和上一次SetTexture的结果合并
                combine previous lerp(constant) texture
            }
        }
       
    }
}

上一篇:unity Shader 入门精要 EX


下一篇:Unity shader入门精要笔记(三)