OK, I got it, the thing was that I needed to make a public variable and to put it as offset and then with external script I increased that variable as the MainTex offset increased. Now it works very nice.
Since I got the script that I used to start for free, I will put here the final result that works (and hopefully for others also).
For example I use it for Moon map and displacement map.
you need to change _x and _y with external script 4 times as much as MainTex0 offset.
Shader "Tileable with displacement" {
Properties {
_Tess ("Tessellation", Range(1,64)) = 4
_NormalMap ("Normalmap", 2D) = "bump" {}
_Displacement ("Displacement", Range(0, 0.1)) = 0.03
_Color ("Color", color) = (1,1,1,0)
_SpecColor ("Spec color", color) = (0.5,0.5,0.5,0.5)
_MainTex0 ("Base (RGB)", 2D) = "white" {}
_MainTex1 ("Base1 (RGB)", 2D) = "white" {}
_MainTex2 ("Base2 (RGB)", 2D) = "white" {}
_MainTex3 ("Base3 (RGB)", 2D) = "white" {}
_MainTex4 ("Base4 (RGB)", 2D) = "white" {}
_MainTex5 ("Base5 (RGB)", 2D) = "white" {}
_MainTex6 ("Base6 (RGB)", 2D) = "white" {}
_MainTex7 ("Base7 (RGB)", 2D) = "white" {}
_DispTex0 ("Disp Texture", 2D) = "gray" {}
_DispTex1 ("Disp1 Texture", 2D) = "gray" {}
_DispTex2 ("Disp2 Texture", 2D) = "gray" {}
_DispTex3 ("Disp3 Texture", 2D) = "gray" {}
_DispTex4 ("Disp4 Texture", 2D) = "gray" {}
_DispTex5 ("Disp5 Texture", 2D) = "gray" {}
_DispTex6 ("Disp6 Texture", 2D) = "gray" {}
_DispTex7 ("Disp7 Texture", 2D) = "gray" {}
_x("x",Range(-4,4))=0
_y("y",Range(-1,1))=0
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 300
CGPROGRAM
#pragma surface surf BlinnPhong addshadow fullforwardshadows vertex:disp tessellate:tessFixed nolightmap
#pragma target 5.0
sampler2D _MainTex0;
//Added three more 2D samplers, one for each additional texture
sampler2D _MainTex1;
sampler2D _MainTex2;
sampler2D _MainTex3;
sampler2D _MainTex4;
sampler2D _MainTex5;
sampler2D _MainTex6;
sampler2D _MainTex7;
sampler2D _DispTex0;
sampler2D _DispTex1;
sampler2D _DispTex2;
sampler2D _DispTex3;
sampler2D _DispTex4;
sampler2D _DispTex5;
sampler2D _DispTex6;
sampler2D _DispTex7;
struct Input {
float2 uv_MainTex0;
};
struct appdata {
float4 vertex : POSITION;
float4 tangent : TANGENT;
float3 normal : NORMAL;
float2 texcoord : TEXCOORD0;
};
float _Tess;
float4 tessFixed()
{
return _Tess;
}
float _Displacement;
float _x;
float _y;
void disp (inout appdata v)
{
float2 texcoord2=v.texcoord.xy*float2(4,2);
float d0 = tex2Dlod(_DispTex0, float4(texcoord2-float2(_x,_y),0,0)).r * _Displacement;
float d1 = tex2Dlod(_DispTex1, float4(texcoord2-float2(_x,_y),0,0)).r * _Displacement;
float d2 = tex2Dlod(_DispTex2, float4(texcoord2-float2(_x,_y),0,0)).r * _Displacement;
float d3 = tex2Dlod(_DispTex3, float4(texcoord2-float2(_x,_y),0,0)).r * _Displacement;
if((texcoord2-float2(_x,_y)).x>0&&(texcoord2-float2(_x,_y)).x<1&&texcoord2.y>1){
d1=d2=d3=0;
v.vertex.xyz -= v.normal * (d0);
}
if((texcoord2-float2(_x,_y)).x>1&&(texcoord2-float2(_x,_y)).x<2&&texcoord2.y>1){
d0=d2=d3=0;
v.vertex.xyz -= v.normal * (d1);
}
if((texcoord2-float2(_x,_y)).x>2&&(texcoord2-float2(_x,_y)).x<3&&texcoord2.y>1){
d0=d1=d3=0;
v.vertex.xyz -= v.normal * (d2);
}
if((texcoord2-float2(_x,_y)).x>3&&(texcoord2-float2(_x,_y)).x<4&&texcoord2.y>1){
d0=d1=d2=0;
v.vertex.xyz -= v.normal * (d3);
}
if((texcoord2-float2(_x,_y)).x>-1&&(texcoord2-float2(_x,_y)).x<0&&texcoord2.y>1){
d0=d1=d2=0;
v.vertex.xyz -= v.normal * (d3);
}
if((texcoord2-float2(_x,_y)).x>-2&&(texcoord2-float2(_x,_y)).x<-1&&texcoord2.y>1){
d0=d1=d3=0;
v.vertex.xyz -= v.normal * (d2);
}
if((texcoord2-float2(_x,_y)).x>-3&&(texcoord2-float2(_x,_y)).x<-2&&texcoord2.y>1){
d0=d2=d3=0;
v.vertex.xyz -= v.normal * (d1);
}
if((texcoord2-float2(_x,_y)).x>-4&&(texcoord2-float2(_x,_y)).x<-3&&texcoord2.y>1){
d1=d2=d3=0;
v.vertex.xyz -= v.normal * (d0);
}
if((texcoord2-float2(_x,_y)).x>7&&(texcoord2-float2(_x,_y)).x<8&&texcoord2.y>1){
d0=d1=d2=0;
v.vertex.xyz -= v.normal * (d3);
}
if((texcoord2-float2(_x,_y)).x>6&&(texcoord2-float2(_x,_y)).x<7&&texcoord2.y>1){
d0=d1=d3=0;
v.vertex.xyz -= v.normal * (d2);
}
if((texcoord2-float2(_x,_y)).x>5&&(texcoord2-float2(_x,_y)).x<6&&texcoord2.y>1){
d0=d2=d3=0;
v.vertex.xyz -= v.normal * (d1);
}
if((texcoord2-float2(_x,_y)).x>4&&(texcoord2-float2(_x,_y)).x<5&&texcoord2.y>1){
d1=d2=d3=0;
v.vertex.xyz -= v.normal * (d0);
}
if(texcoord2.y<1){
d1=d0=d2=d3=0;
}
}
float2 dbl_uv_MainTex0;
void surf (Input IN, inout SurfaceOutput o) {
//multiply the current vertex texture coordinate by two
dbl_uv_MainTex0 = IN.uv_MainTex0*float2(4,2);
//add an offset to the texture coordinates for each of the input textures
half4 c0 = tex2D (_MainTex0, dbl_uv_MainTex0-float2(0,1));
half4 c1 = tex2D (_MainTex1, dbl_uv_MainTex0-float2(1,1));
half4 c2 = tex2D (_MainTex2, dbl_uv_MainTex0-float2(2,1));
half4 c3 = tex2D (_MainTex3, dbl_uv_MainTex0-float2(3,1));
half4 c4 = tex2D (_MainTex4, dbl_uv_MainTex0);
half4 c5 = tex2D (_MainTex5, dbl_uv_MainTex0-float2(1,0));
half4 c6 = tex2D (_MainTex6, dbl_uv_MainTex0-float2(2,0));
half4 c7 = tex2D (_MainTex7, dbl_uv_MainTex0-float2(3,0));
if(IN.uv_MainTex0.x <1){
if(IN.uv_MainTex0.x >= 0.75)
{
if(IN.uv_MainTex0.y >=0.5){
c0.rgb = c1.rgb = c2.rgb =c4.rgb=c5.rgb=c6.rgb=c7.rgb =0;
}
if(IN.uv_MainTex0.y <0.5){
c0.rgb=c1.rgb=c2.rgb=c3.rgb=c4.rgb=c5.rgb=c6.rgb=0;
}
}
}
if(IN.uv_MainTex0.x > 0.5){
if(IN.uv_MainTex0.x < 0.75)
{
if(IN.uv_MainTex0.y >= 0.5){
c3.rgb = c1.rgb = c0.rgb =c4.rgb=c5.rgb=c6.rgb=c7.rgb= 0;
}
if(IN.uv_MainTex0.y <0.5){
c0.rgb=c1.rgb=c2.rgb=c3.rgb=c4.rgb=c5.rgb=c7.rgb=0;
}
}
}
if(IN.uv_MainTex0.x >0.25){
if(IN.uv_MainTex0.x < 0.5)
{
if(IN.uv_MainTex0.y >= 0.5){
c3.rgb = c2.rgb = c0.rgb =c4.rgb=c5.rgb=c6.rgb=c7.rgb= 0;
}
if(IN.uv_MainTex0.y <0.5){
c0.rgb=c1.rgb=c2.rgb=c3.rgb=c4.rgb=c6.rgb=c7.rgb=0;
}
}
}
if(IN.uv_MainTex0.x <= 0.25){
if(IN.uv_MainTex0.x >0.0)
{
if(IN.uv_MainTex0.y >= 0.5){
c3.rgb = c2.rgb = c1.rgb =c4.rgb=c5.rgb=c6.rgb=c7.rgb= 0;
}
if(IN.uv_MainTex0.y <0.5){
c0.rgb=c1.rgb=c2.rgb=c3.rgb=c5.rgb=c6.rgb=c7.rgb=0;
}
}
}
if(IN.uv_MainTex0.x >1){
if(IN.uv_MainTex0.x <1.25)
{
if(IN.uv_MainTex0.y >= 0.5){
c3.rgb = c2.rgb = c1.rgb =c4.rgb=c5.rgb=c6.rgb=c7.rgb= 0;
c0 = tex2D (_MainTex0, dbl_uv_MainTex0-float2(4,1));
}
if(IN.uv_MainTex0.y <0.5){
c0.rgb=c1.rgb=c2.rgb=c3.rgb=c5.rgb=c6.rgb=c7.rgb=0;
c4 = tex2D (_MainTex4, dbl_uv_MainTex0-float2(4,0));
}
}
}
if(IN.uv_MainTex0.x >1.25){
if(IN.uv_MainTex0.x < 1.5)
{
if(IN.uv_MainTex0.y >= 0.5){
c1 = tex2D (_MainTex1, dbl_uv_MainTex0-float2(5,1));
c3.rgb = c2.rgb = c0.rgb =c4.rgb=c5.rgb=c6.rgb=c7.rgb= 0;
}
if(IN.uv_MainTex0.y <0.5){
c5 = tex2D (_MainTex5, dbl_uv_MainTex0-float2(5,0));
c0.rgb=c1.rgb=c2.rgb=c3.rgb=c4.rgb=c6.rgb=c7.rgb=0;
}
}
}
if(IN.uv_MainTex0.x <2){
if(IN.uv_MainTex0.x >= 1.75)
{
if(IN.uv_MainTex0.y >=0.5){
c3 = tex2D (_MainTex3, dbl_uv_MainTex0-float2(7,1));
c0.rgb = c1.rgb = c2.rgb =c4.rgb=c5.rgb=c6.rgb=c7.rgb =0;
}
if(IN.uv_MainTex0.y <0.5){
c7 = tex2D (_MainTex7, dbl_uv_MainTex0-float2(7,0));
c0.rgb=c1.rgb=c2.rgb=c3.rgb=c4.rgb=c5.rgb=c6.rgb=0;
}
}
}
if(IN.uv_MainTex0.x > 1.5){
if(IN.uv_MainTex0.x < 1.75)
{
if(IN.uv_MainTex0.y >= 0.5){
c2 = tex2D (_MainTex2, dbl_uv_MainTex0-float2(6,1));
c3.rgb = c1.rgb = c0.rgb =c4.rgb=c5.rgb=c6.rgb=c7.rgb= 0;
}
if(IN.uv_MainTex0.y <0.5){
c6 = tex2D (_MainTex6, dbl_uv_MainTex0-float2(6,0));
c0.rgb=c1.rgb=c2.rgb=c3.rgb=c4.rgb=c5.rgb=c7.rgb=0;
}
}
}
if(IN.uv_MainTex0.x <0){
if(IN.uv_MainTex0.x >= -0.25)
{
if(IN.uv_MainTex0.y >=0.5){
c3 = tex2D (_MainTex3, dbl_uv_MainTex0-float2(-1,1));
c0.rgb = c1.rgb = c2.rgb =c4.rgb=c5.rgb=c6.rgb=c7.rgb =0;
}
if(IN.uv_MainTex0.y <0.5){
c7 = tex2D (_MainTex7, dbl_uv_MainTex0-float2(-1,0));
c0.rgb=c1.rgb=c2.rgb=c3.rgb=c4.rgb=c5.rgb=c6.rgb=0;
}
}
}
if(IN.uv_MainTex0.x < -0.25){
if(IN.uv_MainTex0.x > -0.5)
{
if(IN.uv_MainTex0.y >= 0.5){
c2 = tex2D (_MainTex2, dbl_uv_MainTex0-float2(-2,1));
c3.rgb = c1.rgb = c0.rgb =c4.rgb=c5.rgb=c6.rgb=c7.rgb= 0;
}
if(IN.uv_MainTex0.y <0.5){
c6 = tex2D (_MainTex6, dbl_uv_MainTex0-float2(-2,0));
c0.rgb=c1.rgb=c2.rgb=c3.rgb=c4.rgb=c5.rgb=c7.rgb=0;
}
}
}
if(IN.uv_MainTex0.x >-0.75){
if(IN.uv_MainTex0.x < -0.5)
{
if(IN.uv_MainTex0.y >= 0.5){
c3.rgb = c2.rgb = c0.rgb =c4.rgb=c5.rgb=c6.rgb=c7.rgb= 0;
}
if(IN.uv_MainTex0.y <0.5){
c0.rgb=c1.rgb=c2.rgb=c3.rgb=c4.rgb=c6.rgb=c7.rgb=0;
}
}
}
//sum the colors and the alpha, passing them to the Output Surface 'o'
o.Albedo = c0.rgb + c1.rgb + c2.rgb + c3.rgb+c4.rgb+c5.rgb+c6.rgb+c7.rgb;
//o.Albedo = c3.rgb;
o.Alpha = c0.a + c1.a + c2.a + c3.a+c4.a+c5.a+c6.a+c7.a ;
}
ENDCG
}
FallBack "Diffuse"
}