随机平铺

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);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值