跳转至

基础

本节将说明 2D/3D Paint 在 Unity 中的工作方式,帮助你掌握在 2D 与 3D 对象上高效绘制所需的核心知识。

核心流程

  1. 材质与纹理处理
    • 资源会克隆源材质,并将原始纹理替换为 RenderTexture
    • 所有绘制都会发生在这张克隆出的纹理上,从而实现直接在 GPU 上进行的高性能渲染。
  2. 输入处理
    • 资源读取输入数据(鼠标、触控、手写笔或 VR 控制器),并将其传递给 RaycastController,由它计算应在物体表面绘制的精确位置;
    • 每次绘制交互都会计算两个点:用户上一帧触碰的位置(previous frame)与当前帧触碰的位置(current frame)。随后在这两个点之间应用笔触。
  3. 基于图层的绘制
    • 你绘制的每个图层都会以独立的 RenderTexture 保存。图层让你可以在不影响底图的情况下修改或擦除笔触。可以把图层理解为一张张透明画布叠放在一起。

关键组件与术语

为了理解 2D/3D Paint 的工作原理,你需要熟悉以下几个关键概念:

  1. RenderTextures:绘制系统的核心。不同的纹理用于不同目的:
    • Active Layer Texture:主要图层纹理,笔触最终会应用在这里;
    • Active Layer Temp Texture:临时纹理,用于存放笔触,之后再“烘焙”到最终纹理中;
    • Input Texture:临时存放用户输入;用于实时绘制(Default Mode),或在一次笔划期间保存(Additive Mode);
    • Combined Texture:合成所有激活图层后的结果纹理,呈现最终视觉效果;
    • Unwrapped Texture(当使用 MeshRendererSkinnedMeshRenderer 并处于 World Paint Space 时存在):将 3D 物体表面展开映射到 UV 的纹理,用于基于 UV 的绘制。
  2. 射线检测(Raycasting)
    • 系统通过射线检测计算用户输入与 3D 模型的交点,以确定笔刷应落在物体表面的哪里;
    • 资源内置了经过优化的射线检测系统,可绕过对碰撞体的依赖,使流程更快、更高效;
    • 对于顶点较多的复杂模型,可借助 Unity Job System 进行多线程来进一步提升射线检测性能。
  3. 笔刷(Brush)
    • 笔刷是一张 RenderTexture,会被渲染到当前激活图层的 RenderTexture 上。你可以调整大小、纹理、不透明度、硬度、颜色与角度等参数,从而完全控制笔触外观;
    • 笔刷尺寸与缩放相对于图层或被绘制对象计算,确保效果一致。

绘制模式

2D/3D Paint 提供两种绘制模式:

  1. Default Mode

    • 实时应用绘制,每次笔触都会立刻烘焙到纹理中;
    • 适合快速、连续的绘制场景,需要笔触立即影响最终纹理的情况。
  2. Additive Mode

    • 更渐进地应用绘制,能更准确地混合颜色与不透明度。每次笔划会先存储到 Input Texture,只有当用户结束笔划(例如鼠标抬起)时才会烘焙到图层;
    • 适合精细混色与细节工作,需要笔触之间更平滑过渡的场景。
Image title
Default 绘制模式(50% 不透明度)
Image title
Additive 绘制模式(50% 不透明度)

绘制空间

2D/3D Paint 支持两种主要绘制空间:

  1. UV Space
    • 在 UV 空间中绘制会基于模型的 UV 坐标把颜色写入 2D 纹理贴图,便于精确控制纹理的位置与分布。
  2. World Space
    • 在世界空间中,笔刷会基于其在场景中的位置直接绘制到 3D 模型表面,可实现跨表面更连续的应用。

撤销/重做系统

2D/3D Paint 提供撤销/重做功能,用于追踪并回退对图层或纹理的任何修改。

  • 图层变化:系统会在每次笔划结束后(例如每次 OnMouseUp 事件后)记录一次纹理变化;
  • 参数变化:对图层属性(如名称、索引、不透明度)的调整也会被记录;
  • 内存注意事项:撤销纹理变化可能会占用较多内存,尤其是大尺寸纹理(例如 1024x1024 纹理约占 4MB)。你可以在资源的 Settings 中限制或禁用该功能。

输入支持

资源支持多种输入设备进行绘制,包括:

  • 鼠标;
  • 触控设备(例如平板或手机);
  • 手写笔(如 Apple Pen);
  • VR 控制器。

你可以根据项目需求在 Unity 的传统 Input Manager 与新版 Input System 包之间进行选择。