跳转至

快速开始指南

将预制体添加到场景中:Assets/XDPaint/Prefabs/[XDPaintContainer].prefab。该预制体包含资源运行所需的单例组件。

Input Controller

该单例类用于管理用户输入。下面是 InputController 组件的参数说明:

Image title
  • Max Touches Count - 同时绘制的最大触点数量;
  • Input Methods - 启用的输入方式:VRMode、Pen、Touch、Mouse。默认全部启用;
  • Canvases - 需要忽略射线检测的 Canvas 列表(Canvas 的子对象会阻止绘制);
  • Block Raycasts On Press - 当用户指向/悬停在 Canvas 项上时,是否阻止绘制;
  • Ignore For Raycasts - 需要忽略射线检测的 GameObject(Canvas 的子对象,但不会阻止绘制);
  • Pen Transform - 用于绘制的笔/手的 Transform(VR 设备使用);
  • Minimal Distance To Paint - Pen 到表面的最小绘制距离(VR 绘制使用)。

Raycast Controller

该单例类负责对射线与三角形的相交进行数据检测,并存储场景中所有可用于射线检测的对象信息。下面是 RaycastController 组件的参数说明:

Image title
  • Use Depth Texture - 是否使用 Depth Texture 辅助射线检测。在场景中同时存在多个 PaintManager 时非常有用,因为它会在这种情况下优先绘制离射线起点最近的 PaintManager。注意:如果你使用 SRP,需要在 URP/HDRP 设置中启用 DepthTexture。

Paint Controller

该单例类用于存储所有 PaintManager。下面是 PaintController 组件的参数说明:

Image title
  • Override Camera - 为 InputController 与 RaycastController(单例对象)指定相机;若不勾选则使用 Camera.main;
  • Use Shared Settings - 是否对所有 PaintManager 使用 PaintController 的设置(Brush、Paint Tool、Paint Mode)。若关闭,则每个 PaintManager 使用自己的独立设置;
  • Paint Mode - 绘制模式:Default 或 Additive。Default 模式下,每一帧都会将绘制结果烘焙到 Layer Texture;Additive 模式下,会先把线条渲染到 Input Texture,在 Mouse Up 事件时再烘焙到 Layer Texture,从而获得更精确的颜色与 Alpha 混合;
  • Paint Tool - 当前工具。支持的工具:
    • Brush - 画笔工具;
    • Erase - 擦除工具;
    • Bucket - 油漆桶,用选定颜色填充纹理区域;
    • Eyedropper - 吸管工具,用于拾取画笔颜色;
    • BrushSampler - 取样画笔纹理;
    • Clone - 克隆纹理区域;
    • Blur - 模糊纹理区域;
    • GaussianBlur - 模糊纹理区域;
    • Grayscale - 将纹理区域去色(灰度化)。
  • Preset - 画笔预设,保存在 Assets/XDPaint/Resources/XDPaintBrushPresets.asset。它存储了不同参数的画笔,便于快速切换。详情见“Brush 与 Presets”段落。

画笔参数(Brush Parameters):

  • Name - 画笔名称;
  • Source Texture - 画笔纹理。添加新画笔时,请确保画笔纹理导入设置中的「Wrap Mode」为「Clamp」;
  • Filter Mode - 画笔 RenderTexture 的 FilterMode;
  • Color - 画笔颜色;
  • Size - 画笔大小;
  • Hardness - 画笔硬度;当值小于 1 时会使画笔更圆滑;
  • Render Angle - 画笔渲染角度(度);
  • Preview - 当用户悬停在待绘制对象上时显示画笔预览;

Paint Manager

该组件用于管理“可绘制对象”,是对物体进行绘制的核心组件。
你可以通过 Unity 菜单「GameObject -> 2D/3D Paint」创建带有 PaintManager 的 GameObject,或手动把 PaintManager 添加到你的 GameObject 上。 然后在 Object For Painting 字段中选择要绘制的对象。该对象必须包含以下支持组件之一:MeshRendererSkinnedMeshRendererSpriteRendererRawImage。 如果 PaintManager GameObject 的子对象中包含带有支持组件的对象,可以点击 Auto Fill 按钮自动将其填入 Object For Painting

