Easy Decal组件操作手册

1.概述

easy decal提供了⼀个⾮常简化的⼯作流程,可以在您的游戏世界中放置贴花(decal)。Easy Decal 系统⽀持从视差遮挡(parallax occclusion)到透明的各种着⾊器和材质。您可以在任何地⽅添加细节并将您的游戏环境升级到⼀个新的⽔平。

2.⽤法

2.1 创建新贴花

要从头开始创建新贴花,请按照以下步骤操作。

1 创建一个empty GameObject Create -> Create Empty 或者 GameObject -> Create Empty。

2 给这个GameObject取⼀个有意义的名字。例如:Dirt Decal 。然后挂接上EasyDecal组件。

3 在项⽬视图中创建一个材质球,将刚刚创建的材质球分配到Easy Decal。

4 将贴花放置在 3D 空间中。您可以像任何其他对象⼀样移动、旋转和缩放贴花对象。在场景中放置贴花时,使⽤智能放置(Smart Placement)⼯具来定位它们。

2.2 创建静态Mesh Proxy Collection

如果您需要包含没有碰撞盒组件的静态⽹格物体,则在设计时必须使⽤StaticProxyCollection(静态代理集合)并注册GameObject。

请注意,这些对象⽆法直接接收贴花,因为它们没有碰撞盒组件,但它们的⼏何网格可以作为附加⽬标,包含在 Box Projector 中。代理集合完全是为了替代对撞机。

  1. 创建⼀个empty GameObject
  2. 添加⼀个StaticProxyCollection组件
  3. ⼿动添加所有的投影器要往上面贴上贴花的,且不带碰撞器组件的GameObject
  4. 使⽤内置的Unity 3D对象(比如Cube,Sphere等预制的模型)时,您必须指定⽹格代理(mesh proxies)的输出路径。这路径是相对于您的项⽬⽬录的相对目录。所有代理资产都存储在此⽂件夹中。
  5. 按 【Build Proxies】按钮,初始化投影器使⽤的顶点列表。
  6. 或者,您可以按【Find static Objects】按钮。⾃动搜索⽆碰撞器组件的静态的GameObject
  7. 要注册代理集合,只需在加载场景后添加此⾏。
1//Assign the proxy collection for the level here
2public StaticProxyCollection ProxyCollection;
3public void Start()
4{
5	// Set the proxy collection
6	EasyDecal.SetStaticProxyCollection(ProxyCollection);
7}

要解除代理集合的注册,只需在加载场景后添加此⾏。

1// Set the proxy collection
2EasyDecal.SetStaticProxyCollection(null);

2.3 复制贴花

复制贴花有四种不同的⽅法:

2.3.1 浅层复制 (Shallow Duplication)

WIN MAC
CTRL + D CMD + D

标准复制操作(standard duplication )制作贴花对象的浅拷⻉(shallow copy)。⼏何图形贴花实例之间共享。这种复制模式适⽤于相似表⾯上的贴花(例如 在平坦的墙壁或地板上)。作为原始数据的贴花还会存在。

2.3.2 预制复制(Prefab Duplication)

WIN MAC
Shift + D Shift + D

如果贴花是预制件的实例,则会实例化⼀个新实例,否则系统会创建当前贴花对象的深拷贝(deepcopy)。这种复制模式适⽤于预制贴花。原来的贴花还在。作为原始数据的贴花还会存在。

2.3.3 深度复制 (Deep Duplication)

WIN MAC
ALT + D ALT + D

深度复制对贴花对象进⾏深度复制。⼏何图形被克隆并且不在实例之间共享。这种复制模式适⽤于需要相同属性,但需要放置在不同表⾯上的贴花。作为原始数据的贴花还会存在。

2.3.4 转换为⽹格

WIN MAC
ALT + D ALT + D

将选定贴花转换为⽹格,并将其放置在场景根节点中。作为原始数据的贴花还会存在。

2.4 延迟贴花掩蔽 (Deferred Decal Masking)

与⽹格贴花相⽐,延迟贴花(Deferred Decal)具有许多优势。但它们也有⼀个明显的缺点:它们不能作为常规⽹格贴花进⾏图层选择(layer-masked ),因为它们会应⽤在屏幕空间中。

延迟贴花需要在着⾊器级别上进⾏选择(be masked on the shader level)。每个不应接收延迟贴花的对象都必须在其材质中使⽤以下着⾊器之⼀:

  • Standard DSSD Mask (Metallic)
  • Standard DSSD Mask (Specular)

