// 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学习笔记(二)简单的漫反射
最新推荐文章于 2023-08-02 14:59:31 发布