Unity Shader特效:模型溶解、燃烧

Shader 专栏收录该内容
11 篇文章 2 订阅

 

本文写于2017-6-2,原创,转载请注明。

以下为正文

………………………………………………………………………………………………………………………………

半年前看的一篇讲溶解特效的文章,然而只讲思路,没有源文件,最近挺流行这种特效的,决定尝试一下。

最后结合网络上一些不成熟的例子和文章的思路,写了一个表面着色器Shader,效果挺不错的,达到了要求,这里记录一下。
先上效果图:


面板可输入各类数值,注意给一个噪声贴图(这里是用Photoshop分层云彩滤镜生成):
 

 

以下是Shader源码:

Shader "Custom/MyDissolveSurface" {
    Properties {
        _Color ("颜色", Color) = (1,1,1,1)
        _MainTex ("主贴图 (RGB)", 2D) = "white" {}
        _Glossiness ("平滑度", Range(0,1)) = 0.5
        _Metallic ("金属性", Range(0,1)) = 0.0
        _NoiseTex ("噪声贴图 (R)",2D) = "white"{}  
        _EdgeWidth("边缘宽度",Range(0,0.5)) = 0.1  
        _EdgeColor("边缘颜色",Color) =  (1,1,1,1)  
        _EdgeThresholdValue ("硬边缘阈值(0为不使用)",Range(0,1)) = 0.5  
        _DissolvePercentage ("溶解百分比",Range(0,1)) = 0  
    }

    SubShader {
            Tags { "RenderType"="Opaque" }
            LOD 200
            CGPROGRAM
            // Physically based Standard lighting model, and enable shadows on all light types
            //原编译指令
            //#pragma surface surf Standard fullforwardshadows
            //增加addshadow以获得正确的阴影
            #pragma surface surf Standard fullforwardshadows addshadow
            // Use shader model 3.0 target, to get nicer looking lighting
            #pragma target 3.0
            sampler2D _MainTex;
            sampler2D _NoiseTex;  
            float _EdgeWidth;  
            float4 _EdgeColor;  
            float _EdgeThresholdValue;  
            float _DissolvePercentage;

            struct Input {
                float2 uv_MainTex;
                float3 worldPos;
            };

            half _Glossiness;
            half _Metallic;
            fixed4 _Color;

            void surf (Input IN, inout SurfaceOutputStandard o) {

                // Albedo comes from a texture tinted by color
                fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
                o.Albedo = c.rgb;
                // Metallic and smoothness come from slider variables
                o.Metallic = _Metallic;
                o.Smoothness = _Glossiness;
                o.Alpha = c.a;
                float DissolveFactor = saturate(_DissolvePercentage);  
                //使用固定坐标
                // float noiseValue = tex2D(_NoiseTex,IN.uv_MainTex).r;   
                //使用世界坐标
                float noiseValue = tex2D(_NoiseTex,IN.worldPos.rg).r;

                //如果该值对应噪声图的值更大,则抛弃

                if(noiseValue <= DissolveFactor)  
                {  
                    discard;  
                }   
                float4 texColor = tex2D(_MainTex,IN.uv_MainTex);  
                float EdgeFactor = saturate((noiseValue - DissolveFactor)/(_EdgeWidth*DissolveFactor));  
                float4 BlendColor = texColor * _EdgeColor;  

                if(_EdgeThresholdValue>0){
                //不使用渐变(硬边缘)
                float HardEdgeFactor=EdgeFactor;
                if(HardEdgeFactor>_EdgeThresholdValue){
                    HardEdgeFactor=1;
                    o.Emission =0;  
                }else{ 
                    HardEdgeFactor=0;
                    o.Emission =_EdgeColor; 
                }
                    o.Albedo = lerp(texColor,BlendColor,1-EdgeFactor);  
                }else{
                    o.Emission =0; 
                    //使用渐变(软边缘)
                if(_EdgeThresholdValue>=1){
                    o.Albedo = BlendColor; 
                    o.Alpha=0;
                }else{
                    o.Albedo = lerp(texColor,BlendColor,1 - EdgeFactor);  
                }
            }
        }
    ENDCG
    }
    FallBack "Diffuse"
}

参考文章:
 《Trifox》中的遮挡处理和溶解着色器技术(上)
http://gad.qq.com/article/detail/7190982
《Trifox》中的遮挡处理和溶解着色器技术(下)
http://gad.qq.com/article/detail/7190975
 Shader溶解特效
