当前位置: 首页 > article >正文

【案例】旗帜飘动

开发平台:Unity 6.0
开发工具:Shader Graph
参考视频:Unity Shader Graph 旗帜飘动特效

一、效果图


在这里插入图片描述

二、Shader Graph 路线图


在这里插入图片描述

三、案例分析


核心思路:顶点偏移计算 与 顶点偏移忽略

3.1 纹理偏移


在这里插入图片描述
视觉上让旗帜保持动态飘动,需要 Time(时间节点)做持续性更新。(等同于 Update 中每帧执行一次更新)最终的目的是多次向后续流程输出 UV 信息。而非仅一次。

3.2 噪点

在这里插入图片描述
在模拟旗帜浮动表现上,引入 Gradient Noise(渐变噪声节点)- 按比例随机生成的随机值。来达到其效果。

Remap(线性插值节点):限制 Gradient Noise(渐变噪声节点)输出值范围。如下图所示区别

图1 Out Min Max = 0 - 1
图2 Out Min Max = 0 - 0.3

在 Time(时间节点)加持下的动态噪声值 作为顶点偏移的最终使用值。

3.3 顶点偏移

在这里插入图片描述
视觉表现上,模型顶点的最终位置信息 = 模型顶点位置 + 顶点偏移位置。

注意:此处仅使用模型法线方向 * 噪声值作为 顶点偏移位置。故旗帜漂浮表现多为水平方向。

如果需要有XYZ三方向的变化

替换 Normal Vector(法线坐标节点)为 变量 Vector3 作为输入。

图1 使用 Vector3 输入
图2 使用 Normal Vector 输入

3.3 限制偏移


在这里插入图片描述
对偏移进行限制是因为之前的 “旗帜飘动” 是基于整张 Texture2D 进行。效果比对如下:

图1 增加限制
图2 无限制

Lerp(插值节点)用于限制值域与插值表现。

已知 漂浮偏移后的顶点位置 ≥ 旗帜飘动的幅度时的顶点偏移位置值 ≥ 默认平面顶点位置。目的是限制旗帜横向上偏移幅度。将 UV 值按照该插值计算,截取 U 值,可得到当 U = 0 时,旗帜最左边顶点保持不动。

关于使用 Step(限制最小值节点)

将 UV 中的 U 值接入 Step(限制最小值节点) 中,交由 Lerp(插值节点)依然可以实现上述效果,改变 Strep(限制最小值节点)下 Edge 值可适当影响旗帜变化。但效果上不如前者更易调整。
在这里插入图片描述

3.4 纹理贴图加入


在这里插入图片描述
加入 Texture2D 与 Sample Texture2D(纹理采样节点) 即可。

四、关于其他问题


仅依靠 Unity 内置 Plane 是无法制作旗帜模型。其原因是定点数少导致的变形无法或效果不如意。

如何解决
在 Blender \ Maya 等专业建模软件中准备一个表面细分高的模型导入至 Unity 中即可。


http://www.kler.cn/a/381999.html

相关文章:

  • openEuler的aarch64操作系统上安装k3s
  • 初识HTML
  • 2024年【汽车修理工(高级)】考试总结及汽车修理工(高级)试题及解析
  • Git使用指南
  • 程序中怎样用最简单方法实现写excel文档
  • A010-基于SpringBoot的宠物健康咨询系统的设计与实现
  • 详解原型模式
  • 光伏设计软件如何快速上手?
  • IntelliJ Idea设置自定义快捷键
  • 跳蚤市场之商品发布功能
  • AI之硬件对比:据传英伟达Nvidia2025年将推出RTX 5090-32GB/RTX 5080-24GB、华为2025年推出910C/910D
  • 设计模式之——简单工厂模式
  • 树状数组(Binary Indexed Tree/Fenwick Tree)详解
  • ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源 或者超时失效
  • Java并发常见面试题总结(下)
  • 25.停车场管理系统(基于web的Java项目)
  • SpringBoot day 1105
  • springcloud各组件说明
  • ctfshow(89,90,92,93)--PHP特性--intval函数
  • 【RDD算子的分类】RDD的转换算子和触发算子(行为算子)、以及各个算子的作用,对比sql中的关键字
  • 【系统架构设计师(第2版)】十一、未来信息综合技术
  • Hearts of Iron IV 之 Archive Modification
  • HTML+javaScript+CSS
  • 【个人记录】screen和tmux
  • “农田奇迹:如何用遥感技术实现作物分类与产量精准估算“
  • Java:获取HttpServletRequest请求参数