Skip to content

1.4.0

Choose a tag to compare

@AleFeng AleFeng released this 19 Jul 15:12

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

📦 安装

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

https://github.com/AleFeng/OutlineSmoothNormalsGenerator.git?path=/Packages/com.alefeng.outlinesmoothnormalsgenerator#1.4.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.4.0 更新内容

  • 导入时自动烘焙:把模型文件名改成带约定后缀(默认 _Outline,如 Hero_Outline.fbx),它一旦(重)导入,平滑法线就被自动烘进网格 —— 无需打开工具、无需另存独立 Mesh。非破坏性:去掉后缀或关闭开关后重新导入即恢复原始网格。计算与写入复用手动流程同一套代码,编码与生产描边 Shader 完全一致。
  • 工具窗口新增「导入自动烘焙」页签:与「平滑法线生成器」并列,配置启用开关、命中后缀、存储方式(顶点色 / 切线 / TEXCOORD07)、合并容差。配置持久化到 ProjectSettings/OutlineSmoothNormals.asset,随工程纳入版本管理、团队共享一致设置。
  • 两个扩展委托(接私有管线,空则回退默认,一般用 [InitializeOnLoadMethod] 赋值一次):ShouldBakeRule 自定义命中规则(按目录 / 标签 / 导入设置决定),CustomStorageWriter 自定义存储写法(私有编码 / 通道布局)。
  • 网格健康检查:生成 / 烘焙前扫描并汇报缺法线、零向量 / NaN 法线、退化三角、单点重合顶点过多、未开启 Read/Write 等问题。手动流程以卡片显示在「生成」区域顶部(Error 时生成前二次确认);自动烘焙时写入 Console 日志、Error 网格自动跳过。
  • 使用文档大幅补充:包内《使用文档》新增「界面详解」(逐一说明窗口每个控件与预览参数面板),并提供英文 / 日文版本,三语文档顶部可一键切换。

本版为纯编辑器 C# 改动,不改任何 shader、不新增运行时依赖dependencies 仍为空)—— 已有材质 / Shader / 已烘焙数据均不受影响,从 1.3.x 升级无需任何迁移。

✨ 主要功能

  • 平滑法线生成 —— 角度加权平均、可调合并容差,跨硬边得到连续外扩方向。
  • 导入时自动烘焙 —— 命中文件名后缀的模型(重)导入即烘焙,非破坏性、零手动操作;「导入自动烘焙」页签配置,另有自定义规则 / 自定义存储两个扩展委托。
  • 三种存储方式 —— 顶点色(八面体编码,8-bit 下误差约 1°)/ 切线 / TEXCOORD(TEXCOORD0TEXCOORD7,共 8 个通道)。
  • 广泛的目标来源 —— 场景对象、Mesh 资产、模型(.fbx 等)、预制体,自动遍历层级、复选框多选批量处理
  • 实时描边预览 —— 内嵌视口,同屏显示所有勾选网格,法线可视化对比、通道状态检查、屏幕 / 世界空间描边对照。
  • 网格健康检查 —— 生成 / 烘焙前扫描非法数据(缺法线、退化三角、NaN、重合顶点过多等),手动二次确认、自动烘焙跳过。
  • 数据安全 —— 阻止对只读资产的假保存、批量另存为独立 Mesh、会话快照还原。
  • 描边 Shader(Sample) —— URP / Built-in 两版,两 Pass(描边 + 基础 NPR),描边来源支持 8 个 UV 通道,附基础色调试档位,自定义材质面板。

⚠️ 已知限制

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

📖 文档

总览 / 快速上手:
简体中文 ·
English ·
日本語

详细使用文档(含界面详解):
简体中文 ·
English ·
日本語

完整 CHANGELOG