unity 空气扰动,热空气 shader效果

正常效果:
在这里插入图片描述

高速低扰动效果:
在这里插入图片描述

低速高扰动效果:
在这里插入图片描述
代码:

Shader "Learning/rekongqi"
{
	Properties
	{
		_NoiseTex ("NoiseTextrue", 2D) = "white" {}
		_Strength ("Strength", range(0, 1)) = 0.5
		_Speed ("Speed", range(-2, 2)) = 0.5
	}
	SubShader
	{
		Tags { "Queue"="AlphaTest"}
		Blend SrcAlpha oneMinusSrcAlpha
		ZWrite Off
		GrabPass
		{
			"_GrabTex"
		}
		Pass
		{
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			
			#include "UnityCG.cginc"

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

			struct v2f
			{
				float2 uv : TEXCOORD0;
				float4 grabPos : TEXCOORD1;
				float4 vertex : SV_POSITION;
			};

			sampler2D _NoiseTex;
			float4 _NoiseTex_ST;
			sampler2D _GrabTex;
			
			v2f vert (appdata v)
			{
				v2f o;
				o.vertex = UnityObjectToClipPos(v.vertex);
				o.uv = TRANSFORM_TEX(v.uv, _NoiseTex);
				o.grabPos = ComputeGrabScreenPos(o.vertex);
				return o;
			}
			
			float _Strength;
			float _Speed;
			fixed4 frag (v2f i) : SV_Target
			{
				float4 noise = tex2D(_NoiseTex, i.uv.xy - _Time.xy * _Speed * 0.1);
				i.grabPos.xy += (noise.xz * 2 - 1) * 0.1 * _Strength;

				half4 grabCol = tex2Dproj(_GrabTex, i.grabPos);
				return grabCol;
			}
			ENDCG
		}
	}
}

实现原理:

  1. 通过GrabPass抓取屏幕中一个区域的图像
  2. 以时间作为变量,取噪声图中的像素点的颜色值作为偏移的随机值
  3. 通过随机值对步骤1中的图像进行采样

因为通过随机值采样会采样到与当前uv不同的点,连续起来就有了扰动的效果,采样的跨度(_Speed)和偏移的强度(_Strength)以及噪声图的偏移(Tilling)可以调整最终的效果。
在这里插入图片描述
下面贴上噪声图以供使用:
在这里插入图片描述

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity Shader中的热扰动是指在图像或模型表面上模拟出类似于热量或火焰效果的一种特效。这种特效能够给予游戏或动画更加真实、生动的视觉体验。 实现热扰动的主要思路是通过对模型或纹理坐标进行扰动,使其在时间上波动不定,从而营造出热量交互的效果。在Shader中,我们可以使用噪声生成器来获取这种时间上的波动效果。 通过在Shader中加入热扰动效果,我们可以对模型或纹理产生随机的偏移变化,以模拟出火焰或热量的动态效果。这种效果能够让材质看起来像是处于不断变化的状态,增加了画面的动感和真实感。 一种常见的实现方法是使用Perlin Noise,也可以使用其他的噪声生成器。Perlin Noise是一种艺术家和程序员常用的生成随机数的方法,它能够生成具有良好连续性和变化性的随机数序列。在Shader中,我们可以根据时间和空间的变化来计算并应用Perlin Noise,从而生成出热扰动效果。 除了Perlin Noise外,还可以使用其他形式的噪声生成器,如Simplex Noise等,来实现热扰动效果。这些噪声生成器能够产生更为复杂、自然的扰动效果,使热扰动看起来更加真实。 总之,通过在Unity Shader中加入热扰动效果,我们能够为游戏或动画场景带来更加生动、逼真的视觉效果。这种技术可以让纹理和模型看起来像是处于不断变化的状态,增加了画面的动感和真实感,提升了用户的视觉体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值