- Home /
 
UV/texture displacement, "resolution"-artifacts
I'm trying to create a simple texture displacement effect by sampling my main texture at UV's that have been displaced by another texture.
I get artifacts between the pixels, please see below.
Without displacement: 
With displacement: 
The artifacts are the 1 (screen-)pixel lines between the "texels".
The shader is a simple unlit texture shader with some simple alterations to create the displacement effect:
 Shader "Unlit/PixelDisplacement"
 {
 
     
     Properties
     {
         _MainTex ("Texture", 2D) = "white" {}
         _DisplacementTex ("Texture", 2D) = "white" {}
         _Amount ("Displace amount", Int) = 0
         _DisplaceResolution ("Displace resolution", Int) = 32
     }
     SubShader
     {
         Tags { "RenderType"="Opaque" }
         LOD 100
 
         Pass
         {
             CGPROGRAM
             #pragma vertex vert
             #pragma fragment frag
             // make fog work
             #pragma multi_compile_fog
             
             #include "UnityCG.cginc"
 
             struct appdata
             {
                 float4 vertex : POSITION;
                 float2 uv : TEXCOORD0;
             };
 
             struct v2f
             {
                 float2 uv : TEXCOORD0;
                 float2 uv2 : TEXCOORD1; //Use secondary UV to manage displacement texture offset / scale
                 UNITY_FOG_COORDS(1)
                 float4 vertex : SV_POSITION;
             };
 
             sampler2D _MainTex;
             float4 _MainTex_ST;
 
             //Displacement related:
             sampler2D _DisplacementTex;
             float4 _DisplacementTex_ST;
             float _Amount;
             int _DisplaceResolution;
             
             v2f vert (appdata v)
             {
                 v2f o;
                 o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
 
                 //https://forum.unity3d.com/threads/how-to-get-the-textures-tiling-and-offset-variables.181849/
                 o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                 o.uv2 = TRANSFORM_TEX(v.uv, _DisplacementTex);
                 UNITY_TRANSFER_FOG(o,o.vertex);
                 return o;
             }
             
             fixed4 frag (v2f i) : SV_Target
             {
                 //Displacement coordinates:
                 fixed2 disp = tex2D(_DisplacementTex, i.uv2);
                 //Make sure displacement is in units of 1/32                    
                 float2 dispUV = fixed2(floor(disp.r * _Amount) / _DisplaceResolution, floor(disp.g * _Amount) / _DisplaceResolution);
 
 
 
  
 
                 // sample the texture at the offset coordinates
                 fixed4 col = tex2D(_MainTex, i.uv + dispUV);
 
 
                 //DEBUG:
 //                fixed2 tmp = i.uv + dispUV;
 //                col = fixed4(tmp.r, tmp.g, 0, 0);
 
                 return col;
             }
             ENDCG
         }
     }
 }
 
 
               Both textures use point filter, repeat, 32 pixels, truecolor. Have played around with all kinds of settings, the artifacts remain... The number of artifacts increase if the _Amount parameter is increased, but disappear for _Amount = 0 (as in 1st screenshot).
Any help would be much appreciated!
Your answer
 
             Follow this Question
Related Questions
Can I feed ShaderGraph a UV map? 0 Answers
Shader, 2 Textures on one UV Map 1 Answer
Shading after vertex displacement 0 Answers
Displace and show normals in fragment shader 1 Answer
Blend between 2 lightmaps 0 Answers