http://blog.csdn.net/xiaoge132/article/details/51657246

 

  • 3
    点赞
  • 0
    评论
  • 31
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
<span style="font-size:18px;"> <p class="MsoNormal"> <span>大智和你一起学习</span>ShaderGraph,在实战中探索。 </p> <p class="MsoNormal"> <b>课程内容</b><b></b> </p> <p class="MsoNormal"> ShaderGraph的基本使用 </p> <p class="MsoNormal"> 丰富的实战案例: </p> <img alt="" src="https://img-bss.csdn.net/201909270201307593.png" /></span> <p style="font-size:17px;color:rgba(0,0,0,.56);"> <br /> </p> <p class="MsoNormal" style="margin-left:36pt;text-indent:-18pt;"> <!--[if !supportLists]-->· <!--[endif]-->全息效果 </p> <p class="MsoNormal" style="margin-left:36pt;text-indent:-18pt;"> <!--[if !supportLists]-->· <!--[endif]-->边缘光效果 </p> <p class="MsoNormal" style="margin-left:36pt;text-indent:-18pt;"> <!--[if !supportLists]-->· <!--[endif]-->溶解效果 </p> <p class="MsoNormal" style="margin-left:36pt;text-indent:-18pt;"> <!--[if !supportLists]-->· <!--[endif]-->积雪效果 </p> <p class="MsoNormal" style="margin-left:36pt;text-indent:-18pt;"> <!--[if !supportLists]-->· <!--[endif]-->扭曲效果 </p> <p class="MsoNormal" style="margin-left:36pt;text-indent:-18pt;"> <!--[if !supportLists]-->· <!--[endif]-->干扰效果 </p> <p class="MsoNormal" style="margin-left:36pt;text-indent:-18pt;"> <!--[if !supportLists]-->· <!--[endif]-->流光效果 </p> <p class="MsoNormal" style="margin-left:36pt;text-indent:-18pt;"> <!--[if !supportLists]-->· <!--[endif]-->石化效果 </p> <p class="MsoNormal" style="margin-left:36pt;text-indent:-18pt;"> <!--[if !supportLists]-->· <!--[endif]-->顶点动画:跳动的小球 </p> <p class="MsoNormal" style="margin-left:36pt;text-indent:-18pt;"> <!--[if !supportLists]-->· <!--[endif]-->游动的龙鱼 </p> <p class="MsoNormal" style="margin-left:36pt;text-indent:-18pt;"> <!--[if !supportLists]-->· <!--[endif]-->小草摇曳效果 </p> <p class="MsoNormal" style="margin-left:36pt;text-indent:-18pt;"> <!--[if !supportLists]-->· <!--[endif]-->海面效果 </p> <p class="MsoNormal" style="margin-left:36pt;text-indent:-18pt;"> <!--[if !supportLists]-->· <!--[endif]-->水晶效果 </p> <p class="MsoNormal" style="margin-left:36pt;text-indent:-18pt;"> <!--[if !supportLists]-->· <!--[endif]-->裂缝的冰面效果 </p> <p class="MsoNormal" style="margin-left:36pt;text-indent:-18pt;"> <!--[if !supportLists]-->· <!--[endif]-->自定义节点的用法及改造裂缝的冰块 </p> <p class="MsoNormal" style="margin-left:36pt;text-indent:-18pt;"> <!--[if !supportLists]-->· <!--[endif]-->云海效果 </p> <p class="MsoNormal" style="margin-left:36pt;text-indent:-18pt;"> <!--[if !supportLists]-->· <!--[endif]-->雨滴涟漪效果 </p> <p class="MsoNormal" style="margin-left:36pt;text-indent:-18pt;"> <!--[if !supportLists]-->· <!--[endif]-->卡通渲染 </p> <p class="MsoNormal"> <b>所需前置知识</b><b></b> </p> <p class="MsoNormal"> <span>安装好</span>Unity即可 </p> <br />
<p><span style="color: #666666;"><span style="font-size: 14px;">本课程讲了Vue3+Vue2入门基础与实战,其中还重点讲解了ES6、TypeScript这些基础知识,实战是</span></span><span style="color: #666666;"><span style="font-size: 14px;">价值5000元的真实企业级项目---仿京东电商网站,同时项目代码全部赠送</span></span><span style="color: #666666;"><span style="font-size: 14px;">,还赠送前后端架构模板,工作中直接使用。</span></span></p> <p> </p> <p><span style="color: #666666; font-size: 14px; background-color: #ffffff;">VUE是目前热门的前端框架之一,就业薪资很高,本课程教您如何快速学会VUE并应用到实战,教你如何解决内存泄漏,常用UI库的使用,自己封装组件,正式上线白屏问题,性能优化等。对正在工作当中或打算学习VUE高薪就业的你来说,那么这门课程便是你手中的葵花宝典。</span><br /><br /><span style="color: #666666; font-size: 14px; background-color: #ffffff;">学习技巧:学习当中不要只看,一定要多敲代码,如果碰到某一个知识点不是很明白,不要钻牛角尖,千万不要因为一个点,放弃整个森林,接着往下学,硬着头皮开发项目只要能亲自开发一个完整的项目,你会发现不明白的地方自然而然就明白了,项目做出来就真正的学会了。</span><br /><br /><span style="color: #666666; font-size: 14px; background-color: #ffffff;">此vue课程以面试和实战为基础进行讲解,每个知识点都会让你知道在实际项目开发中如何使用,学习后,可以开发大型项目,增强逻辑思维,至少让你拥有3年以上开发经验的实力!</span><br /><br /><span style="color: #666666; font-size: 14px; background-color: #ffffff;">代码和ppt均可下载!</span><br /><br /></p> <p><span style="color: #666666; font-size: 14px; background-color: #ffffff;">免费提供《企业级完整实战项目接口文档》,绝对可用。</span></p> <p><img src="https://img-bss.csdn.net/202001090736032736.png" alt="" /><img src="https://img-bss.csdn.net/202001090736166806.png" alt="" /><img src="https://img-bss.csdn.net/202001090736273968.png" alt="" /></p> <p> </p> <p> </p>
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值