Unity 扭曲扰动Shader 效果解析

开发者福利!门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

Unity 法线扭曲热浪Shader 效果解析

融合背景扭曲的热浪效果

其实扭曲最主要的两个函数就是:
1.GrabPass抓屏
2.ComputeGrabScreenPos (o.pos) 获取屏幕对应材质球的uv坐标
拿到这两个数据,剩下的就是进行uv的扰动和mask遮罩应用而已了。

直接上代码

Properties {
        _FinalPower ("Final Power", Range(0, 10)) = 0
        _Mask ("Mask", 2D) = "white" {}
        _DistortionAmount ("Distortion Amount", Range(0, 0.05)) = 0.0075
        _DistortionNormal ("DistortionNormal(可用Normalmap)", 2D) = "bump" {}
		_DistortFactorTime("FactorTime",Range(0,5)) = 0.5
        [HideInInspector]_Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
    }
    SubShader {
        Tags {
            "IgnoreProjector"="True"
            "Queue"="Transparent"
            "RenderType"="Transparent"
        }
        GrabPass{ }
        Pass {
            Name "FORWARD"
            Tags {
                "LightMode"="ForwardBase"
            }
            Blend SrcAlpha OneMinusSrcAlpha
            Cull Off Lighting Off ZWrite Off
            
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #define UNITY_PASS_FORWARDBASE
            #include "../CGIncludes/UnityCG.cginc"
            #pragma multi_compile_fwdbase
			//#pragma only_renderers d3d9 d3d11 glcore gles 

            uniform sampler2D _GrabTexture;
            uniform half _FinalPower;
            uniform sampler2D _Mask;
            uniform half _DistortionAmount,_DistortFactorTime;
            uniform sampler2D _DistortionNormal; uniform half4 _DistortionNormal_ST;

			struct appdata
			{
				half4 vertex : POSITION;
                half2 texcoord0 : TEXCOORD0;
                half4 vertexColor : COLOR;
			};

			struct v2f
			{
				half4 pos : SV_POSITION;
                half2 uv : TEXCOORD0;
                half4 vertexColor : COLOR;
                half4 projPos : TEXCOORD1;
				half2 t2 : TEXCOORD2;
			};

			v2f vert (appdata v)
			{
 				v2f o;
				o.uv = TRANSFORM_TEX(v.texcoord0, _DistortionNormal);
				o.t2 = o.uv + _Time.xy * _DistortFactorTime;
				o.vertexColor = v.vertexColor;
                o.pos = UnityObjectToClipPos( v.vertex );
                o.projPos = ComputeGrabScreenPos (o.pos);
                return o;
			}

			half4 frag (v2f i) : COLOR
			{
  				half2 sceneUVs = (i.projPos.xy/i.projPos.w);
				half4 _Mask_var = tex2D(_Mask,i.uv);
                half3 _Distortion_var = UnpackNormal(tex2D(_DistortionNormal,i.t2));
                half _distortion_power = saturate(_Mask_var.r*_FinalPower*i.vertexColor.a);
				sceneUVs = lerp(sceneUVs.rg,sceneUVs.rg + _Distortion_var.rg * _distortion_power,_DistortionAmount);
				half3 finalColor =tex2D( _GrabTexture, sceneUVs).rgb;
				
                return fixed4(finalColor,_distortion_power);
			}
            
            ENDCG
        }
    }

另外需要注意的是GrabPass,官方文档上有两种GrabPass的写法:

第一种是直接GrabPass{}的写法,这种写法抓屏的图片就直接存到_GrabTexture这个系统预定义的贴图变量中了,我们可以直接访问该贴图,但是这种写法会导致每个使用GrabPass的物体进行一次这种旷日持久的抓屏操作!如果用这种shader的物体多了的话,想想就很可怕。

另一种是GrabPass{“TextureName”}的写法,其中TextureName是我们自定义的一个贴图名称,这种写法,Unity每帧只会为第一个使用了该名称的物体进行抓屏操作,但这样会造成如果有第二个相同扭曲效果的图片叠加的时候就会出现重合的边框。
切割前 切割后
扰动扭曲还可以改为法线贴图进行扰动,增加对高光的处理。让扭曲的效果更加锐利。

