Shader之学习笔记一

//在inspector的shader列表中显示名字
Shader "Custom/shader_1" {
	//shader的属性 也就是当前shader可操作的属性 和C++中类的属性一样  这里是通过关键字Properties来定义相关的属性的
	Properties {
		_Color ("Color", Color) = (1,1,1,1)//颜色属性,在可视化界面中是一个颜色面板;Color:显示在UI界面上的,用户可见,_Color:颜色变量,程序使用;
		_MainTex ("Albedo (RGB)", 2D) = "white" {}//texture 在UI界面中选择的贴图,white:默认颜色是白色,可以换成其他(black,黑色);
		_Glossiness ("Smoothness", Range(0,1)) = 0.5//光滑系数,数值越大越光滑,范围是从 0 到 1 值为1的时候,形成了一个光点
		_Metallic ("Metallic", Range(0,1)) = 0.0//金属光泽度,数值越大光泽度越强,范围是从 0 到 1 
	}
	//子着色器
	SubShader {
		//渲染类型 Opaque:不透明
		Tags { "RenderType"="Opaque" }
		//它是Level of Detail的缩写,在这里例子里我们指定了其为200(其实这是Unity的内建Diffuse着色器的设定值)。
		//这个数值决定了我们能用什么样的 Shader。在Unity的Quality Settings中我们可以设定允许的最大LOD,当设定的LOD小于SubShader所指定的LOD时,
		//这个SubShader将不可用。Unity 内建Shader定义了一组LOD的数值,我们在实现自己的Shader的时候可以将其作为参考来设定自己的LOD数值,这样在之后调整根据设备图形性能 
		//来调整画质时可以进行比较精确的控制。
		LOD 200
		//这是一个开始标记,表明从这里开始是一段CG程序
		CGPROGRAM
		// Physically based Standard lighting model, and enable shadows on all light types
		//surface – 声明的是一个表面着色器 surf函数
		#pragma surface surf Standard fullforwardshadows

		// Use shader model 3.0 target, to get nicer looking lighting
		#pragma target 3.0
		//sampler2D:贴图类型  由于这这里是在CG程序里面 要访问Properties中定义的变量 需要再次声明 并且名字要一样
		sampler2D _MainTex;

		struct Input {
			//float2:float可以跟1个2到4的数字,表示打包在一起的同类型的2到4个数
			//如果你对3D开发稍有耳闻的话,一定不会对uv这两个字母感到陌生。UV mapping的作用是将一个2D贴图上的点按照一定规则映射到3D模型上,
			//是3D渲染中最常见的一种顶点处理手段。在CG程序中,我们有这样的约定,在一个贴图变量(在我们例子中是_MainTex)之前加上uv两个字母,
			//就代表提取它的uv值(其实就是两个代表贴图上点的二维坐标 )。我们之后就可以在surf程序中直接通过访问uv_MainTex来取得这张贴图当前需要计算的点的坐标值了。
			float2 uv_MainTex;
		};
	 	//half:半精度浮点数
		half _Glossiness;
		half _Metallic;
		fixed4 _Color;
		//只能够有2个参数 第一个参数是Input(输入)结构,inout输出结构
		void surf (Input IN, inout SurfaceOutputStandard o) {
			// Albedo comes from a texture tinted by color
			//tex2D:CG程序中用来在一张贴图中对一个点进行采样的方法,返回一个float4
			fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
			o.Albedo = c.rgb;
			// Metallic and smoothness come from slider variables
			//金属光泽度
			o.Metallic = _Metallic;
			//平滑
			o.Smoothness = _Glossiness;
			//透明度
			o.Alpha = c.a;
		}
		//表明CG程序到此结束。
		ENDCG
	} 
	//在没有执行以上shader的时候 会默认执行回滚
	FallBack "Diffuse"
}

//struct SurfaceOutput {
//half3 Albedo; //像素的颜色
//half3 Normal; //像素的法向值
//half3 Emission; //像素的发散颜色
//half Specular; //像素的镜面高光
//half Gloss; //像素的发光强度
//half Alpha; //像素的透明度
//};

发布了70 篇原创文章 · 获赞 68 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/Rose_Girls/article/details/51263188