有一个可以用来做火焰的扭曲模仿效果也可以用来做地震波的效果的 Shader,做地震波的效果的方法是先做一个环形的 Mesh,然后将这个 Shader 给 Mesh 材质使用,然后 通过脚本改变 Mesh 的半径从而实现地震波使地形扭曲的效果。在 iOS 上没有问题,可是在某些 Android 机上发现这个效果实现不了,因为在这些 Android 机上 Shader 里的 GrabPass 方法失效了。而 GrabPass 无非就是采集了当前的 Texture 而已,所以用 Camera 的 Render Texture 功能,就可以轻松实现 GrabPass 的功能。
这个 Shader 代码如下:
Shader "HeatDistortion" {
Properties {
_NoiseTex ("Noise Texture (RG)", 2D) = "white" {}
strength("strength", Range(0.1, 0.3)) = 0.2
transparency("transparency", Range(0.01, 0.1)) = 0.05
}
Category {
Tags { "Queue" = "Transparent+10" }
SubShader {
GrabPass { Name "BASE" Tags { "LightMode" = "Always" } }
Pass {
Name "BASE"
Tags { "LightMode" = "Always" }
Fog { Color (0,0,0,0) }
Lighting Off
Cull Off
ZWrite On
ZTest LEqual
Blend SrcAlpha OneMinusSrcAlpha
AlphaTest Greater 0
CGPROGRAM
// Upgrade NOTE: excluded shader from DX11 and Xbox360; has structs without semantics (struct v2f members distortion)
#pragma exclude_renderers d3d11 xbox360
// Upgrade NOTE: excluded shader from Xbox360; has structs without semantics (struct v2f members distortion)
#pragma exclude_renderers xbox360
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#pragma fragmentoption ARB_fog_exp2
#include "UnityCG.cginc"
sampler2D _GrabTexture : register(s0);
float4 _NoiseTex_ST;
sampler2D _NoiseTex;
float strength;
float transparency;
struct data {
float4

最低0.47元/天 解锁文章
2087

被折叠的 条评论
为什么被折叠?



