unity噪声消融效果Shader实现

简介: 在 Unity 中实现噪声消融效果,利用噪声纹理和透明度裁剪技术。噪声纹理(如 Perlin 噪声)为物体表面提供随机参考值,透明度裁剪通过设置阈值控制显示与消失。具体步骤包括引入噪声纹理、设置阈值和边缘颜色,使用自定义着色器代码实现物体部分消失的视觉效果。通过调整材质球和噪声贴图,可优化最终呈现。

在 Unity 中实现噪声消融效果,主要是利用噪声纹理和透明度裁剪技术,通过噪声值来控制物体表面的显示与消失,从而达到消融的视觉效果。以下详细介绍其原理及相关实现要点:
基本概念
噪声纹理:噪声纹理是一种包含随机噪声信息的纹理,常见的有 Perlin 噪声、Simplex 噪声等。噪声纹理中的每个像素都有一个噪声值,这些值在一定范围内随机分布。在消融效果中,噪声纹理用于为物体表面的每个点提供一个随机的参考值,以此决定该点是否应该被消融。
透明度裁剪:透明度裁剪是一种渲染技术,通过设置一个透明度阈值,当物体表面某点的透明度低于该阈值时,该点将不会被渲染,从而实现物体部分消失的效果。
实现原理步骤

  1. 引入噪声纹理
    首先,需要在着色器中引入噪声纹理。可以使用 Unity 自带的噪声纹理资源,或者通过代码生成自定义的噪声纹理。在着色器代码中,使用 sampler2D 类型的变量来采样噪声纹理。

shader代码如下:

Shader "Kaima/Dissolve/EdgeColor"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _NoiseTex("Noise", 2D) = "white" {}
        _Threshold("Threshold", Range(0.0, 1.0)) = 0.5
        _EdgeLength("Edge Length", Range(0.0, 0.2)) = 0.1
        _EdgeColor("Edge Color", Color) = (1,1,1,1)
    }
    SubShader
    {
        Tags { "Queue"="Geometry" "RenderType"="Opaque" }

        Pass
        {
            Cull Off //要渲染背面保证效果正确

            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float4 vertex : SV_POSITION;
                float2 uvMainTex : TEXCOORD0;
                float2 uvNoiseTex : TEXCOORD1;
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;
            sampler2D _NoiseTex;
            float4 _NoiseTex_ST;
            float _Threshold;
            float _EdgeLength;
            fixed4 _EdgeColor;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uvMainTex = TRANSFORM_TEX(v.uv, _MainTex);
                o.uvNoiseTex = TRANSFORM_TEX(v.uv, _NoiseTex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                //镂空
                fixed cutout = tex2D(_NoiseTex, i.uvNoiseTex).r;
                clip(cutout - _Threshold);

                //边缘颜色
                if(cutout - _Threshold < _EdgeLength)
                    return _EdgeColor;

                fixed4 col = tex2D(_MainTex, i.uvMainTex);
                return col;
            }
            ENDCG
        }
    }
}

新建材质球如下图
image.png

再加一张噪声贴图,如果嫌弃不好看可以自行替换

image.png

相关文章
|
7月前
|
图形学 数据可视化 开发者
超实用Unity Shader Graph教程:从零开始打造令人惊叹的游戏视觉特效,让你的作品瞬间高大上,附带示例代码与详细步骤解析!
【8月更文挑战第31天】Unity Shader Graph 是 Unity 引擎中的强大工具,通过可视化编程帮助开发者轻松创建复杂且炫酷的视觉效果。本文将指导你使用 Shader Graph 实现三种效果:彩虹色渐变着色器、动态光效和水波纹效果。首先确保安装最新版 Unity 并启用 Shader Graph。创建新材质和着色器图谱后,利用节点库中的预定义节点,在编辑区连接节点定义着色器行为。
524 1
|
7月前
|
C# 图形学 C语言
Unity3D学习笔记3——Unity Shader的初步使用
Unity3D学习笔记3——Unity Shader的初步使用
77 0
|
7月前
|
数据可视化 图形学
小功能⭐️Unity2018 Shader Graph——全息影像、物体消融
小功能⭐️Unity2018 Shader Graph——全息影像、物体消融
|
9月前
|
图形学
【实现100个unity特效】shader实现3D物品闪光和描边效果
【实现100个unity特效】shader实现3D物品闪光和描边效果
182 0
|
9月前
|
开发工具 图形学
【推荐100个unity插件之11】Shader实现UGUI的特效——UIEffect为 Unity UI 提供视觉效果组件
【推荐100个unity插件之11】Shader实现UGUI的特效——UIEffect为 Unity UI 提供视觉效果组件
738 0
|
9月前
|
图形学
【实现100个unity特效之2】使用shader和shader Graph实现2d图片描边效果(附源码)
【实现100个unity特效之2】使用shader和shader Graph实现2d图片描边效果(附源码)
580 0
|
9月前
|
图形学 开发者
【实现100个unity特效之1】使用Shader Graph实现动物森友会的世界弯曲效果(带源码)
【实现100个unity特效之1】使用Shader Graph实现动物森友会的世界弯曲效果(带源码)
192 0
|
10月前
|
图形学 异构计算
【Unity Shader 中Pass相关介绍_第四篇】
【Unity Shader 中Pass相关介绍_第四篇】
|
10月前
|
缓存 图形学 异构计算
【#Unity Shader#Amplify Shader Editor(ASE)_第二篇】
【#Unity Shader#Amplify Shader Editor(ASE)_第二篇】
|
10月前
|
图形学
【Unity Shader 中Pass相关介绍_第三篇】
【Unity Shader 中Pass相关介绍_第三篇】