Unity之ShaderGraph如何实现靠近显示溶解效果

编程入门 行业动态 更新时间:2024-10-27 22:34:50

Unity之ShaderGraph<a href=https://www.elefans.com/category/jswz/34/1769177.html style=如何实现靠近显示溶解效果"/>

Unity之ShaderGraph如何实现靠近显示溶解效果

前言

今天我们来实现一个我再B站看到的一个使用LeapMotion实现的用手部触摸就可以显示的溶解效果。
效果如下图所示:

主要节点

Position:提供对网格顶点或片段的Position 的访问,具体取决于节点所属图形部分的有效着色器阶段。使用Space下拉参数选择输出值的坐标空间。

Remap:基于输入 In 值在输入In Min Max的 x 和 y 分量之间的线性插值,返回输入Out Min Max的 x 和 y 分量之间的值

SimpleNoise:根据输入UV生成简单噪声或Value噪声。生成的噪声的大小由输入Scale控制。

OneMinuts:返回输入In减去 1的结果。

原理

首先我们知道Alpha Clip Trreshold可以控制物体的溶解,我们暴露一个属性Vector3,以他作为目标位置,然后我们计算这个目标位置距离沃恩要溶解的模型的顶点坐标的距离,当距离小于一定半径,我们就设置物体显示,否则就消除物体。然后我们可以使用SimpleNoise噪波图对结果进行一个相乘,这样就可以实现一个溶解的效果了。

最终连线

实时控制TargetPos的位置

我们创建一个球体或者一个任意手部模型,然后通过Update实时更新Shader的TargetPos的位置,就可以实现开始B站的LeapMotion视频的效果

using UnityEngine;[ExecuteInEditMode]
public class ShaderPositionBinder : MonoBehaviour
{public Transform m_Target;private Renderer m_Renderer;private Vector4 m_Value;private static readonly int Position = Shader.PropertyToID("_Position");// private static readonly int Radius = Shader.PropertyToID("_Radius");void Start(){m_Renderer = gameObject.GetComponent<Renderer>();}void Update(){var position = m_Target.position;m_Value.Set(position.x, position.y, position.z, 1);m_Renderer.material.SetVector(Position, m_Value);// m_Renderer.material.SetFloat(Radius, m_Target.localScale.x);}
}

然后我们把需要操作的球体或者手部模型拖拽到Target的位置,可以可以看到如下效果。

效果

更多推荐

Unity之ShaderGraph如何实现靠近显示溶解效果

本文发布于:2023-12-06 02:47:16,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1666218.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何实现   效果   Unity   ShaderGraph

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!