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

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

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"
    }

img_8d8df14f7fbaeb0787a8fc7178b16f94.jpe
最终效果

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

相关文章
|
9天前
|
存储 图形学
【unity小技巧】unity中导入下载的3D模型及albedo/baseColor、normal 、AO/Occlus、metallic、roughness贴图纹理设置
【unity小技巧】unity中导入下载的3D模型及albedo/baseColor、normal 、AO/Occlus、metallic、roughness贴图纹理设置
9 0
|
图形学
【Unity3D Shader】学习笔记-纹理采样②
前言 上一篇对同一纹理进行多次采样混合,本篇则是通过不同的纹理采样进行混合产生一些效果。 一、简单贴花 贴花简单来说就是在原贴图上面贴上细节贴图,就像墙面上的喷绘一样。下面这个只是最简单的例子,也就是只能在一张图(一个模型)上面贴其他细节。
243 0
【Unity3D Shader】学习笔记-纹理采样②
|
图形学
【Unity3D Shader】学习笔记-纹理采样①
前言 纹理采样属于在片段着色器中进行,通过提供的贴图和uv坐标使用tex2D进行采样。本篇主要介绍对同一纹理多次采样然后进行混合来获得不同的效果。 [声明:本笔记系列文章的图片资源都源自百度图片搜索,如有问题联系我] 一、简单重影 对同一纹理进行两次采样,采样时的UV两次坐标不一样,然后将采样的结果进行取平均得到最终的结果。
505 0
【Unity3D Shader】学习笔记-纹理采样①
|
图形学 异构计算
Unity 之 纹理类型导入设置和压缩格式介绍
你知道纹理导入正确设置和各平台压缩格式吗?本文教你如何将纹理资源导入到Unity并为其设置为对应平台需要使用的压缩格式,一起来看看吧~
843 0
Unity 之 纹理类型导入设置和压缩格式介绍
|
图形学 机器人
带你读《Unity游戏开发(原书第3版)》之三:模型、材质和纹理
本书主要介绍Unity2018的使用和游戏开发流程中涉及的各种知识。每一章的结构特别清晰,先综述该章要介绍的内容,然后一步步深入讲解,中间穿插着很多动手做的实践操作,可以让读者加深对某个概念、方法的理解,每章的最后还有一个小测验和一个稍微大一点的实践练习,用于巩固该章的学习内容。
|
图形学
【Unity Shader】(八) ------ 高级纹理之立方体纹理及光线反射、折射的实现
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37027464/article/details/83511904 笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题。
2164 0
|
存储 图形学
【Unity Shader】(四) ------ 纹理之法线纹理、单张纹理及遮罩纹理的实现
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题。 【Unity Shader】(三) ------ 光照模型原理及漫反射和高光反射的实现 【Unity Shader】(五) ------ 透明效果之半透明效果的实现及原理   在游戏中,我们除了能看到游戏物体的形体轮廓,还能看到物体的一些具体外观,包括颜色,凹凸等。
1827 0
|
编解码 测试技术 Android开发
|
存储 图形学
【Aladdin Unity3D Shader编程】之四 贴图纹理
关于纹理贴图介绍 纹理坐标也叫UV坐标,UV坐标都是0~1,并不是我们所理解的像素坐标,相当于是一个百分比。 编写shader映射纹理 将纹理的颜色取代漫反射的颜色 Shader "AladdinShader/11 Single Texture Shader" ...
1738 0