渲染管线
有一个物体需要渲染,首先是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
}
}
}
}