【Unity】ShaderGraph应用(模型膨胀流动)

news2024/11/24 8:42:02

【Unity】ShaderGraph应用(模型膨胀流动)

实现效果

ShaderGraph是 unity的图形化 Shader 编程工具。本文介绍使用ShaderGraph实现模型的膨胀流动效果。该效果可以由于模拟流体在管线中的流动等相关功能。

一、实现的方法

1.使用节点介绍

关键节点

UV:获取模型的uv坐标

Normal Vector:获取模型的法线坐标

Position:获取模型的顶点坐标

计算用节点

Add:加

Subtract:减

MultiPly:乘

Divide:除

Truncate: 取整(直接取小数点前整数部分)

Cosine:cos(输入值弧度,输出值-1到1)

其他节点

Clamp:输入值截取到最大值和最小值

Split:分解

2.实现原理

如上图,可以Cos在弧度0到2 π \pi π上的分布是一个平滑凹型曲线。利用这个特征,可以将uv x轴(或者y轴)0到1的变化拉抻成0到2 π \pi π,通过cos函数的变化,得到该uv位置是cos曲线数值

如上图,模型顶点圈对应是数值垂直分布在x轴的某个数值上,通过计算uv X轴上的值,可以计算该圈的变形数值。

如上图,是模型的顶点法线图,每个顶点的法线都是指向模型膨胀的方向,uv的Cos数值乘上法线就可以得到顶点的膨胀向量

3.实现步骤

  • 拉伸uv的x坐标
  • 截取膨胀范围
  • 转换Cos数值
  • 得到膨胀向量
  • 顶点位移
  • 贴图采样和膨胀高光

(1)拉伸uv的x坐标

变量

  • UVxLong(float):UVxLong的长度的倍数,考虑到uv x轴上的分布有可能不是0到1的,如果uv的x轴的长度是2,UVxLong就是2。用于适应不同长度的uv。

  • Times(float):变化的周期数。

目的:将UV的x轴除去UVxLong标准化uv,x轴乘上 2 π 2\pi 2π(这里没有找到 π \pi π的节点,用6.28代替)

(2)截取膨胀范围

变量

  • Speed(float):Time变化速度

目的:当变化周期大于1时,只让模型上只存在一个膨胀节点。上图使用Clamp截取,截取的范围是0到6.28。

图中Times的作用是给拉伸后的uv累加值,考虑到uv的值会大于周期的最大值,导致无法截取有效范围,故将最大值减当前周期长度,实现循环清零。

(3)转换Cos数值

目的:得到一个完整的凸起(凹陷)数值,为法线提供模长做为依据。

(4)得到膨胀向量

变量:

R:控制膨胀的半径

目的:将法线乘上膨胀的半径,再乘上cos转换后的数值,这里cos转换后的数值是负值,得到的向量和法线是相反的。

(5)顶点位移

目的:由于膨胀向量是反方向,把顶点坐标减去反方向的向量,负负得正,求出顶点坐标。(注意这里的顶点坐标是自身坐标系)

(6)贴图采样和膨胀高光

变量:

  • Textrue:主纹理

  • Color:叠加颜色

目的:这里将2减去cos数值,得到一个正的变化曲线,乘上采样叠加颜色的值,可以使凸起部分的高光。

二、案例

1.案例介绍

完整的shaderGraph

变量面板

Loop:控制膨胀是周期内单个还是多个

2.案例的局限性

要实现完美的膨胀效果,在管线上要尽量布置多的横向节点,在大数量级上会导致顶点过多,影响性能。

变量面板

[外链图片转存中…(img-HqDgmgkc-1691979635787)]

Loop:控制膨胀是周期内单个还是多个

2.案例的局限性

要实现完美的膨胀效果,在管线上要尽量布置多的横向节点,在大数量级上会导致顶点过多,影响性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/874953.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分类预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元多输入分类预测

分类预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元多输入分类预测 目录 分类预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元多输入分类预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.Matlab实现BO-BiGRU贝叶斯优化双向门控循环单元多特征分…

页面切换后,滚动栏问题

