unity 如何获取到屏幕中间_Unity热扰动(热扭曲)特效

本文介绍了如何在Unity中实现热扰动特效,以增强游戏画面的真实感,特别是在表现火焰和炎热环境时。通过两种方法实现:一是使用GrabPass直接在mask shader中进行屏幕坐标扰动;二是利用CommandBuffer进行全屏后处理,通过自定义深度测试确定热扰动范围。文章详细阐述了每种方法的具体步骤,并提供了相关脚本和shader的实现,适用于Unity开发者提升游戏视觉效果。
摘要由CSDN通过智能技术生成

641b2a5aa53f5780ee61113ea611ddea.png

效果一览

实际生活中,空气热扰动是一种空气受热不均造成的一种物理现象,用在游戏中能充分增强画面质感,如用在火焰,炎热天气下的柏油马路上,突出炙热感

bd80bc61ae5bc36dea1527d3b2a39687.png

f08422208ca4c3dcbc2965af9d15a993.gif

基本原理

生成当前背景纹理,利用mask面片在相应位置采样该背景纹理,采样的uv利用噪声进行扰动,达到采样结果与原背景纹理相比呈现出不规则错位的效果,既热扰动效果

具体实现

我将在Unity中实现该效果,具体有两种思路

  1. 在mask面片的shader中用GrabPass抓取当前背景纹理,计算mask面片的屏幕坐 标,采样噪声去扰动该屏幕坐标,并用该屏幕坐标采样背景纹理。优点是操作简单,

缺点就是GrabPass在移动设备上性能较差

  1. 利用CommandBuffer绘制mask面片,利用_CameraDepthTexture对mask面片进行深度测试并将最后结果渲染到纹理,随后进行热扰动全屏后处理,在后处理shader中采样mask纹理实现指定区域的热扰动。后处理中使用的OnRenderImage()中的Graphic.Bilt()性能表现优于GrabPass,但对于移动设备来说仍是一笔不小的负担。

第一种实现(GrabPass)

空间布局如下:

893cc05f06cc0cb13ddffde38bad1c6a.png

Mask为Unity新建的quad,Mask的Shader为:

Shader "Custom/Distortion(GrabPass)"
{
Properties
{
_DistortStrength("热扰动强度",Range(0,1)) = 0.5
_DistortVelocity("热扰动速率",Range(0,1)) = 0.5
_XDensity("噪声密度(水平)",float) = 1
_YDensity("噪声密度(竖直)",float) = 1
_NoiseTex("噪声贴图",2D) = "white"{}
_Mask("噪声遮罩",2D) = "Black"{}

}
SubShader
{
Tags{
"RenderType" = "Transparent"
"Queue" = "Transparent+1"
"DisableBatching"="True"//批处理会合并模型,造成物体本地坐标丢失,公告牌效果失效,所以忽视批处理
}
Zwrite Off
GrabPass{ "_GrabTex"}//获取当前屏幕图像,并存入_GrabTex纹理
Cull Off

Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"

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

sampler2D _GrabTex;
sampler2D _NoiseTex;
sampler2D _Mask;
float _XDensity;
float _YDensity;
float4 _NoiseTex_ST;
fixed _DistortStrength;
fixed _DistortVelocity;

v2f vert (appdata_base v)
{
v2f o;
//公告牌实现&#
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值