Sunset虽然还没有正式开始工作,但已经有一点小忙了,总是感觉有好多好多不得不做的事,即使身心都有点疲倦。这次带来的是Unity内置的60个Shader代码的浅析的第一部分。往后会像制作ARPG那样陆续更新。
今天,在蛮牛群里,和几位同为学习者的群友进行了一番讨论,问题是,在游戏公司实习进行学习好还是自学好。个人认为,如果想要从事游戏开发相关方面的职业,首先提升自身能力以达到某一标准水平肯定是必需的。我相信,现今的许多怀有游戏梦想的大学生都会在不同时间以不同方式埋头苦干想方设法为了这个目标而努力。且不论哪一种方式更快,我认为:自学是人类自身能力的一种体现。从结果论出发,自学并不是为了讨论能够学的有多快,而是为了学的有多扎实,脑袋里面拥有多少的知识量。在进公司实习前,尽可能做到知识的完备,具有一定的项目经验,达到这个条件后进公司只需要进行团队之间的磨合和注意一些平时个人进行开发学习过程中可能没注意到的更加专业化的规定或者细节,远比进了公司之后不仅需要对自身能力进行提升,还需要跟团队磨合来得轻松。当然,每个人有每个人的想法,求同存异嘛。毕竟人与人之间所面对的环境与条件是不太一样,在某些地区,可能游戏公司较多,人才的需求度比较大,只需要拥有基础的能力就能正式入职或者进入实习,但对于sunset而言,由于游戏公司量小,规模也并非很大,所以往往精中求精,所以面试要求也比其他地区苛刻许多。sunset个人的想法是,完善自身能力后在进入公司实习,不仅是对自己负责,也是对团队负责,更是对能够给予自己机会进入这个行业的公司负责。所以,不管怎么样,先提升自身能力总是不错的选择。好了,废话有点多,接下来开始正题:
10个shader的名称:
(1)Alpha-Bumped Diffuse
(2)Alpha-Bumped Specular
(3)Alpha-Diffuse
(4)Alpha-Glossy
(5)Alpha-Parallax
(6)Alpha-ParallaxSpec
(7)AlphaTest-Bumped
(8)AlphaTest-BumpSpec
(9)AlphaTest-Diffuse
(10)AlphaTest-GLossy
(1)
Shader "Custom/Shader1"
{
//着色器的属性输入的声明,包含着主颜色,主纹理,法线贴图
Properties
{
_Color("Main Color",Color) = (1,1,1,1)
_MainTex("MainTexure Base(RGB) Trans(A)",2D) = "white"{}
_BumpMap("Normal Map",2D) = "bump"{}
}
//一个子着色器,是一个表面着色器
SubShader
{
Tags //子着色器标签
{
"Queue" = "Transparent" //队列标签,决定该着色器的渲染顺序
"IgnoreProjector" = "True" //忽视阴影为TRUE
"RenderType" = "Transparent" //渲染类型为“透明”
}
LOD 300 //LEVEL OF DETAIL 为300
CGPROGRAM //CG程序段开始标志,下一句是表明是表面着色器,采用兰姆珀特光照模型,采用透明混合模式
#pragma surface surf Lambert alpha
sampler2D _MainTex; //根据主属性中的变量声明,在CG程序段中也要有相应的变量,这个为主纹理
sampler2D _BumpMap; //法线贴图
fixed4 _Color; //主颜色
struct Input //输入结构
{
float2 uv_MainTex; //主纹理
float2 uv_BumpMap; //法线贴图
};
void surf(Input IN, inout SurfaceOutput o) //Surface Function
{
fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color; //根据输入的主纹理和主颜色计算输出颜色
o.Albedo = c.rgb; //输出结构的反射率为输出颜色的RGB
o.Alpha = c.a; //输出结构的透明值为输出颜色的透明值
o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap)); //根据主属性中输入的法线贴图计算输出结构的法线
}
ENDCG //CG程序段结束的标志
}
FallBack "Transparent/Diffuse" //备用,使用漫反射着色器(另一个着色器)
}
(2)
Shader "Custom/Shader2"
{
//着色器主属性变量的声明,包含:主颜色,高光颜色,光泽度,主纹理,法线贴图
Properties
{
_Color("Main Color", Color) = (1,1,1,1)
_SpecColor("Specular Color", Color) = (1,1,1,1)
_Shininess("Shininess", Range(0, 1)) = 0.078125
_MainTex("Base(RGB Trans(A))", 2D) = "white"{}
_BumpMap("Normal Map", 2D) = "bump"{}
}
//子着色器,是表面着色器
SubShader
{
//子着色器标签:透明渲染队列, 忽视阴影为真, 渲染类型为透明
Tags
{
"Queue" = "Transparent"
"IgnoreProjector" = "True"
"RenderType" = "Transparent"
}
//LEVEL OF DETAIL 为400
LOD 400
//CG程序段开始得标志,表面着色器采用Blinn-Phong光照模型, 采用Alpha混合方式
CGPROGRAM