图层
2D/3D Paint 支持图层与混合模式。每个图层都对应一张可用于绘制的 RenderTexture。图层可用于将多张图像进行合成等任务。注意:每个图层都会消耗内存。例如,使用 1024×1024 纹理会占用 4MB(每像素 32 位)。混合模式定义了某个图层与其下方图层的混合方式。
PaintManager 组件提供了用于管理图层的按钮:
点击 Add Layer 添加新图层;
点击 Remove Layer 移除当前激活图层;
点击 Remove Layer Mask 移除当前激活图层的遮罩;
点击 Merge Layers 将当前激活图层与下方图层合并;
点击 Merge All Layers 将所有激活图层合并到当前激活图层;
点击 Set Next Active 切换到下一个激活图层。也可以点击图层 UI 左侧的拖拽区域来切换激活图层;
要调整图层顺序,可拖拽左侧图层区域上下移动:
混合模式(Blending Modes)
资源支持以下混合模式:
Normal:不进行混合,不透明像素会直接覆盖下方像素。可通过调整图层不透明度来显示下方内容。Darken:比较底色与混合色的亮度并保留更暗的那一个;不进行像素混合,而是在两者之间选择更暗的颜色。若两者相同则不变。Multiply:将底色亮度与混合色相乘,得到更暗的结果。白色不会产生影响,黑色保持不变。ColorBurn:通过增加对比度使底色比 Multiply 更暗,通常会让中间调更饱和并压低高光。LinearBurn:基于混合色降低底色亮度,效果比 Multiply 更暗,但比 ColorBurn 饱和度更低。DarkerColor:比较底色与混合色并保留更暗的那个,不进行像素混合;若相同则不变。Lighten:保留底色与混合色中更亮的那个;若相同则不变。Screen:反相底色与混合色后相乘,再反相结果,得到更亮的颜色。黑色无影响,越亮的像素越能保留。ColorDodge:通过降低底色与混合色之间的对比度来提亮底色,可能会使中间调更饱和并导致高光溢出。LinearDodge:基于混合色提高底色亮度,使底色更亮。黑色无影响。LighterColor:比较底色与混合色并保留更亮的那个,不进行像素混合;若相同则不变。Overlay:结合 Multiply 与 Screen:对亮于 50% 灰的颜色使用 Screen,对暗于 50% 灰的颜色使用 Multiply;50% 灰本身变为透明。SoftLight:基于亮度进行较柔和的变暗或变亮处理。HardLight:结合 Multiply 与 Screen,并使用混合层的亮度进行计算,以底层作为参考。VividLight:对暗于 50% 灰的颜色变暗,对亮于 50% 灰的颜色变亮。LinearLight:对较亮的像素使用 Linear Dodge,对较暗的像素使用 Linear Burn。PinLight:结合 Darken 与 Lighten,可能产生块状/斑点效果,并移除中间调。HardMix:将混合层的 RGB 值加到底层,得到高对比结果:只剩黑、白或六种原色。Difference:计算底色与混合色差值;使用白色会反相颜色。Exclusion:类似 Difference;与白色混合会反相底色值;与 50% 灰混合会产生 50% 灰;与黑色混合无影响。Subtract:用底层减去混合层像素值,使像素变暗。黑色无影响,混合层越亮结果越暗。Divide:Subtract 的相反操作:用底层除以混合层像素值使像素变亮。白色无影响,混合层越暗结果越亮。Hue:保持底层的明度与饱和度,采用混合层的色相;适合在保留明暗与饱和度的前提下改变色相。Saturation:保持底层的明度与色相,采用混合层的饱和度。若混合层为黑白,会因缺少饱和度而使图像变灰。Color:保持底层明度,采用混合层的色相与饱和度;适合给单色图着色。Luminosity:保持底层色相与饱和度,采用混合层明度。
遮罩(Masks)
资源支持图层遮罩。对图层应用遮罩是一种可逆方式,用于隐藏图层的部分内容;与永久擦除/删除不同,它能带来更灵活的编辑。 资源中的遮罩本质上是一张 RenderTexture,使用 R8 格式;你可以通过代码创建/设置,也可以在 LayersContainer 中将引用设置到 Mask Texture 字段。
图层容器(Layers Container)
图层数据(图层纹理及其参数)可以存储在名为 LayersContainer 的 ScriptableObject 中。 LayersContainer 包含 PaintManager 的所有图层数据:图层纹理、名称、不透明度、混合选项、遮罩数据以及图层顺序。要将图层数据保存到 LayersContainer,可在 PaintManager 组件中点击 Save Layers:
选择保存路径后,图层数据会保存为 LayersContainer 资源,同时图层纹理也会自动保存到资源目录中。LayersContainer 资源包含一个 LayerData 数组,用于存储所有图层参数(图右侧所示)。
如果 PaintManager 在 LayersContainer 字段中引用了该资源,则在初始化时会从资源中加载图层:
此外,你也可以在运行时通过代码保存/加载/删除 LayersContainer;详情请参见 PaintManager 段落。