Image title

点击 Auto Fill 后,只要找到支持组件,Object For Painting 就会被自动填充:

Image title

如果无法自动找到 Material 或绘制对象,请确认子对象中确实存在带支持组件的 GameObject;否则可手动指定 Object For PaintingMaterial

Object For PaintingMaterial 都有值时,会显示更多设置。以下是主要参数:

  • Object For Painting - 绘制对象(必须包含支持的组件之一);
  • Material - 对象材质;其纹理字段(Shader Texture Name)将作为绘制目标;
  • Shader Texture Name - 材质中用于绘制的纹理名称;
  • Texture Width - 当对象没有源纹理时使用的默认纹理宽度;
  • Texture Height - 当对象没有源纹理时使用的默认纹理高度;
  • Texture Color - 当未指定源纹理时,新建纹理的像素默认颜色;
  • Filter Mode - 绘制用 RenderTexture 的 FilterMode;
  • UV Channel - UV 通道;
  • Paint Space - 指定将笔刷纹理投射到表面时使用的坐标空间:
    • UV:基于对象 UV 坐标投射笔刷纹理;
    • World:基于世界坐标投射,便于在多个表面上实现连续绘制。
  • Projection Method - 决定投射笔刷纹理到表面时采用的方法;
  • Projection Direction - 决定用于投射时笔刷法线的计算方式;
  • Normal Cutout - 基于表面法线与视线方向(或绘制射线方向)的夹角进行裁剪阈值控制;在 World Paint Space 下可避免绘制到背向射线/相机的面(例如背面);
  • Max Angle - 指定笔刷法线与片元法线之间允许的最大夹角(度);调整该值可控制笔刷在曲面上“包裹”的程度;
  • Angle Attenuation Mode - 控制 Max Angle 如何影响笔刷 Alpha;
  • Brush Depth Size - 控制沿笔刷法线方向的深度(厚度)影响范围(相对于笔刷大小);适合需要只影响一定深度范围内表面的效果;
  • Brush Depth Fade Range - 控制沿 Brush Depth 定义的深度范围从全强到 0 的渐变范围;大于 0.0 时会产生平滑过渡;
  • Edge Softness - 控制笔刷边缘柔和度,影响向外半径方向的衰减;
  • Paint Mode - 绘制模式:default 或 additive;
  • Paint Tool - 绘制工具;若 PaintController 启用了 Use Shared Settings,则所有 PaintManager 都会使用 PaintController 的工具;
  • Brush - 画笔参数。选择「Custom」时表示该 PaintManager 使用独立画笔参数;也可从列表中选择现成预设。注意:若 PaintController 启用了 Use Shared Settings,则会使用 PaintController 的画笔参数;
  • Copy Source Texture To Layer - 将材质的源纹理复制到新图层;
  • Use Source Texture as Background Layer - 将材质的源纹理复制到背景图层;
  • Layers Container - 指向 LayersContainer 的 ScriptableObject 引用,包含图层纹理与参数信息,用于加载之前保存的图层。
  • Clone Material - 将对象源材质复制为新文件(仅 Unity Editor 可用);
  • Clone Texture - 将对象源纹理复制为新文件(仅 Unity Editor 可用);
  • Undo - 撤销;
  • Redo - 重做;
  • Bake - 将绘制结果烘焙回源文件。注意:纹理默认只保存在内存中,不会写入磁盘;
  • Save Texture - 将绘制结果纹理保存到文件(仅 Unity Editor 可用);
  • Save Layers - 将图层数据保存为 ScriptableObject。

下面演示将对象设置为在自发光纹理上绘制:

Image title

示例中选择了名为 _EmissionMap 的纹理。进入 Play 模式后,用户就可以在 LightHouse 对象上绘制。材质与源纹理 _EmissionMap 会被克隆,并将 RenderTexture 作为新的纹理分配。你可以使用鼠标、触控屏、手写笔或 VR 控制器等多种输入设备进行绘制。