Incorrect image effect result. For second camera (it is render normal map to render texture) and material (using render texture in shader) and script on first camera: Code (CSharp): [ExecuteInEditMode] [RequireComponent(typeof(Camera))] public class DisplacementEffect : MonoBehaviour { public Material material; public Shader shader; private bool support = true; void Awake() { if (!SystemInfo.supportsImageEffects || !SystemInfo.supportsRenderTextures || !SystemInfo.SupportsRenderTextureFormat(RenderTextureFormat.RGB565) || !shader.isSupported) { support = false; } } void OnRenderImage(RenderTexture source, RenderTexture destination) { if (Time.timeScale == 0 || !support) Graphics.Blit(source, destination); else Graphics.Blit(source, destination, material); } } Shader: Code (CSharp): Shader "Hidden/DisplacementEffect" { Properties { _MainTex("Base (RGB)", 2D) = "white" {} _DisplacementTex("Displacement rt", 2D) = "white" {} _DisplacementPower("Displacement power", Float) = 0.025 } SubShader { Pass { CGPROGRAM #pragma vertex vert_img #pragma fragment frag #include "UnityCG.cginc" uniform sampler2D _MainTex; uniform sampler2D _DisplacementTex; uniform float _DisplacementPower; float4 frag(v2f_img i) : COLOR { fixed4 displacementVector = tex2D(_DisplacementTex, i.uv); fixed2 uv_distorted = i.uv + _DisplacementPower * displacementVector.xy; return tex2D(_MainTex, uv_distorted); } ENDCG } } } Project: Effect Preview: It work correctly on a lot of devices, but only PowerVR GPU has this result pixelization like low resolution:
Using "fixed" for uvs is your problem. Use float like this: float2 uv_distorted = i.uv + _DisplacementPower * displacementVector.xy;