unity shaderGraph实例-可交互草地

文章目录

    • 效果展示
    • 整体结构
    • 各区域内容
      • 区域1
      • 区域2
      • 区域3
      • 区域4
      • 区域5
      • 区域6
      • 区域7
      • GraphSetttings

效果展示

unity shaderGraph实例-可交互草地_第1张图片

整体结构

unity shaderGraph实例-可交互草地_第2张图片

各区域内容

区域1

unity shaderGraph实例-可交互草地_第3张图片
计算交互用的cube和草各个顶点的距离
此处可以理解为,从cube的中心到草的顶点的距离,其距离是一个从0到整数的过程,如下图
unity shaderGraph实例-可交互草地_第4张图片

区域2

unity shaderGraph实例-可交互草地_第5张图片
将距离除以某个值,这个值是交互范围,相当于将白条范围向右移动
unity shaderGraph实例-可交互草地_第6张图片
然后使用saturate节点将值限制到0-1之内

区域3

unity shaderGraph实例-可交互草地_第7张图片
首先上一步已经将值限制到0-1,这一步取反,直观解释就是将黑白条对调,越靠近cube的部分越白,也就代表了对草的顶点shader的影响越强。
unity shaderGraph实例-可交互草地_第8张图片

区域4

unity shaderGraph实例-可交互草地_第9张图片
为了移动草的顶点向量,我们需要知道移动方法,用草的顶点位置减去cube的世界坐标即可获得两者的方向

然后和区域3中计算出的影响力度相乘,即可得到越靠近,顶点偏移越大的效果。

区域5

unity shaderGraph实例-可交互草地_第10张图片
这一步看似复杂,其实做的事很简单,将区域4中获得顶点偏移量加到草原本的顶点坐标上去,由于草不需要再y轴移动,所以只加x轴和z轴即可。

区域6

unity shaderGraph实例-可交互草地_第11张图片

在草移动时,我们不需要草的根部移动,所以我们使用了顶点颜色,即在制作草的模型的时候,在根部的顶点处添加了顶点颜色(注意不是贴图的颜色)为黑色,可交互部分为白色,这样可以通过一个Lerp,在不需要移动的区域和需要移动的区域里平滑过渡,当然这里也可以用顶点坐标计算。

区域7

最后我们需要给一张贴图
unity shaderGraph实例-可交互草地_第12张图片

GraphSetttings

unity shaderGraph实例-可交互草地_第13张图片

最后需要编写一个脚本,告诉材质cube在哪

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TrackPosition : MonoBehaviour
{
    public Material grassMat;
    private void Update()
    {
        grassMat.SetVector("_TrackerPosition_v3", transform.position);
    }
}

然后挂到cube上,将材质球拖到属性里即可

工程下载gitee地址

你可能感兴趣的:(unity,shader,unity)