Shader 基础使用(一)

时间:2021-07-29 10:19:39

一:渲染绘图管线

  1. 目的
    输入3D模型—>输出2D模型
  2. 渲染绘图管线流程
    1.顶点处理

    1.本地坐标系
    2.世界坐标系
    3.观察坐标系
    4.投影坐标系

    2.面处理

    1.面的组装
    2.面的截取
    3.面的剔除

    3.光栅化

    1.向量--->点的矩阵

    4.像素处理

    1.输入:像素的位置,深度,贴图坐标,法线,切线,颜色等
    2.输出:每个像素的颜色,透明度
    3.即对每个像素着色的过程

Shader第一种:固定管线着⾊器

  • Properties属性
Shader "MyFixedShader/FixedShader001"
{
Properties
{
// //为常用的
_MyFloatValue("浮点数",Float) = 0.5 //Float --- 浮点数 --- >常用
_MyRangeValue("范围浮点数",Range(0,10)) = 5//Range --- 范围浮点数 ---> 常用
_MyVectorValue("四维数",Vector) = (1,2,2,1)//Vector --- 四维数 --- > 不常用
_MyColorValue("颜色",Color) = (0.1,0.5,1,1)//Color --- 颜色---> 常用
_My2DTextureValue("2D贴图",2D) = ""{}//2DTexture --- 2D贴图 ---> 常用
_MyNormalTextureValue("非2D贴图",Rect) = ""{}//Rect --- 非2D贴图 ---> 不常用
_MyCubeTextureValue("立方体贴图",Cube) = ""{}//CubeTexture --- 立方体贴图 ---> 不常用
/*
书写格式为 _属性名("显示在面板上的名称",属性类型) = 初始值
*/

}
}
  • Rander Setup
Shader "MyFixedShader/FixedShader002"
{
Properties
{
_MainColor("主颜色",Color) = (1,1,1,1)
_DiffuseColor("漫反射颜色",Color) = (1,0,0,1)
_AmbientColor("环境光颜色",Color) = (1,0,1,1)
_SeparateSpecularColor("高光颜色",Color) = (1,0,1,1)
_Shininess("光泽度",Range(0,1)) = 0.5
_EmissionColor("自发光颜色",Color) = (1,1,1,1)
}
//子着色器
SubShader
{
Pass
{
Color(0,0,1,1)//固定颜色
Color[_EmissionColor] //颜色变量赋值
Lighting On //打开顶点光照
Lighting Off //关闭顶点光照
SeparateSpecular On //高光 打开镜面反射
Cull Back //后面多边剔除
Cull Front //前面多边剔除
Cull Off //关闭多边剔除
ZTest (Less | Greater | LEqual | GEqual |Equal | NotEqual | Always)//深度测试
ZWrite On | Off 是否写入深度缓冲
SeparateSpecular On | Off 是否开启镜⾯面反射
Blend SrcAlpha OneMinusSrcAlpha 透明
Material
{
Diffuse(1,0,0,1) //漫反射固定颜色
Diffuse[_DiffuseColor] //漫反射调节颜色
Ambient[_AmbientColor] //环境光反射颜⾊
Specular[_SeparateSpecularColor]//高光颜⾊
Shininess[_Shininess]//光泽度
Emission[_EmissionColor]//自发光颜⾊
}

//Blend 混合
Blend SrcAlpha OneMinusSrcAlpha //Alpha混合
Blend One One //相加
Blend One OneMinusDstColor //⽐比较柔和的相加(SoftAdditive)
Blend DstColor Zero //乘法
Blend DstColor SrcColor //2倍乘法

//AlphaTest
AlphaTest Off //关闭Alpha测试
AlphaTest Greater //大于
AlphaTest GEqual //大于等于
AlphaTest Less //小于
AlphaTest LEqual //小于等于
AlphaTest Equal //等于
AlphaTest NotEqual //不等于
AlphaTest Always //渲染所有像素,等同于关闭Alpha测试—AlphaTest Off
AlphaTest Never //不渲染任何像素
AlphaTest Greater [_FloatValue]
}
}
}
  • TextureSetup
Shader "MyFixedShader/FixedShader006"
{
Properties
{
_FirstTexture("FirstTexture",2D)=""{}
_SecondTexture("SecondTexture",2D)=""{}
_LerpColor("LerpColor",Color)=(0,0,0,1)
}
//子着色器
SubShader
{
Pass
{
**//combine**
combine src1 * src2 //暗
combine src1 + src2 //亮
combine src1 - src2 //暗
Double \ Quad //双倍/四倍
//combine src1 lerp (src2) src3
/*
使⽤用源2的透明度通道值在源3和源1 中进⾏行行差值,注意差值是反向的:当透明度值是1是使⽤用
源1,透明度为0 时使⽤用源3
*/

SetTexture[_FirstTexture] //设置纹理
{
Combine Primary * Texture
}

SetTexture[_SecondTexture]
{
ConstantColor[_LerpColor]
Combine Previous lerp(constant) Texture
}

**//src**
Primary //是来自光照计算的颜⾊色或是当它绑定时的顶点颜⾊
Texture //是在SetTexture中被定义的 纹理理的颜⾊色
Previous //是上⼀一次 SetTexture的结果
Constant //是被ConstantColor定义的颜⾊色 例如:constantColor(1,1,1,1)

}
}
}
  • Tags
Shader "MyFixedShader/FixedShader003"
{
//子着色器
SubShader
{
Tags
{
//Queue 使用时需要关闭ZTest
//Queue级别
"Queue"="Overlay" //覆盖 4000
"Queue"="Background" //后台 1000
"Queue"="Geometry" //几何体(默认的) 2000
"Queue"="Transparent" //透明 3000
}
}
}