1,渲染流水線
1,流水線

流水線.jpg
2,模板測試通常用于限制渲染的區(qū)域,也可用于渲染陰影、輪廓渲染等。
3,關閉混合操作后,通過測試的顏色會直接覆蓋顏色緩沖區(qū)中的值,適用于不透明的物體。
4,批處理思想:將多個小的DrawCall合并成一個大的DrawCall
2,UnityShader基礎
1,UnityShader 結構
基本結構
Shader "Shader名稱"
{
Properties
{//屬性
}
SubShader
{//顯卡A使用的子著色器
}
SubShader
{//顯卡B使用的子著色器
}
FallBack "VertexLit"
}
進一步
Shader "命名空間\Shader名稱"
{
Properties
{
//屬性
Name("display name",PropertyType) = DefaultValue
//eg. _Color("Main Color",Color) = (1,1,1,1)
}
SubShader //顯卡A使用的子著色器
{
[Tags{"標簽1"="值1" "標簽2"="值2"}] //可選
//eg. Tags{"Queue"="Transparent" "RenderType" = "Opaque" }
[RenderSetUp] //可選,狀態(tài)同樣可在Pass塊中聲明,如果在SubShader中聲明,則適用于所有Pass
//eg. Cull off
Pass
{
[Pass名稱] //可選
[Tags] //可選
[RenderSetUp] //可選,同上面RenderSetUp
CGPROGRAM
//編譯指令,如:
#pragma vertex funName1 //告訴Unity哪個函數(funName1)包含了頂點著色器的代碼
#pragma fragment funName2 //告訴Unity哪個函數(funName2)包含了片元著色器的代碼
//Cg代碼
ENDCG
}
}
SubShader
{//顯卡B使用的子著色器
}
FallBack "VertexLit"
}
(1)Property類型

20200907104855415.png
(2)SubShader中的標簽(Tags)

47f06600-e791-4154-bcee-dbf2d5f2f706.jpg
(3)渲染狀態(tài)設置(RenderSetUp)

66de7ac8-994c-47e6-bc7f-1f47e6219add.jpg
(4)Pass中的標簽

20200907155113146.png
2,Pass結構
Pass
{
[Pass名稱] //可選
[Tags] //可選
[RenderSetUp] //可選,同上面RenderSetUp
CGPROGRAM
//編譯指令,如:
#pragma vertex funName1 //告訴Unity哪個函數(funName1)包含了頂點著色器的代碼
#pragma fragment funName2 //告訴Unity哪個函數(funName2)包含了片元著色器的代碼
//Cg代碼
//定義結構體
struct 結構體名稱
{
類型1 名稱1:語義1
類型2 名稱2:語義2
...
}
//eg.
//struct a2v
//{
// float4 vertex:POSITION
// float3 normal:NORMAL
// ...
//}
// 通過語義POSITION告訴Unity將模型頂點坐標填充到v中,模型頂點數據來自于定義的結構體
// 通過語義SV_POSITION告訴Unity該函數輸出的是裁剪空間下的頂點坐標
float4 funName1(float4 v:POSITION):SV_POSITION
{
return mul(UNITY_MATRIX_MVP,v);
}
fixed4 funName2():SV_Target
{
return fixed4(1.0,1.0,1.0,1.0);
}
ENDCG
}
(1)給Pass起名后可在其他Shader中通過UsePass "Pass名稱"命令引用該Pass,但Pass名稱需大寫,如UsePase "MyShader\PASSNAME"
(2)Unity支持的語義:
從應用階段傳遞到頂點著色器:
POSITION、TANGENT、NARMAL、COLOR、TEXCOORDn
從頂點著色器傳遞到片元著色器:
SV_POSITION、COLOR0、COLOR1、TEXTURE0~TEXTURE7
輸出語義:
SV_Target
3,屬性
(1)屬性并不是必須在Properties中聲明才可使用的,在CG代碼中定義后即可使用
(2)在Properties中聲明屬性只是為了將其在材質面板中可視化
(3)在CG中定義屬性時,名稱和類型需與在Properties中聲明的保持一致,如聲明并使用一個名稱為“_Color”的屬性(Properties中類型為Color對應CG中類型為fixed4):
Shader "MyShader"
{
Properties
{
_Color("顏色",Color)=(1,1,1,1)
}
SubShader
{
Pass
{
CGPROGRAM
fixed4 _Color;
......
ENDCG
}
}
}
變量類型
3,標準光照模型
輸出=自發(fā)光+環(huán)境光+高光反射+漫反射
(1)漫反射