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

地形材质贴图随高度变化

  • 1. 导入Amplify Shader Editor插件
  • 2. 进行可视化Shader编写
  • 3. 给地形赋值材质球进行测试
  • 4. 继续编写Shader
  • 5. 最终效果
  • PS. 设置材质编辑属性

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

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

1. 导入Amplify Shader Editor插件

Unity地形材质贴图随高度变化_第1张图片

2. 进行可视化Shader编写

打开Window—>Amplify Shader Editor—>OpenCanvas
Unity地形材质贴图随高度变化_第2张图片
图表左上角的白点为创建或保存Shader
Unity地形材质贴图随高度变化_第3张图片
创建WorldPosition节点,Remap节点,以及两个float节点和一个vector2节点,进行连接
Unity地形材质贴图随高度变化_第4张图片
WorldPosition节点用于获取模型在世界空间坐标的位置,因为我们只需要获取Y轴的坐标,因此要将WorldPosition中的Y输出引脚连接至Remap节点,Remap则是将坐标重映射,例如上图则是将MinOld和MaxOld值重新映射成MinNew和MaxNew,输出的则是MinNew和MaxNew之间的值

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

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

创建地形后在地形设置里可以更换材质球,但是更换后就不能使用地形笔刷去刷贴图
Unity地形材质贴图随高度变化_第6张图片
在地形上用笔刷刷出一个小山坡测试效果
Unity地形材质贴图随高度变化_第7张图片
贴图可以在材质球里自行更换
Unity地形材质贴图随高度变化_第8张图片

4. 继续编写Shader

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

5. 最终效果

Unity地形材质贴图随高度变化_第13张图片
Unity地形材质贴图随高度变化_第14张图片

PS. 设置材质编辑属性

点击单个变量或贴图节点,在左边一栏Type设置为Property,勾选Auto-Register选项,然后保存shader即可在材质球里设置属性值
Unity地形材质贴图随高度变化_第15张图片
在图表左边最后一个则是shader暴露给材质的属性,可以自行调整顺序
Unity地形材质贴图随高度变化_第16张图片

你可能感兴趣的:(unity,Shader,游戏开发,shader)