//法线扰动能让扭曲的折射效果更强烈,后期可以尝试加入高光的处理。
                half3 _Distortion_var = UnpackNormal(tex2D(_Distortion,i.t2));
U3D Distortion 我们的美术希望游戏可以更炫一点,想在刀光特效上加上空气扭曲效果,就是类似燃烧的火焰上方空气扰动的那种效果。这个效果其实很多游戏都有。网络上流传的有一个叫heat_distortion的shader,这个shader使用grabTexture实现的,实现方法很多人都讲过,这里就不细说了。grabTexture比较坑爹,在移动设备上效率很成问题,而且有些机型也不支持,所以我们需要用其他办法实现。 阅读详情

相关推荐

Unity3D URP 自定义范围的特效扭曲详解

Unity3D URP(Universal Render Pipeline)是Unity官方推出的一款渲染管线,可以实现高效、高质量的图形渲染。在URP中,我们可以通过自定义特效来增强游戏的视觉效果。本文将详细解释如何使用URP实现一个自定义范围的特效扭曲。对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀!特效扭曲是一种常见的游戏特效,它可以给游戏场景增加一种扭曲的视觉效果,使得游戏更加动态和有趣。

weixin_49669470的博客 1691

【着色器实现Distortion整体扭曲效果_Shader效果第十七篇】

完整代码】【着色器实现Distortion整体扭曲效果_Shader效果第十七篇】

暴走约伯的博客 634

Unity URP屏幕扭曲效果实现:从Shader到Renderer Feature全解析

屏幕扭曲是一种通过修改像素采样坐标实现画面变形的后期处理技术,其核心原理在于片段着色器中对UV坐标进行扰动。在游戏开发中,这项技术常用于模拟水下波动、扭曲或技能特效,能显著增强视觉冲击力和沉浸感。随着Unity渲染管线从内置管线过渡到Universal Render Pipeline(URP),传统的后处理实现方式面临流程割裂和性能损耗等挑战。URP引入了可编程渲染器和Renderer Feature等现代架构,要求开发者深入理解渲染纹理管理和渲染器特性集成。通过创建自定义Render Pass并在合适

weixin_30876945的博客 347

Unity 特效扭曲效果(使用command buffer实现)

