[Unity]基于高度的混合纹理Shader

参考自https://blog.csdn.net/fenglyu/article/details/70183016
最终要实现各种纹理之间能够自然过渡
我们希望沙子会更多的在缝隙里面出现,而石头越高的地方沙子应该要越少,那么就需要知道每一张贴图的深度信息,这里可以把贴图对应的高度图保存在每张贴图的alpha通道。通过对比每张贴图的高度差,就可以知道应该显示哪张贴图了。

用一个高度混合函数封装核心算法

	//高度混合函数
			inline half4 Blend(half depth1,half depth2,half depth3,half depth4,fixed4 control)
			{
				half4 blend;
				//获取混合后的高度通道
				blend.r = depth1*control.r;
				blend.g = depth2*control.g;
				blend.b = depth3*control.b;
				blend.a = depth4*control.a;

				//所有的高度取最大值
				half ma = max(blend.r,max(blend.g,max(blend.b,blend.a)));
				//用原来的高度混合减去偏移后的高度混合,乘以个遮罩防止溢出
				blend = max(blend - ma + _weight ,0) * control;
				//标准化输出
				return blend/(blend.r + blend.g + blend.b + blend.a);

			}

加入光照和法线,得到最终混合纹理图

               //得到混合多通道
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值