Hi!
In my Unity project I want to apply various textures to my voxel terrain. I'm using a texture atlas. In some cases I needed to repeate the texture, so I found out mod() function to be the solution, but it produces nasty one-pixel wide stripes on my textures, which appears to be the first stripe of the neighbouring texture. I turned all the filtering off (apart from point, which cannot be turned off (which is logical) and I think this is the problem), but it did not solve the problem. And here's the question:
How to get rid of this stripe?
Possible solution (but i'd rather a simpler one):
Create an alghorytm that from an array of individual textures creates a single texture atlas, but it adds additional one-pixel padding to each texture (repeating the bordering pixels) - if sampler just takes that one pixel from the neighbouring texture due to point filtering (which cannot be turned off) it will fix the problem, but as I wrote - if you know a simpler solution, it is better for me.
Below I place the source of my shader:
I also attach some screenshots.
Input.color contains texture offset in atlas.
Thanks in advance for your help!
Shader "Custom/WorldShader" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
_TileScale ("Texture size in atlas", float) = 1
}
SubShader {
Lighting Off
pass {
CGPROGRAM
#pragma vertex vShader
#pragma fragment pShader
#include "UnityCG.cginc"
sampler2D _MainTex;
float _TileScale;
struct VertIn {
float4 vertex : POSITION;
float4 color : COLOR;
float2 texcoord : TEXCOORD0;
};
struct VertOut {
float4 position : POSITION;
float4 color : COLOR;
float2 texcoord : TEXCOORD0;
};
VertOut vShader(VertIn input) {
VertOut output;
output.position = mul(UNITY_MATRIX_MVP,input.vertex);
output.color = input.color;
output.texcoord = input.texcoord;
return output;
}
float4 pShader(VertOut input) : COLOR0 {
float2 newUVs = float2(fmod(input.texcoord.x, _TileScale) + input.color.r, fmod(input.texcoord.y, _TileScale) + input.color.g);
return tex2D(_MainTex, newUVs) * (UNITY_LIGHTMODEL_AMBIENT * 1.5);
}
ENDCG
}
}
}