【Unity-Shader】Unity60个内置Shader代码浅析(一)

本文介绍了Unity内置的60个Shader的第一部分,包括Alpha-Bumped Diffuse、Alpha-Bumped Specular等10个Shader的代码分析。作者强调在游戏开发前提升自身技能的重要性,认为自学能打下扎实的基础,有利于团队合作和专业发展。
摘要由CSDN通过智能技术生成

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
        
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值