Unity使用ShaderGraph实现根据坐标控制溶解的位置,物体靠近局部溶解

本文主要是介绍Unity使用ShaderGraph实现根据坐标控制溶解的位置,物体靠近局部溶解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 一、前言
      • 二、运行效果
      • 三、实现原理
        • 1 ShaderGraph部分
        • 2 材质球
        • 3 将材质球赋值给模型
        • 4 C#脚本控制材质球参数
      • 四、运行测试
      • 五、答疑

一、前言

之前我写了一篇文章:ShaderGraph使用教程与各种特效案例:Unity2020
里面介绍了溶解效果的实现,然后有同学留言问了这个问题:
在这里插入图片描述
这篇文章我就来介绍如何实现吧。

二、运行效果

ShaderGraph最终连线图如下
在这里插入图片描述
运行效果如下
在这里插入图片描述
Demo工程已上传到GitHub
地址:https://github.com/linxinfa/UnityShaderGraphNearToDissolve
在这里插入图片描述

三、实现原理

1 ShaderGraph部分

溶解的原理就是利用AlphaClip属性,当AlphaClip的值比Alpha的值大时,则会不显示。
在这里插入图片描述
我们利用一个噪声来作为AlphaClip的输入即可实现溶解的效果。
然后想要根据坐标来控制溶解的范围,比如物体靠近的时候,靠近的位置有溶解的效果,这个怎么做呢?
我们首先暴露一个Vector 3属性:targetpos,它作为目标位置,
在这里插入图片描述
我们要计算这个目标位置距离我们要溶解的模型的顶点坐标的距离,那我们就要知道模型自身的顶点坐标,要用到Position节点,Space选择Absolute World
在这里插入图片描述
有了顶点坐标和targetpos,就可以计算距离了,使用Distance节点。
在这里插入图片描述
我们要的效果是距离近则溶解,而要溶解需要使AlphaClip大于Alpha,也就是说,也就是说距离近要输出更大的值,距离远输出更小的值,所以我们使用RemapDistance的输出做一个映射。
在这里插入图片描述
然后将将Remap的输出与噪声相乘,这样就可以根据距离来控制噪声的范围。
在这里插入图片描述
再接着,就是利用相乘后的输出(一个带范围的噪声)作为AlphaClip的输入了,为了实现一个溶解边缘光的效果,通过两个Step做差即可,连线图如下。
在这里插入图片描述

2 材质球

创建材质球,将上面的ShaderGraph赋值给材质球。
在这里插入图片描述

3 将材质球赋值给模型

创建一个Sphere球体,将材质赋值给它。
在这里插入图片描述
再创建一个Sphere2,用来靠近Sphere
在这里插入图片描述

4 C#脚本控制材质球参数

创建一个C#脚本:Main.cs,用来控制材质球的参数。

using UnityEngine;/// <summary>
/// 该脚本挂在要溶解的物体上
/// </summary>
public class Main : MonoBehaviour
{/// <summary>/// 材质球/// </summary>public Material mat;/// <summary>/// 要靠近过来的物体/// </summary>public Transform m_targetObj;// Update is called once per framevoid Update(){mat.SetVector("Vector3_B45F07CF", m_targetObj.position);}
}

Main.cs脚本挂到Sphere球体上,赋值对应的public变量。
在这里插入图片描述

四、运行测试

运行效果如下
在这里插入图片描述
可以调节strength属性来修改溶解强度
在这里插入图片描述


五、答疑

有同学私信我,问我如何实现相反的效果。
在这里插入图片描述
其实很简单,只需调整下如下几个地方,
在这里插入图片描述
运行效果如下:(注:这次我用的是Unity 2020.2.7f1c1,光照效果与Unity 2019有所差异)
在这里插入图片描述

这篇关于Unity使用ShaderGraph实现根据坐标控制溶解的位置,物体靠近局部溶解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/linxinfa/article/details/112555890
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/683848

相关文章

MySQL中优化CPU使用的详细指南

《MySQL中优化CPU使用的详细指南》优化MySQL的CPU使用可以显著提高数据库的性能和响应时间,本文为大家整理了一些优化CPU使用的方法,大家可以根据需要进行选择... 目录一、优化查询和索引1.1 优化查询语句1.2 创建和优化索引1.3 避免全表扫描二、调整mysql配置参数2.1 调整线程数2.

C#中SortedSet的具体使用

《C#中SortedSet的具体使用》SortedSet是.NETFramework4.0引入的一个泛型集合类,它实现了一个自动排序的集合,内部使用红黑树数据结构来维护元素的有序性,下面就来介绍一下如... 目录基础概念主要特性创建和初始化基本创建方式自定义比较器基本操作添加和删除元素查询操作范围查询集合运

C# Opacity 不透明度的具体使用

《C#Opacity不透明度的具体使用》本文主要介绍了C#Opacity不透明度的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录WinFormsOpacity以下是一些使用Opacity属性的示例:设置窗体的透明度:设置按钮的透

基于Python实现温度单位转换器(新手版)

《基于Python实现温度单位转换器(新手版)》这篇文章主要为大家详细介绍了如何基于Python实现温度单位转换器,主要是将摄氏温度(C)和华氏温度(F)相互转换,下面小编就来和大家简单介绍一下吧... 目录为什么选择温度转换器作为第一个项目项目概述所需基础知识实现步骤详解1. 温度转换公式2. 用户输入处

MySQL实现多源复制的示例代码

《MySQL实现多源复制的示例代码》MySQL的多源复制允许一个从服务器从多个主服务器复制数据,这在需要将多个数据源汇聚到一个数据库实例时非常有用,下面就来详细的介绍一下,感兴趣的可以了解一下... 目录一、多源复制原理二、多源复制配置步骤2.1 主服务器配置Master1配置Master2配置2.2 从服

Java实现TXT文件导入功能的详细步骤

《Java实现TXT文件导入功能的详细步骤》在实际开发中,很多应用场景需要将用户上传的TXT文件进行解析,并将文件中的数据导入到数据库或其他存储系统中,本文将演示如何用Java实现一个基本的TXT文件... 目录前言1. 项目需求分析2. 示例文件格式3. 实现步骤3.1. 准备数据库(假设使用 mysql

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

SpringBoot集成P6Spy的实现示例

《SpringBoot集成P6Spy的实现示例》本文主要介绍了SpringBoot集成P6Spy的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录本节目标P6Spy简介抛出问题集成P6Spy1. SpringBoot三板斧之加入依赖2. 修改

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结