3 投影器

3.1 平⾯投影器

平⾯投影器使⽤光线投射的方式,将具有预定义分辨率(predefined resolution)的平⾯网格投影到接收器上。平⾯技术应该⽤于简单的表⾯。

这种投影器,性能主要受Resolution属性影响。适用于简单的表⾯和或者是凸面。缺点如下

  • 可能会在复杂曲⾯上创建不必要的⼏何图形
  • 总是需要接收器带有碰撞盒组件。
  • 不⼀定和接收器的⼏何形状密贴

3.1.1 专⽤设置

参数名称 描述
Projection Mode 投影模式 1 Surface Normal:贴花与接收器的距离由接收者⾯部的法向量确定。2 Projection Normal:贴花与接收器的距离由投影射线的⽅向⽮量确定。
Resolution 动态⼏何体(dynamic geometry)的分辨率。与不平坦凹凸不平的接收器⼀起使⽤时增加此值。⼩⼼这个值,每增加1步都会使⼏何图形加倍。过⾼的值可能会导致性能影响。
Vertex Color Bleed 在贴花的边缘启⽤淡出效果。该效果仅适⽤于⽀持顶点颜⾊的平⾯投影器和着⾊器。请注意分辨率设置,这些设置可能会影响性能。仅在确实需要时才增加此值。对于平⾯,值 0就⾜够了

3.2 盒式投影器

盒式投影器会往该投影器与接收器相交所切出的那一片区域进行贴花。盒⼦技术应该⽤于复杂的表⾯。

这种投影器,性能受贴花本身的世界空间⼤⼩,以及接收器的⼏何复杂度影响。最适合用于有复杂曲⾯的接收器。缺点如下

  • 可能会在平⾯上创建不必要的⼏何图形
  • 性能取决于贴花的⼤⼩

3.3 蒙⽪盒投影器

本投影器会往该投影器与使用了蒙皮网格的接收器相交所切出的那一片区域进行贴花。蒙⽪盒投影器⽬前仅⽀持⼀个蒙⽪⽹格作为⼏何源。

这种投影器,性能受贴花本身的世界空间⼤⼩,接收器的蒙皮网格的⼏何复杂度,以及蒙皮网格骨骼数影响。最适合用于有复杂曲⾯的接收器。缺点如下

  • 仅适⽤于蒙⽪⽹格
  • 性能取决于贴花的⼤⼩

3.3.1 专⽤设置

参数名称 描述
Skinning Quality 蒙⽪⽹格贴花的质量级别。Auto:使⽤ Unity 的质量设置来确定蒙⽪质量。Bone 1:使⽤ 1 个⻣骼来影响顶点的变形。Bone 2:使⽤ 2 个⻣骼来影响顶点的变形。Bone 4:使⽤ 4 个⻣骼来影响顶点的变形。

3.4 延迟贴花投影器

延迟贴花投影器在屏幕空间中渲染贴花。在光照通过之前,不同的纹理贴图被写⼊各⾃的 g-buffer。 性能受贴花的屏幕空间⼤⼩的影响。最适合复杂曲⾯。以及需要适当阴影接收的透明贴花。缺点如下:

  • 不能分批(batched)
  • 仅适⽤于延迟渲染路径
  • 仅适⽤于透视相机
  • 约束选项有限

3.4.1 专⽤设置

参数名称 描述
Buffer 要写⼊的缓冲区类型。Diffuse:写⼊漫反射颜色缓冲区。 Normal :写入法线缓冲区
Is Dynamic 确定贴花在⽣成后是否需要更改其变换信息。

3.5 屏幕空间投影器

此投影器在屏幕空间中渲染贴花。⽬前,只有多重混合(multiply blending )模式可⽤。

性能受贴花的屏幕空间⼤⼩影响。最适合复杂曲⾯,前向渲染路径中的屏幕空间贴花。缺点如下

  • 不能分批(batched)
  • 如果渲染器是OpenGL的话仅适⽤于透视相机
  • 没有约束选项有限

4 贴花管理器

贴花管理器窗⼝可⽤于显⽰和管理场景中当前存在的所有贴花,并将共享相同图集的贴花组合到同一个Draw call中。

4.1 合并⼀个图集组

