Unity shader教程-第一课:写shader和应用shader的流程

题外话:

半年多未更新博客,因为与几个朋友在合伙筹划个网站(98jy.net)。现在终于得空回来写点东西,几个系列的首发可能都得先贡献在别处。不过文章版权还是我的,依然可以放在这里,供csdn的朋友方便查看。


本文原帖地址:http://98jy.net/article/16


这是我们Unity shader(着色器)教程的第一课,在这节课中,你会学到怎么样来用程序来编写一个在Unity中能使用的着色器:漫反射着色器。这节课的内容主要让我们熟悉创建shader和应用shader的流程。

准备工作:

  1. 安装Unity版本4.6以上
  2. 创建一个新的工程
  3. 菜单GameObject | 3D Object | Plane创建出一个平面,作为我们的地面
  4. 菜单GameObject | 3D Object | Sphere创建出球来,反复多次创建多个
注意:
1. 创建地面后选中该物体(Hierarchy面板中),把相应的transform的position部分全部清成0.
2. 所有的sphere在创建后都跟上面的地面物体一样,position部分清零。然后把球依次拖开一定距离,并放置到地面上面,可以看到整个球的部分为止。


上面的工作做完,我们得到这样的画面:



正式工作

  • 在编辑器的Project面板上,右键点击该面板手柄下面的Create,弹出的菜单中选择Shader
  • 把创建出的shader文件的名字改成myDiffuse
  • 双击myDiffuse这个文件,让MonoDevelop运行并且打开它,我们可以编辑
  • 打开的'myDiffuse'文件中,全部选中所有的代码,按delete清空
  • 然后拷贝我们下面的代码段到该文件内容中
Shader "CookbookShaders/BasicDiffuse"
{
	Properties
	{
		_MainTex ("Base (RGB)", 2D) = "white" {}
	}
	
	SubShader
	{
		Tags { "RenderType"="Opaque" }
		LOD 200
		
		CGPROGRAM
		#pragma surface surf Lambert
		
		sampler2D _MainTex;
		
		struct Input
		{
			float2 uv_MainTex;
		};
		
		void surf (Input IN, inout SurfaceOutput o)
		{
			half4 c = tex2D (_MainTex, IN.uv_MainTex);
			o.Albedo = c.rgb;
			o.Alpha = c.a;
		}
		ENDCG
	}
	FallBack "Diffuse"
}
  • 然后保存我们的这个文件。回到Unity编辑器中
  • 通过Project面板上的Create,创建出一个Material出来,重命名为myMaterial
  • 选中myMaterial。对应的Inspector面板上,shader栏位点开菜单,下拉条中选中'myDiffuse'
  • 把myMaterial这个material拖到Hierarchy中的某个物体,可以是sphere,也可以是plane上面
  • 选中Hierarchy中的我们刚才拖入myMaterial的物体,在对应的Inspector面板上确保看到它的'Mesh Renderer'部分的'Use Light Probes'下面部分是'myMaterial'


这个过程就是一个创建新的shader,并且通过material把我们的shader应用到物体上的步骤。以后每个新的shader,都可以通过类似的步骤来使用到场景中的物体上。


上面的shader应用到物体上以后,我们可以发现物体的表征跟原来是一模一样的。这个原因是因为我们写的这个第一个shader的功能,跟unity默认的shader是一模一样的。也就是说,虽然我们在创建物体的时候,我们并没有给它相应指定相关的shader,但是unity会保证它带上一个默认的。在3d应用中,每个物体都必须有一个相应的shader来完成最后的渲染(绘制物体的术语)。你没有去刻意选择的时候,3d引擎本身会帮助你选择一个默认的而已。


但是,同时我们也注意到了,shader只有通过material(材质)作为媒介才能应用到物体上,而不能直接绑定到物体。这也就是为什么我们在创建shader以后必须要创建一个material,然后从material中选择我们的shader,再把material绑到物体上的原因。所以,对于物体来说,它具备材质属性,而shader只是材质中的一个组件或者部分。这个大家需要先弄清楚。


这就是我们第一节课的内容,熟悉一下整个shader制作和应用的流程。下面的课程,我们会在这个shader的基础上加入元素,能让物体改变色彩和一些更丰富的功能。

你可能感兴趣的:(Unity3D)