Skip to content

1.3.0

Choose a tag to compare

@AleFeng AleFeng released this 18 Jul 15:04

为网格自动计算平滑法线并烘焙到顶点色 / 切线 / TEXCOORD,用于背面外扩描边,解决硬边处描边断裂。工具本体是纯编辑器 C#,与渲染管线无关。

📦 安装

Window > Package Manager → 左上角 +Install package from git URL... → 粘贴:

https://github.com/AleFeng/OutlineSmoothNormalsGenerator.git?path=/Packages/com.alefeng.outlinesmoothnormalsgenerator#1.3.0

⚠️ 装完还必须导入一个 Sample,否则没有描边 Shader。
核心包刻意不含 Shader —— 这是「不引入任何渲染管线依赖」的代价。
Package Manager 里选中本包 → Samples按你的管线导入其中一个

Sample Shader 名
Outline Shader (URP) & Demo OutlineSmoothNormalsGenerator/Outline URP
Outline Shader (Built-in RP) & Demo OutlineSmoothNormalsGenerator/Outline Built-in

安装成功后菜单栏出现 Tools → Smooth Normal Generator

🆕 1.3.0 更新内容

  • 多网格批量编辑:目标网格由「下拉逐个选」改为复选框滚动列表(顶部「全选 / 清空」,加载新来源时默认全选)。「生成」「保存」「另存为」作用于所有勾选的网格;单击网格名把它设为焦点,右侧网格信息 / 通道状态显示焦点网格。
  • 描边预览同屏显示所有勾选的网格:按各自在层级中的相对位置摆放,相机自动兜住全部。
  • UV 通道由 4 个扩展到 8 个TEXCOORD0TEXCOORD7):工具的写入 / 检测 / 清除 / 预览,以及两个 Demo 描边 Shader 的描边来源与基础色显示,均支持 TEXCOORD4TEXCOORD7
  • 基础色调试模式(材质面板 Base Color Mode):把平滑法线数据直接当颜色显示、不经光照,便于肉眼核对生成结果 —— 含顶点色(RGB / RG / GB / BA)、切线(映射到 [0,1])、UV0–UV7。
  • 「另存为独立 Mesh」批量化:勾选 1 个弹命名对话框;勾选多个选一个目标文件夹,按各自网格名批量生成(自动去重命名),场景对象自动回填组件。

⚠️ 若你把 Sample 的 OUTLINE Pass 复制进了自有 Shader:本版描边来源改为运行时按 _SmoothNormalSrc(float)选择、并读取 uv0uv7,不再依赖 _SMOOTHNORMALSRC_* 关键字(存储通道超过 [KeywordEnum] 上限)。需要 8 通道支持时请重新复制本版 Pass。

✨ 主要功能

  • 平滑法线生成 —— 角度加权平均、可调合并容差,跨硬边得到连续外扩方向。
  • 三种存储方式 —— 顶点色(八面体编码,8-bit 下误差约 1°)/ 切线 / TEXCOORD(TEXCOORD0TEXCOORD7,共 8 个通道)。
  • 广泛的目标来源 —— 场景对象、Mesh 资产、模型(.fbx 等)、预制体,自动遍历层级、复选框多选批量处理
  • 实时描边预览 —— 内嵌视口,同屏显示所有勾选网格,法线可视化对比、通道状态检查、屏幕 / 世界空间描边对照。
  • 数据安全 —— 阻止对只读资产的假保存、批量另存为独立 Mesh、会话快照还原。
  • 描边 Shader(Sample) —— URP / Built-in 两版,两 Pass(描边 + 基础 NPR),描边来源支持 8 个 UV 通道,附基础色调试档位,自定义材质面板。

⚠️ 已知限制

  • HDRP 未提供描边 Shader,可参照文档自行移植(解码逻辑通用,仅渲染 Pass 需适配)。
  • 不支持 Undo —— Undo.RecordObject 不可靠地跟踪网格顶点数据;工具提供自己的会话快照还原。
  • 顶点合并采用格点取整,恰好跨越格边界的两点仍会被分开;容差需远小于模型最小特征尺寸。
  • 通道状态最高只说「可能是平滑法线」—— 编码后与普通顶点色 / UV 在数据上不可区分。
  • 世界空间宽度模式下 _OutlineWidth世界单位,对很大 / 很小的模型需相应调整。

📖 文档

简体中文 ·
English ·
日本語 ·
详细文档 ·
完整 CHANGELOG