了解command buffer CommandBuffer携带一系列的渲染命令,可以指定在相机渲染的某个点执行本身命令(包括特殊渲染,保存当前rendertexture等) CommandBuffer可以使用的点看这里(官网文档) 具体渲染流程和触发点如下 特效扭曲的实现原理以及方案 原理:就是抓取特效后面渲染的纹理进行扰动 方案1:抓取特效后面渲染的纹理一般用grabpass,根据grabpass进行扰动 方案2:利用command buffer在渲染天空盒之后保存一张屏幕纹理(.

SnoopyNa2Co3的博客 3566

unity uv animator shader

Shader "Custom/TestUV"{ Properties { _MainTex ("Texture", 2D) = "white" {} _Speed("Speed",Range(1,100)) = 30 _RowCount("RowCount",float) = 1 _ColCount("ColCount",float) = 1 } SubShader { Tags

johncobo的专栏 632

Unity UV动画全解析:从2D滚动到3D扭曲的5种高效实现方案

纹理映射(Texture Mapping)是计算机图形学中基础且核心的技术,它通过将2D图像映射到3D模型表面来增加视觉细节。其原理是为模型每个顶点分配纹理坐标(UV),GPU根据这些坐标采样纹理颜色进行渲染。这项技术的价值在于能以极低的性能开销实现丰富的表面细节,是实时渲染的基石。在游戏开发、互动媒体和UI动效等应用场景中,通过动态修改UV坐标实现的UV动画,成为创建流动水面、无尽隧道、全息投影等动态效果的高效手段。本文聚焦Unity引擎,深入剖析UV动画在Shader编程中的实现原理,涵盖2D无限滚动、

weixin_33671935的博客 361

Unity3D-Shader-扭曲效果

【旧博客转移 - 2016年1月13日 13:18】 前面的话: 本来我是想写一个水的原理的,但是发现涉及的知识太多,还有好多不懂的,所以就先一步一步来 最近呢,我在网上捡到了一本《扭曲秘籍》,修炼数日,甚觉精妙 这次分享一个很简单的扭曲原理 先看效果: 1.这是原图 2.加了特效之后~显得很亮,很柔.. 3.这个神秘的图,才...

794

Unity URP扭曲效果实战:让半透明物体也能完美扭曲(附完整Shader代码)

本文详细介绍了在Unity URP管线中实现扭曲效果的完整方案,特别解决了半透明物体无法正常扭曲的技术难题。通过Shader代码编写、噪声扰动算法优化和URP渲染配置,开发者可以轻松创建逼真的高温环境或能量场特效。文章包含完整的Shader代码和性能优化建议,特别适合游戏特效开发人员参考。

weixin_29014237的博客 400

Unity UI特效Shader实战:流光、扭曲、描边与涟漪四重奏

在计算机图形学中,着色器(Shader)是控制渲染管线中顶点和像素处理的核心程序,它通过数学运算直接操纵GPU,实现从基础颜色到复杂视觉效果的生成。其原理在于对纹理坐标(UV)、颜色值和时间变量进行变换与混合,从而在屏幕空间创造出动态、丰富的像素表现。这项技术的核心价值在于,它能以极低的性能开销,为应用程序界面(UI)和游戏画面带来质的飞跃,是提升视觉反馈、营造沉浸感和实现品牌差异化的关键技术。在游戏开发、交互式应用和数字孪生等领域,Shader被广泛用于实现按钮高亮、状态提示、场景过渡和动态背景等效果。本

326

Unity Shader实现黑洞引力透镜效果:从UV扰动到视觉奇观

屏幕空间UV扰动是图形学中模拟光线弯曲和图像扭曲的核心技术,其原理是通过数学函数动态调整纹理采样坐标,从而在视觉上制造出空间扭曲的错觉。这项技术在游戏开发和影视特效中具有重要价值,常用于实现扭曲、水面折射、能量护盾等视觉效果。本文以Unity Shader为例,深入讲解如何利用UV扰动技术模拟黑洞的引力透镜效应,通过构建倒数衰减和事件视界模型,实现背景扭曲、光线吞噬等逼真效果,并结合Shader优化策略,为游戏中的宇宙奇观场景提供完整的工程实践方案。

weixin_30530339的博客 350

Unity URP扭曲效果实战:半透明物体也能完美扭曲Shader教程

本文详细介绍了在Unity URP渲染管线中实现扭曲效果Shader教程,特别解决了半透明物体参与扭曲计算的技术难题。通过核心原理分析、完整Shader代码实现和性能优化技巧,帮助开发者高效创建适用于火焰、能量场等场景的高质量扭曲特效。

weixin_29012765的博客 349

Unity Shader实现动态水面效果:GrabPass与法线贴图扰动技术详解

在实时渲染中,Shader是实现复杂视觉效果的核心技术,它通过GPU编程控制每个像素的最终呈现。其基本原理是在渲染管线中插入可编程的顶点与片元着色器,对几何数据与纹理采样进行计算与混合。这项技术的核心价值在于能以极高的效率实现从基础光照到复杂环境交互的各类视觉效果,是提升游戏与交互应用视觉沉浸感的关键。在众多应用场景中,模拟动态水面是一个经典需求,它要求同时处理反射、折射与动态扰动。本文聚焦于使用Unity内置渲染管线,通过GrabPass抓取屏幕图像作为反射源,结合双层法线贴图滚动实现扰动,并融入菲涅尔效

weixin_30920853的博客 461

Unity URP能量描边Shader实现:动态滚动、扰动与发光效果详解

在计算机图形学中,着色器(Shader)是控制渲染管线各阶段的核心程序,用于实现从顶点变换到像素着色的视觉效果。其原理是通过GPU并行计算,对几何模型的顶点、片元进行数学运算和纹理采样,从而生成最终图像。在游戏开发和实时渲染领域,着色器技术是实现高级视觉特效的关键,能极大提升画面的表现力和沉浸感。基于法线外扩的描边技术是一种常见且高效的轮廓突出方案,它在模型空间中对顶点沿法线方向进行偏移,生成渲染外壳,性能可控且效果稳定。本文聚焦于能量描边这一高级应用场景,通过引入滚动、扰动和发光等动态属性,让传统描边“活

weixin_29011667的博客 350

Unity Shader Flow Map技术:实现岩浆流动效果解析

在实时渲染领域,纹理动画是提升场景动态细节的关键技术。其核心原理是通过修改纹理坐标,驱动表面图案随时间变化,从而模拟水流、火焰、能量场等动态视觉效果。Flow Map(流向图)技术在此基础上更进一步,它通过一张编码了方向矢量的纹理,为每个像素点赋予独立的运动方向,从而创造出复杂、自然且性能可控的矢量场流动效果。这项技术在游戏开发、影视特效和模拟仿真中具有极高的应用价值,尤其适用于需要表现非均匀、有方向性流动的场景,如河流、熔岩、魔法轨迹和云层运动。本文将以实现逼真的岩浆流动效果为具体案例,深入剖析Flow

weixin_33860528的博客 349

Unity URP动态水面Shader实现:从法线扰动到深度折射全解析

在实时渲染中,Shader是实现复杂视觉效果的核心技术,它通过GPU编程控制像素的最终呈现。其基本原理是定义光照模型、纹理采样和数学运算,将输入数据转换为屏幕颜色。在游戏开发和数字孪生领域,Shader技术能极大提升场景的真实感和沉浸感,广泛应用于角色渲染、环境特效和材质模拟。本文聚焦于动态水面效果的实现,这是Shader应用的典型场景。通过结合法线贴图扰动模拟波浪、利用深度纹理计算折射、以及菲涅尔效应控制反射强度,可以在Unity的通用渲染管线(URP)中构建出波光粼粼的交互式水面。文章将详细拆解这些核心

ithome 365

Unity Shader进阶实战:UI特效四重奏(流光、扭曲、描边与涟漪)

本文深入解析Unity Shader编程中的UI特效四重奏:流光、扭曲、描边与涟漪的实战实现。通过详细的代码示例和优化技巧,帮助开发者掌握可配置化Shader系统的设计思路,提升UI特效的性能与视觉效果。特别适合游戏开发者和UI设计师学习进阶Shader技术,实现高效、炫酷的UI交互效果

weixin_30530339的博客 368

Unity Shader实战:MatCap技术实现炫酷镭射材质效果

在计算机图形学中,材质渲染是模拟物体表面光学特性的核心技术。传统基于物理的渲染(PBR)流程虽然真实,但计算复杂。MatCap(Material Capture)作为一种高效的渲染技术,其原理是通过预渲染的环境球贴图,根据模型表面法线方向直接采样颜色,从而模拟复杂光照和材质效果,避免了实时光照计算的性能开销。这项技术的核心价值在于以极低的性能成本实现高表现力的视觉风格,特别适用于移动端和风格化渲染需求。在游戏开发、虚拟现实和动态UI设计等应用场景中,MatCap常被用于快速实现金属、丝绸、虹彩等特殊质感。本

weixin_30644369的博客 393

Unity URP 扭曲效果实战:半透明物体与Shader的完美结合

本文详细介绍了在Unity URP中实现扭曲效果的实战技巧,重点解决半透明物体与Shader的完美结合问题。通过分析URP渲染流程、提供完整Shader代码解析及优化方案,帮助开发者高效创建逼真的浪折射效果,并涵盖移动端适配与性能优化策略。

weixin_29016865的博客 249

Unity溶解效果实现:Shader编程与噪声纹理应用详解

在实时渲染与游戏开发中,着色器编程是实现高级视觉效果的核心技术。其原理是通过GPU对每个像素进行并行计算,控制颜色、透明度等属性的输出。这项技术的价值在于能够创造出丰富、动态的视觉表现,极大地增强游戏的沉浸感和艺术表现力。溶解效果作为一种典型的像素级控制应用,广泛应用于角色消失、场景转换、技能特效等场景。它通过采样噪声纹理,并与动态阈值进行比较,决定像素的丢弃与否,从而模拟物体逐渐消散的过程。本文以Unity引擎为例,深入解析了如何编写片元着色器,利用噪声纹理生成随机边缘,并添加动态光效来提升视觉层次。通过

weixin_34080571的博客 1316
上一篇: Unity高光着色器在Editor中显示正常,andorid中出现曝光问题
下一篇: UnityShader入门精要读后感及总结(一)
macjeson
博客等级 码龄12年 2粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值