Unity之视觉特效篇

这篇文章记录我在制作项目–unity-vfx-testbed的一些方法以及心得

建议翻墙浏览我的Github项目

20200729

效果预览

shadergraph制作部分

shadergraph部分需要实现的效果是:狮子由头部到底座的溶解效果

制作思路图:

graph TD
A(狮子模型材质赋予贴图) -->|BaseColor/Normal/Specualr|E(获取狮子的自身位置) --> |Position&#40Space:Object&#41|B(提取狮子Y轴的位置) --> C(Fragment的Alpha做消融效果)
B --> D(Fragment的Emission做发光边缘效果)

visual effect graph制作部分

vfx部分需要实现的效果是:狮子由头到底座生成cubes的效果

制作思路图:

graph TD
A(获取狮子模型网格) -->|Point Cache Bake Tool|B(得到狮子的PointCache) --> |set position from map|C(设置狮子的pointcache位置) --> D(提取pointcache的Y轴位置) --> E(生成Cubes)

Cube的BaseColor贴图细节:

这张贴图里有两种效果,一种是带边框的,一种是不带边框的。使用到的贴图如下

随机应用这两种效果:


20200802

效果预览

visual effect graph制作部分

  1. Output Particle Quad的UV Mode为:Flipbook Blend

  2. 设置Use Soft Particle为True

  3. 设置Flip Book Size为(2,2)

  4. MainTexture用到这张贴图模拟火焰效果:

  1. 生成该贴图后对粒子进行这几步操作:
    graph TD
    A(Set Velocity Random) --> B(Set Lifetime Random) --> C(Set Angle.XYZ Random) --> D(Face Camera Plane) --> E(Set Size Random & over Life) -->F(Set Color and Alpha over Life)
    

枪口旋转制作部分

把炮台下的pivot拖入代码中,代码如下:

Controller.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using UnityEngine;

public class Controller : MonoBehaviour
{
public GameObject pivot;
public float rotateSpeed= 20;

void Update()
{
if(Input.GetKey(KeyCode.A))
{
pivot.transform.Rotate(new Vector3(0, -rotateSpeed * Time.deltaTime, 0));
}
if (Input.GetKey(KeyCode.D))
{
pivot.transform.Rotate(new Vector3(0, rotateSpeed * Time.deltaTime, 0));
}
}
}

20210830

效果预览

visual effect graph制作部分

主要使用Value Noise 3D贴图做动态效果

制作流程图:

graph TD
A(Set Position&#40Sequential:ThreeDimensional&#41) -->
B(Set Size) -->
C(Set Scale&#40Make particle looks like cuboid&#41) -->
D(Set pivot) -->
E(Set Angle.XYZ)

light制作部分

从这个视角去看灯光效果会更直观:

请参考 Unity之灯光篇


20210906

效果预览

a效果与b效果说明

这两个效果是由256个粒子组成(16px * 16px),但制作的方式不同,在此分开讨论

使用16px * 16px的灰度贴图制作,每个格子代表一个像素,图片如下

可以很直观地看到“Jp”的样式,该方法就是根据您所制作的灰度图去生成粒子黑白两种颜色

您也可以使用rgb贴图去生成多种颜色

导入的贴图要做以下更改,分辨率一定要等于2的指数,其他保持默认

使用vector2传入粒子的位置,如图所示

需要改变的粒子就能够被控制

粒子随机更改样式

Main Texture设置为以下贴图,Uv Mode改为Filpbook, Filp Book Size改为(2,2)

使用PartieID先把粒子转换成16*16的uv坐标,再结合Noise2D + TotalTime赋予随机噪音,再把Noise传回SetTexIndex,如下图所示

关于自定义Subgraph Operator说明

  • particleId to coordinate
  • articleId to position
  • particleId to uv

20210915

效果预览

效果说明

此效果是根据RenderTexure的内容映射到粒子效果中,关键是如何提取rt的uv以及颜色

20210906 -> 关于自定义Subgraph-Operator说明 -> particleID to uv 的方法类似


20210923

效果预览

效果说明

粒子汇聚成一只鹰的形状

用到的技术是Signed Distance Field,简称SDF,在此就不赘述SDF的重要性以及应用领域了

如何制作SDF

继Unity 2021.2之后的版本,即当你下载HDRP v12.0.0这个Package后,会自动附带下载 v12.0.0的Visual Effect Graph,v12的VEG加入了SDF Bake Tool功能,路径为: Window --> Visual Effects --> Utilities --> SDF Bake Tool


后记

欢迎留言或使用邮箱跟我一起探讨与勘误文章内容