Unity地形材质贴图随高度变化


参考自: https://zhuanlan.zhihu.com/p/72410143.

由于项目情况,一些特效插件不能在LWRP渲染管道下运行,因此导入了Amplify Shader Editor 可视化Shader插件完成

1. 导入Amplify Shader Editor插件

在这里插入图片描述

2. 进行可视化Shader编写

打开Window—>Amplify Shader Editor—>OpenCanvas
在这里插入图片描述
图表左上角的白点为创建或保存Shader
在这里插入图片描述
创建WorldPosition节点,Remap节点,以及两个float节点和一个vector2节点,进行连接
在这里插入图片描述
WorldPosition节点用于获取模型在世界空间坐标的位置,因为我们只需要获取Y轴的坐标,因此要将WorldPosition中的Y输出引脚连接至Remap节点,Remap则是将坐标重映射,例如上图则是将MinOld和MaxOld值重新映射成MinNew和MaxNew,输出的则是MinNew和MaxNew之间的值

创建Saturate节点,Lerp节点和两个TextureSample节点,进行连接
在这里插入图片描述
Saturate节点用于限制Remap最后输出的值,如果大于1则返回1,小于0则返回0,将Saturate输出引脚连接至Lerp的Time节点,让材质可以随地形高度来插值变化贴图

3. 给地形赋值材质球进行测试

创建地形后在地形设置里可以更换材质球,但是更换后就不能使用地形笔刷去刷贴图
在这里插入图片描述
在地形上用笔刷刷出一个小山坡测试效果
在这里插入图片描述
贴图可以在材质球里自行更换
在这里插入图片描述

4. 继续编写Shader

将第一组的shader节点复制粘贴出四个
在这里插入图片描述
其中要注意的是Ramap中的MinOld输入引脚连接的是一个高度层中最低的高度值,MaxOld输入引脚则是最高的高度值
在这里插入图片描述
同理Lerp的A,B输入引脚也是如此,A连接两个高度层中下面的那层的贴图,B则是上面那层的贴图
在这里插入图片描述
了解了第一层和第二层的变化逻辑后后面几层的也就容易连了,复制粘贴三组后将第一组的Lerp输出值连接至第二层的Lerp的A引脚,第一层的MaxOld值则是连接至第二层Remap的MinOld引脚
在这里插入图片描述
剩余两层也是这么连接,最终的shader如下
在这里插入图片描述

5. 最终效果

在这里插入图片描述
在这里插入图片描述

PS. 设置材质编辑属性

点击单个变量或贴图节点,在左边一栏Type设置为Property,勾选Auto-Register选项,然后保存shader即可在材质球里设置属性值
在这里插入图片描述
在图表左边最后一个则是shader暴露给材质的属性,可以自行调整顺序
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值