项目场景: 提示:react项目antd后台管理系统 问题描述 后台管理系统从a页面进入b页面,a页面有数据(有滚动条,且scollTop大于0),进入b页面后,滚动条不是位于初始位置(scol…

与Docker同行:Tomcat安装指南

😊 作者: 一恍过去 💖 主页: https://blog.csdn.net/zhuocailing3390 🎊 社区: Java技术栈交流 🎉 主题: 与Docker同行:Tomcat安装指南 ⏱️ 创作时间: …

小龟带你妙写排序之插入排序

插入排序 一. 插入排序的原理二. 题目三. 思路分析(图加文字)四. 代码演示 一. 插入排序的原理 在前N个有序的元素,从N个元素之后全是无序的元素,将无序的元素插入到有序的元素中,形成一个有序的数组 二. 题目 给定一个有N个元素的数组&#…

Flowable初体验

创建一个普通Maven项目 目录结构 一、依赖、配置 pom.xml <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apac…

动力节点|深入浅出Vue框架学习教程,带你快速掌握前端开发核心技能

Vue是一款流行的JavaScript前端框架&#xff0c;最初由华人开发者尤雨溪创建&#xff0c;并在GitHub上开源发布&#xff0c;它采用MVVM模型的设计思维&#xff0c;专注于UI项目的开发&#xff0c;能够方便地组织和管理页面上的各个组件&#xff0c;大大提高了前端开发的效率。 …

基于Java+SpringBoot+vue前后端分离卓越导师双选系统设计实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

通讯协议039——全网独有的OPC HDA知识一之聚合(七)实际时间最大值

本文简单介绍OPC HDA规范的基本概念&#xff0c;更多通信资源请登录网信智汇(wangxinzhihui.com)。 本节旨在详细说明HDA聚合的要求和性能。其目的是使HDA聚合标准化&#xff0c;以便HDA客户端能够可靠地预测聚合计算的结果并理解其含义。如果用户需要聚合中的自定义功能&…

Win10使用Guest和空密码访问共享的完整步骤

目录 前言 启动Guest 给予Guest网络权限 允许空密码登陆 启用不安全的来并登陆 总结 前言 我们经常需要使用空密码和guest账户访问Windows共享&#xff0c;因为某些设备不支持输入密码等&#xff0c;那么该如何设置呢&#xff0c;因为步骤比较固定而且繁琐&#xff0c;于…

IDEA常用设置与maven项目部署

目录 前言 一、Idea是什么 二、Idea的优点 三、Idea的常用设置 主题设置 设置鼠标悬浮提示 忽略大小写提示 自动导包 取消单行显示Tabs 设置字体 配置类文档注释信息模版 设置文件编码 设置自动编译 水平或者垂直显示代码 快捷方式改成eclipse 设置默认浏览器…

世微 AP5160 DC-DC降压恒流IC 大功率LED电源手电筒车灯驱动芯片 SOT23-6

产品描述 AP5160 是一款效率高&#xff0c;稳定可靠的 LED 灯恒流驱动芯片&#xff0c;内置高精度比较器&#xff0c;固定关断时 间控制电路&#xff0c;恒流驱动电路等&#xff0c;特别适合大功率 LED 恒流驱动。 AP5160 采用SOT23-6 封装&#xff0c;通过调节外置电流检测电…

电脑运行慢怎么办?四招教你优化速度

电脑运行慢怎么办&#xff1f;电脑运行缓慢是很多人常遇到的问题&#xff0c;而其中一个主要原因是电脑内堆积了过多的垃圾文件。因此&#xff0c;定期清理电脑垃圾是保持电脑流畅运行的重要步骤。 本文将介绍四种有效的方法&#xff0c;帮助你清理电脑垃圾&#xff0c;让电脑…

如何从cpu改为gpu,pytorch,cuda

1.cmd输入nvcc -V 2.得到 cuda版本后&#xff0c;去pytorch官网 3.根据自己的cuda进行选择 4.复制上述链接&#xff0c;进入cmd 5.cmd中输入activate XXX,这里的"XXX"指代自己在工程中用到的环境 6.进入后&#xff0c;将刚才链接粘贴&#xff0c;回车等待下载结束 …

java 解析p12证书 (获取公钥、私钥、序列号)

1. p12文件放在resources目录下 2. P12InfoVo import lombok.Builder; import lombok.Data;import java.io.Serializable; import java.security.PrivateKey; import java.security.PublicKey;/*** p12证书VO*/ Data Builder public class P12InfoVo implements Serializable{/…

最强自动化测试框架Playwright(17)- 模拟接口

模拟接口 介绍 Web API 通常作为 HTTP 终结点实现。Playwright提供了API来模拟和修改网络流量&#xff0c;包括HTTP和HTTPS。页面所做的任何请求&#xff0c;包括 XHR 和获取请求&#xff0c;都可以被跟踪、修改和模拟。使用Playwright&#xff0c;您还可以使用包含页面发出的…

生信豆芽菜-单基因与HRD评分的关系

网址&#xff1a;http://www.sxdyc.com/panCancerHRDScore 该工具主要用于查看单基因在泛癌中与HRD评分的相关性 提交后等待运行成功即可

Qt4/5升级到Qt6吐血经验总结V202308

00&#xff1a;直观总结 增加了很多轮子&#xff0c;同时原有模块拆分的也更细致&#xff0c;估计为了方便拓展个管理。把一些过度封装的东西移除了&#xff08;比如同样的功能有多个函数&#xff09;&#xff0c;保证了只有一个函数执行该功能。把一些Qt5中兼容Qt4的方法废弃…

IDEA项目实践——JavaWeb简介以及Servlet编程实战

系列文章目录 IDEA项目实践——创建Java项目以及创建Maven项目案例、使用数据库连接池创建项目简介 IDEWA项目实践——mybatis的一些基本原理以及案例 IDEA项目实践——动态SQL、关系映射、注解开发 IDEA项目实践——Spring框架简介,以及IOC注解 IDEA项目实践——Spring当…

利用ViewModel和LiveData进行数据管理

利用ViewModel和LiveData进行数据管理 1. 引言 在当今移动应用开发的世界中&#xff0c;数据管理是一个至关重要的方面。随着应用的复杂性不断增加&#xff0c;需要有效地管理和维护应用中的数据。无论是从服务器获取数据、本地数据库存储还是用户界面的状态&#xff0c;数据…

Python方式实现射后不管导弹的简易制导系统

1 问题 对QN-506上的S570智能反坦克制导导弹的射后不管产生了浓厚的兴趣&#xff0c;想用Python简易还原一下。 2 方法 之前查阅资料时了解到使用pygame库制作的贪吃蛇&#xff0c;是否有一种方法能让“贪吃蛇”一直跟着鼠标走呢&#xff1f;鼠标模拟行进中的坦克&#xff0c;“…