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/

相关文章
|
24天前
|
图形学 开发者
Unity Text字体颜色渐变
此代码实现文本颜色的垂直渐变效果。通过定义起始和结束颜色,获取像素位置信息(UV坐标),根据渐变方向计算颜色插值,并应用到每个像素上。具体步骤包括:1) 定义颜色范围;2) 获取UV坐标;3) 计算线性插值;4) 应用颜色。脚本挂载在Text组件上,可调节顶部和底部颜色实现渐变效果。
|
7月前
|
缓存 图形学
Unity3D学习笔记12——渲染纹理
Unity3D学习笔记12——渲染纹理
62 2
|
7月前
|
API C# 图形学
Unity3D学习笔记9——加载纹理
Unity3D学习笔记9——加载纹理
70 2
|
6月前
|
图形学 开发者
【独家揭秘】Unity游戏开发秘籍:从基础到进阶,掌握材质与纹理的艺术,打造超现实游戏视效的全过程剖析——案例教你如何让每一面墙都会“说话”
【8月更文挑战第31天】Unity 是全球领先的跨平台游戏开发引擎,以其高效性能和丰富的工具集著称,尤其在提升游戏视觉效果方面表现突出。本文通过具体案例分析,介绍如何利用 Unity 中的材质与纹理技术打造逼真且具艺术感的游戏世界。材质定义物体表面属性,如颜色、光滑度等;纹理则用于模拟真实细节。结合使用两者可显著增强场景真实感。以 FPS 游戏为例,通过调整材质参数和编写脚本动态改变属性,可实现自然视觉效果。此外,Unity 还提供了多种高级技术和优化方法供开发者探索。
92 0
|
7月前
|
测试技术 C# 图形学
Unity3D学习笔记10——纹理数组
Unity3D学习笔记10——纹理数组
77 0
|
7月前
|
存储 算法 C#
Unity3D学习笔记2——绘制一个带纹理的面
Unity3D学习笔记2——绘制一个带纹理的面
51 0
|
7月前
|
前端开发 图形学
小功能⭐️3DCanvas交互方法、Unity自动调整文本框大小、改变文字大小和颜色
小功能⭐️3DCanvas交互方法、Unity自动调整文本框大小、改变文字大小和颜色
|
9月前
|
存储 图形学
【unity小技巧】unity中导入下载的3D模型及albedo/baseColor、normal 、AO/Occlus、metallic、roughness贴图纹理设置
【unity小技巧】unity中导入下载的3D模型及albedo/baseColor、normal 、AO/Occlus、metallic、roughness贴图纹理设置
285 0
|
图形学
【Unity3D Shader】学习笔记-纹理采样②
前言 上一篇对同一纹理进行多次采样混合,本篇则是通过不同的纹理采样进行混合产生一些效果。 一、简单贴花 贴花简单来说就是在原贴图上面贴上细节贴图,就像墙面上的喷绘一样。下面这个只是最简单的例子,也就是只能在一张图(一个模型)上面贴其他细节。
324 0
【Unity3D Shader】学习笔记-纹理采样②
|
图形学
【Unity3D Shader】学习笔记-纹理采样①
前言 纹理采样属于在片段着色器中进行,通过提供的贴图和uv坐标使用tex2D进行采样。本篇主要介绍对同一纹理多次采样然后进行混合来获得不同的效果。 [声明:本笔记系列文章的图片资源都源自百度图片搜索,如有问题联系我] 一、简单重影 对同一纹理进行两次采样,采样时的UV两次坐标不一样,然后将采样的结果进行取平均得到最终的结果。
596 0
【Unity3D Shader】学习笔记-纹理采样①