您的位置:首页 > 移动开发 > Unity3D

Unity Shader学习笔记(二)简单的漫反射

2016-12-21 11:19 459 查看
// 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
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity3d shader