点击菜单Window > Easy Decal 打开贴花管理器 点击窗口的【Atlas Groups】 选项卡,并单击您想要拥有的组的组合按钮。该组中的所有原始贴花都会⾃动停⽤。 现在combined group共享⼏何体和材质,并且combined goup是[Decal Root] 场景中的游戏对象。 要分离⼀个combined group,只需转到【Combined Groups】选项卡并单击您想要分离的组对应的按钮

5 纹理图集

与单⼀纹理贴花相⽐,纹理图集引⼊了⼏个优点。

  1. 在设计时放置的贴花可以组合到只使⽤⼀次绘制调⽤的组中。
  2. 只加载⼀个⼤图集⽐加载⼏个较⼩的纹理要快得多。
  3. 贴花可以共享⼀种材质。
  4. 减少了设备级别的纹理交换。

5.1 创建⼀个新的纹理图集。

请按照以下步骤从头开始创建新的纹理图集。

导航到要在其中创建图集的⽂件夹。 右键单击以打开上下⽂菜单。 点击 【Create > Easy Decal > Texture Atlas】菜单. 在项⽬视图中选择创建的图集对象。 指定材质
打开地图集编辑器,以创建或更改图集的不同区域。 单击绿⾊的添加按钮,根据需要创建尽可能多的区域。 或者,可以通过按住 CTRL 键并选择选取框⼯具来创建连续区域。 可以通过单击编辑按钮或直接选择区域来编辑现有区域画布 可以使⽤箭头⼯具移动活动区域或调整其⼤⼩。 也可以通过使⽤选取框⼯具定义新选择来覆盖活动区域。 对区域所做的更改,可以通过单击画布上的空⽩位置,或按下回车键

6 运⾏时实例化

6.1 ⽰例 1:弹孔

以下代码⽚段在撞击(⿏标)位置实例化了⼀个弹孔预制件。

EasyDecal.ProjectAt⽅法还在接收器的局部空间中实例化贴花,并将贴花的父对象设置为接收器。

 1using UnityEngine;
 2using ch.sycoforge.Decal;
 3public EasyDecal DecalPrefab;
 4void Update()
 5{
 6	if (Input.GetMouseButtonUp(0))
 7	{
 8		// Shoot a ray thru the camera
 9		Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
10		RaycastHit hit;
11		// Check if ray hit something
12		if (Physics.Raycast(ray, out hit, 200))
13		{
14			// Instantiate the decal prefab according the hit normal
15			EasyDecal.ProjectAt(DecalPrefab.gameObject,
16			hit.collider.gameObject, hit.point, hit.normal);
17		}
18	}
19}

6.2 ⽰例2:简单实例化

以下代码⽚段在游戏世界中的指定位置实例化贴花预制件。

EasyDecal.ProjectAt⽅法以给定的旋转在给定位置实例化贴花预制件。

1using UnityEngine;
2using ch.sycoforge.Decal;
3public EasyDecal DecalPrefab;
4public GameObject Target;
5void Start()
6{
7	// Instantiate the decal prefab as child of the Target GameObject
8	EasyDecal.Project(DecalPrefab.gameObject,Target, Vector3.zero, Quaternion.identity);
9}

7 Smart Placement

Smart Placement系统可帮助您将贴花定位在 3D 空间中,⽽⽆需使⽤标准转换⼿柄。Smart Placement功能⽬前处于测试状态。

热键 描述
Ctrl+Alt+LMB [拖动] 移动表⾯上的贴花。
Ctrl+Alt+MMB [拖动↕] 缩放贴花,同时保持其纵横⽐。
Ctrl+Alt+RMB [拖动↕] 沿投影⽅向旋转贴花。
Ctrl+Alt+滚轮 [旋转] 更改图集索引。
Ctrl+Alt+LMB [单击] 将贴花沿投影⽅向旋转 90 度(顺时针)。
Ctrl+Alt+MMB [单击] 选择随机图集索引。
Ctrl+LMB [拖动↕] ⽔平缩放贴花。
Ctrl+MMB [拖动↕] 沿局部 z 轴缩放贴花。(⻓⽅体投影)
Ctrl+RMB [拖动↕] 垂直缩放贴花。
Ctrl+滚轮 [旋转] 逐步增加贴花⽹格的质量步骤(平⾯投影)

8 Interface

8.1 概述

