fixed4 texNoTileTech1(sampler2D tex, float2 uv) {
float2 iuv = floor(uv);
float2 fuv = frac(uv);
// Generate per-tile transformation
#if defined (USE_HASH)
float4 ofa = hash4(iuv + float2(0, 0));
float4 ofb = hash4(iuv + float2(1, 0));
float4 ofc = hash4(iuv + float2(0, 1));
float4 ofd = hash4(iuv + float2(1, 1));
#else
float4 ofa = tex2D(_NoiseTex, (iuv + float2(0.5, 0.5))/256.0);
float4 ofb = tex2D(_NoiseTex, (iuv + float2(1.5, 0.5))/256.0);
float4 ofc = tex2D(_NoiseTex, (iuv + float2(0.5, 1.5))/256.0);
float4 ofd = tex2D(_NoiseTex, (iuv + float2(1.5, 1.5))/256.0);
#endif
// Compute the correct derivatives
float2 dx = ddx(uv);
float2 dy = ddy(uv);
// Mirror per-tile uvs
ofa.zw = sign(ofa.zw - 0.5);
ofb.zw = sign(ofb.zw - 0.5);
ofc.zw = sign(ofc.zw - 0.5);
ofd.zw = sign(ofd.zw - 0.5);
float2 uva = uv * ofa.zw + ofa.xy, dxa = dx * ofa.zw, dya = dy * ofa.zw;
float2 uvb = uv * ofb.zw + ofb.xy, dxb = dx * ofb.zw, dyb = dy * ofb.zw;
float2 uvc = uv * ofc.zw + ofc.xy, dxc = dx * ofc.zw, dyc = dy * ofc.zw;
float2 uvd = uv * ofd.zw + ofd.xy, dxd = dx * ofd.zw, dyd = dy * ofd.zw;
// Fetch and blend
float2 b = smoothstep(_BlendRatio, 1.0 - _BlendRatio, fuv);
return lerp( lerp(tex2D(tex, uva, dxa, dya), tex2D(tex, uvb, dxb, dyb), b.x),
lerp(tex2D(tex, uvc, dxc, dyc), tex2D(tex, uvd, dxd, dyd), b.x), b.y);
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交