Unity3dShader_凹凸纹理显示+边缘颜色与强度

shader知识:http://imgtec.eetrend.com/blogs/%E5%A2%A8%E5%8D%8A%E6%88%90%E9%9C%9C

    //-----------------------------------------------【Shader说明】----------------------------------------------
    //  Shader功能:   凹凸纹理显示+自选边缘颜色和强度(创建material到游戏对象,赋值此shader到material即可看到效果)
    //     使用语言:   Shaderlab
    //---------------------------------------------------------------------------------------------------------------------
    Shader "My/NormalRimShader"
    {
        //-------------------------------【属性】-----------------------------------------
        Properties
        {
            _MainTex ("【纹理】Texture", 2D) = "white" {}
            _BumpMap ("【凹凸纹理】Bumpmap", 2D) = "bump" {}
            _RimColor ("【边缘颜色】Rim Color", Color) = (0.17,0.36,0.81,0.0)
            _RimPower ("【边缘颜色强度】Rim Power", Range(0.6,9.0)) = 1.0
        }
 
        //----------------------------【开始一个子着色器】---------------------------
        SubShader
        {
            //RenderType渲染类型为Opaque,不透明
            Tags { "RenderType" = "Opaque" }
 
        //-------------------开始CG着色器编程语言段-----------------
        CGPROGRAM
 
        //指令,表面着色器,名称,使用兰伯特光照模式
        #pragma surface surf Lambert
 
        //输入结构体
        struct Input
        {
            float2 uv_MainTex;         //纹理贴图
            float2 uv_BumpMap;      //法线贴图
            float3 viewDir;              //观察方向
        };
 
        //变量声明
        sampler2D _MainTex;         //主纹理
        sampler2D _BumpMap;      //凹凸纹理
        float4 _RimColor;              //边缘颜色
        float _RimPower;              //边缘颜色强度
 
        //表面着色函数的编写
        void surf (Input IN, inout SurfaceOutput o)
        {
            //表面反射颜色为纹理颜色
            o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
            //表面法线为凹凸纹理的颜色
            o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));
            //边缘颜色
            half rim = 1.0 - saturate(dot (normalize(IN.viewDir), o.Normal));
            //边缘颜色强度
            o.Emission = _RimColor.rgb * pow (rim, _RimPower);
        }
 
        //-------------------结束CG着色器编程语言段------------------
        ENDCG
        }
 
        //“备胎”为普通漫反射
        Fallback "Diffuse"
    }

最终效果

注明:学习的案例参考unity3D学习网
链接:http://www.unity.5helpyou.com/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ## 2015.06.05 - [开源利弊浅谈 - 张超耀](移动组周技术分享总结#开源利弊浅谈---张超耀) -...
    XcodeYang阅读 1,508评论 1 3
  • ¥关闭¥ 【雷霆战机】 〖http://pan.baidu.com/s/1kVstszX〗 《解压源码后直接用AI...
    小菜c阅读 9,613评论 0 19
  • @synthesize和@dynamic分别有什么作用?@property有两个对应的词,一个是 @synthes...
    笔笔请求阅读 533评论 0 1
  • 阿甘正传,一部IP电影,因为我的印象里有一本叫做《阿甘正传》的书,我只是知道,并没有看过。今天看了电影,也就想写一...
    苍峰冷冽阅读 1,580评论 1 5
  • 感想很多,但却如珍珠一样散落,找不到一根线穿起来,姑且先记录下来。 1.关于孩哥。这估计是我看过的武侠片...
    秦德喜阅读 4,794评论 2 1