• unity shaderGraph实例-可交互草地


    效果展示

    请添加图片描述

    整体结构

    请添加图片描述

    各区域内容

    区域1

    在这里插入图片描述
    计算交互用的cube和草各个顶点的距离
    此处可以理解为,从cube的中心到草的顶点的距离,其距离是一个从0到整数的过程,如下图
    在这里插入图片描述

    区域2

    在这里插入图片描述
    将距离除以某个值,这个值是交互范围,相当于将白条范围向右移动
    在这里插入图片描述
    然后使用saturate节点将值限制到0-1之内

    区域3

    在这里插入图片描述
    首先上一步已经将值限制到0-1,这一步取反,直观解释就是将黑白条对调,越靠近cube的部分越白,也就代表了对草的顶点shader的影响越强。
    在这里插入图片描述

    区域4

    在这里插入图片描述
    为了移动草的顶点向量,我们需要知道移动方法,用草的顶点位置减去cube的世界坐标即可获得两者的方向

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

    区域5

    在这里插入图片描述
    这一步看似复杂,其实做的事很简单,将区域4中获得顶点偏移量加到草原本的顶点坐标上去,由于草不需要再y轴移动,所以只加x轴和z轴即可。

    区域6

    在这里插入图片描述

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

    区域7

    最后我们需要给一张贴图
    在这里插入图片描述

    材质本身需要设置成透明的

    在这里插入图片描述

    最后需要编写一个脚本,告诉材质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);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

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

    工程下载gitee地址

  • 相关阅读:
    Jackson和fastjson解决序列化时字段属性大小写改变的问题
    Roreg复现
    Web攻防03_MySQL注入_数据请求
    【Vue】创建项目
    PyTorch-线性回归
    计算机网络的功能和特点
    SAS学习8、9(方差分析、anova过程、相关分析和回归分析、corr过程、reg过程、多元线性回归、stepwise)
    百度地图1
    StringUtils 工具类常用方法汇总 2(截取、去除空白、包含、查询索引)
    基于node.js+Vue在线电子商务购物商城系统 Element
  • 原文地址:https://blog.csdn.net/weixin_44568736/article/details/134409530