参数名称 描述
Mask 贴花系统将在哪些层的GameObject上生效
Technique ⽤于⽣成贴花的投影器类型。
Projection Mode 投影模式。 Surface Normal:与接收者的距离由接收者⾯部的法向量确定。Projection Normal:与接收器的距离由投影射线的⽅向⽮量确定。
Projection Target 本属性仅对盒式投影器生效。 将单个⽹格对象定义为投影⽬标。所有其他都被忽略。这对于移动⻔等物体很有⽤。
Quality 生成贴花的⼏何体的质量。与凹凸不怕的接收器⼀起使⽤时增加此值。
Vertex Color Bleed 在贴花的边缘启⽤淡出效果。该效果仅适⽤于⽀持顶点颜⾊的平⾯投影器和着⾊器。
Distance 贴花到⽬标投影区域(接收器)的距离。如果您想使⽤较低的质量级别,则增加此值,并且贴花应放置在凹凸不平的接收器上
Decal Material ⽤于渲染贴花的材质。
Aspect Mode None:⽆论实际 UV 矩形的纵横⽐如何,贴花都会继承预制件的⽐例或API ⽅法中指定的⽐例。Width:贴花保持其宽度,⾼度根据 UV 矩形的纵横⽐计算。Height:贴花保持其⾼度,宽度根据 UV 矩形的纵横⽐计算。

简易贴花 ‒ 版本 2019.2

8.2 Geometry

参数名称 描述
Bake Geometry 启⽤此选项以烘焙⼏何体。烘焙贴花的⼏何图形后,贴花将跳过动态更新过程。烘焙贴花在编辑器中以及运⾏时花费更少的 CPU 时间。
Calculate Normals 在动态⽹格系统中启⽤法线计算。如果接收器没有任何法线信息或您希望重新计算法线,请启⽤此选项。
Smooth 启⽤正常平滑。
Smooth - Factor 平滑的强度 [0..1]。其中 0(零)表⽰完全不平滑,1(⼀)表⽰完全平滑。
Smooth - Threshold 平滑应该开始⽣效的倾斜阈值。使⽤此值来控制锐利边缘的平滑量。
Calculate Tangents 在动态⽹格系统中启⽤切线计算。如果您使⽤需要切线信息才能正常⼯作的着⾊器(例如凹凸着⾊器),请启⽤此选项。
Double Sided 已弃⽤使⽤双⾯着⾊器来获得相同的结果。

8.3 约束

1 盒式投影器

2 平⾯投影技术

参数名称 描述
Max Distance ⼀个顶点可以从贴花的原点/轴点进行投影的最⼤距离。
Angle 限制每个多边形的表⾯法线与投影⽅向之间的⻆度。所有不符合要求的⾯都将被剔除。
Backface Culling 将投影限制为投影器可⻅的⾯。
Combined Mesh 允许投影器将贴花投影到多个⽹格/对象上。当贴花投影在移动的物体上并且在投影时有第⼆个接收器受到影响时,这可能会导致不切实际的⼏何重叠。这种影响可以减弱最⼤距离约束。
Colliders Only 启⽤后,只有带有碰撞器的对象才会受到投影器的影响。启⽤此选项后,可以更快地搜索可能受投影器影响的对象。
Recursive Lookup 允许投影器在游戏对象层次结构中递归搜索可能的⽬标⽹格。
Lookup Steps 当碰撞器和⽹格过滤器不在同⼀对象或层次级别时启⽤此选项。确定递归查找可以执⾏多少层次结构步骤。
Fade Out 启⽤或禁⽤淡出贴花。贴花的视觉淡出仅在使⽤⽀持顶点颜⾊的着⾊器时有效。
Don’t Destroy 在指定时间过后启⽤或禁⽤贴花的⾃动销毁。
Lifetime 贴花的⽣命周期(以秒为单位)。
Fadeout Time ⽤于完全淡出贴花的时间(以秒为单位)。
Fadeout 描述随时间 [0..1] 的标准化淡出的曲线。

8.4 附加功能

2 平⾯投影技术

参数名称 描述
Show Projection Direction 在场景视图中显⽰投影的⽅向。
Show Vertices 在场景视图中显⽰投影⼏何的顶点。
Show Normals 在场景视图中显⽰投影⼏何体的顶点法线。
SP Pxiel Radius 智能放置系统⽤于计算贴花⽅向的像素半径。值越⼤,⽅向变化越柔和。
Save as Assets 将选定的贴花另存为asset。贴花的⼏何图形被转换为⽹格。贴花本⾝不会被修改,只有底层⽹格被保存。当【Instantiate after save】选项被勾选时,保存的贴花预设会自动地实例化一个实例出来。