这是我们要实现的效果

全屏的效果我们可以直接使用OnRenderImage方法挂载在Camera上,它会在所有的渲染完成后调用,可以用来处理最终图像。

void OnRenderImage(RenderTexture sourceTexture, RenderTexture destTexture)

sourceTexture是原渲染纹理,destTexture是目标纹理

扭曲的原理就是移动uv值来实现,我用了一张噪音图来获取随机的偏移量

shader代码如下
_DistortTimeFactor是控制采样噪音图的幅度
_LuminosityAmount是控制扭曲程度

Shader "Custom/ImageEffect" {Properties{_MainTex("Base (RGB)", 2D) = "white" {}_NoiseTex("Noise (RGB)", 2D) = "white" {}_LuminosityAmount("GrayScale Amount", Range(0.0, 1.0)) = 1.0_DistortTimeFactor("DistortTimeFactor", Range(0,1)) = 1}SubShader{Pass{CGPROGRAM#pragma vertex vert_img  #pragma fragment frag  #include "UnityCG.cginc"  uniform sampler2D _MainTex;uniform sampler2D _NoiseTex;fixed _LuminosityAmount;float _DistortTimeFactor;fixed4 frag(v2f_img i) : COLOR{float4 noise = tex2D(_NoiseTex, i.uv - _Time.xy * _DistortTimeFactor);float2 offset = noise.xy * _LuminosityAmount;return tex2D(_MainTex, i.uv + offset);}ENDCG}}FallBack "Diffuse"
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;[ExecuteInEditMode]
[RequireComponent(typeof(Camera))]
public class CameraEffect : MonoBehaviour {public Shader curShader;public Texture noise;public float grayScaleAmount = 1.0f;private Material curMaterial;[Range(0.0f, 1.0f)]public float DistortTimeFactor = 0.15f;public Material material{get{if (curMaterial == null){curMaterial = new Material(curShader);curMaterial.hideFlags = HideFlags.HideAndDontSave;}return curMaterial;}}void Start(){if (SystemInfo.supportsImageEffects == false){enabled = false;return;}if (curShader != null && curShader.isSupported == false){enabled = false;}}void OnRenderImage(RenderTexture sourceTexture, RenderTexture destTexture){if (curShader != null){material.SetFloat("_LuminosityAmount", grayScaleAmount);material.SetFloat("_DistortTimeFactor", DistortTimeFactor);material.SetTexture("_NoiseTex", noise);Graphics.Blit(sourceTexture, destTexture, material);}else{Graphics.Blit(sourceTexture, destTexture);}}void Update(){grayScaleAmount = Mathf.Clamp(grayScaleAmount, 0.0f, 1.0f);}void OnDisable(){if (curMaterial != null){DestroyImmediate(curMaterial);}}
}

【unity】热浪扭曲效果相关推荐

  1. Unity 屏幕特效 之 热浪扭曲效果的实现

    Unity 屏幕特效 之 热浪扭曲效果的实现 目录 Unity 屏幕特效 之 热浪扭曲效果的实现 一.简介 二.关键技术

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

    了解command buffer CommandBuffer携带一系列的渲染命令,可以指定在相机渲染的某个点执行本身命令(包括特殊渲染,保存当前rendertexture等) CommandBuffe ...

  3. unity Shader 扭曲效果

    原理 所谓扭曲就是扰动一个物体的uv坐标,表现出来就是一个扰动效果,如火焰扭曲空气,和水波对水底的影响. 1. 在shader 中我们需要一张当前渲染的纹理 2. 给一个物体渲染并使用当前纹理,用屏幕 ...

  4. Unity Shader-热空气扭曲效果(多种实现方案,包括移动平台)

    原文地址:https://blog.csdn.net/puppet_master/article/details/70199330 简介 千等万等终于等到了<耻辱2>打折,本以为可以爽一发 ...

  5. psql屏幕输出全部结果_CommandBuffer实现Distort屏幕扭曲效果

    现在的游戏中很多特效都喜欢用到扭曲效果,常见的实现方案都是在Shader中使用GrabPass,来获取屏幕的画面然后去做计算.关于获取屏幕画面的几种方案的性能分析可以参考我上篇文章. idleworm ...

  6. 扭曲效果 效率优化 GrapPass,CommandBuffer对比

    屏幕图像捕捉: Shader的GrabPass GrabPass可以很方便地捕获当前渲染时刻的FrameBuffer中的图像. 其原理就是从当前FrameBuffer中copy一份纹理,通过SetTe ...

  7. Shader Forge 入门学习(二) 实现发光、火焰燃烧、溶解、扭曲效果

    引言:本篇博客主要记录ShaderForge的常用案例,包括外发光.火焰燃烧.溶解.扭曲等效果.由于内容较多会分成几篇博客记录.如果您对Shader Forge的常用操作还不熟悉,请先看 Unity3 ...

  8. unityShader热空气扭曲效果

    本文转载自http://blog.csdn.net/puppet_master/article/details/70199330?locationNum=2&fps=1 简介 千等万等终于等到 ...

  9. unity海边波浪效果的实现

    效果图如下(GIF因为为了把图压小所以删掉了一些帧导致后面速度突然很快,实际效果并不是这样~_~) 之前在玩很多游戏的时候,注意到里面的海水和陆地相交接的地方会产生海浪,比如<海岛奇兵>, ...

最新文章

  1. 利用SqlHelper.cs实现Web程序对数据库的增、删、改等操作
  2. 【Android开发】布局管理器-线性布局
  3. CrtInvertedIdx
  4. 关于LR录制时不能自动启动IE浏览器的解决方法
  5. 关于ArcGIS Mobile回传数据中常遇到的问题整理!
  6. visual studio code 如何取消提示
  7. 一个bootstrap.css的使用案例
  8. 三分屏课件制作_如何利用剪辑软件制作分屏效果
  9. xlsx模块 前端_React读取Excel——js-xlsx 插件的使用
  10. 计算机硬盘有磁性材料吗,电脑硬盘里有磁铁吗
  11. 阿里云CDN全站加速,说说动态加速那些事
  12. memcpy、memmove、memcmp、memset函数的使用说明和模拟实现
  13. 如何切换Linux用户(penguin)
  14. 11月钓鱼网站简报:阿里巴巴占比居首 新网次之
  15. 无刷直流电机的PWM调制方式介绍
  16. weblogic动态调试环境搭建
  17. 2021版VSCode 配置 LaTeX 环境 保姆级教程
  18. Python对于私有化的处理
  19. 计算机黑屏故障的原因及解决方法,电脑黑屏原因及解决方法
  20. Chrome 插件 记录

热门文章

  1. c语言药房系统书写指导书,C语言药房管理系统.docx
  2. pycharm的控制台与python环境不对应
  3. android手机win桌面图标,安卓手机连接win10电脑无法显示手机图标怎么办
  4. QMS-云质-质量管理软件-QMS软件-应该自己开发,外包还是购买软件产品?
  5. nodersa pkcs1 php,nodejs版本RSA算法签名和验签(SHA1)
  6. C语言关于一维数组【num】、【num】、【num[0]】的区别
  7. vue axios 怎么也获取不了后台传过来的session 求大神指教
  8. React Native for Arcgis 地图开发 聚合图Cluster (十一)
  9. Console 相关操作
  10. WireShark捕获QQ传输的图片