// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
Shader "Lesson/SimpleDiffuse"
{
Properties
{
_Diffuse("DiffuseColor",Color) = (1,1,1,1)
}
SubShader
{
Tags{"LightMode" = "ForwardBase"}
Pass
{
CGPROGRAM
#pragma vertex vert //定義頂點管線函數
#pragma fragment frag //定義片段管線函數
#include"Lighting.cginc"
fixed4 _Diffuse; //float 32位 , half 16bit , fixed 11bit
struct a2v //應用到頂點
{
float4 vertex : POSITION; //POSITION 語義 GPU在哪裏存取數據
float3 normal : NORMAL;
};
struct v2f //頂點到片段
{
float4 Pos : SV_POSITION; // SV_POSITION( 可以用POSITION來代替) SV_TARGET(可以用COLOR來代替) 都是DX11新出的語義
fixed3 color : COLOR;
};
v2f vert(a2v v)
{
v2f o;
o.Pos = mul(UNITY_MATRIX_MVP,v.vertex) ;//從模型空間變化到裁剪空間
float3 nDir =normalize( mul((float3x3)unity_ObjectToWorld,v.normal)); //頂點法線 從模型空間變換到世界空間
float3 lDir = normalize(_WorldSpaceLightPos0.xyz); //用於平行光
fixed diffuse = _LightColor0 * _Diffuse * saturate( dot(nDir,lDir)); //數值保證在0~1之間
fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz; //在unity引擎裏直接得到環境光
o.color = ambient + diffuse; //ambient 指的是環境光 顏色相加
return o;
}
fixed4 frag(v2f IN):SV_TARGET
{
return fixed4(IN.color,1.0);
}
ENDCG
}
}
}
Unity Shader學習筆記(二)簡單的漫反射
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.