Skip to content

1.2.0

Choose a tag to compare

@AleFeng AleFeng released this 18 Jul 10:52

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

📦 安装

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

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

  • 描边宽度新增「世界空间」模式:可在屏幕空间(等宽,不随距离变化)与世界空间(按世界单位偏移,近大远小)间切换,预览窗口与材质面板均可切换。
  • Sample 描边 Shader 的基础渲染改为基础 NPR:卡通两段式明暗(cel shading)+ 边缘光(rim),取代原先的极简兰伯特,可在材质面板调参 —— 描边多用于 NPR,演示也随之贴近实际。
  • 选中场景对象时改为遍历整个层级收集全部网格(此前只取对象自身的渲染器),与选中模型 / 预制体一致;含多个网格时用目标区的 Mesh 下拉逐个选择。
  • 「保存」按钮改为固定文字、仅切换可用状态:不可直接保存(Model / 内置网格)时置灰,「需要保存 / 已保存」改由颜色与 tooltip 表达;「另存为独立 Mesh」始终可用。

若你从旧版本升级、且把 Sample 的 OUTLINE Pass 复制进过自己的 Shader:共享库 OSN_ApplyOutlineOffset 本版本增加了宽度模式参数(3 → 4 个),需补上该参数。

✨ 主要功能

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

⚠️ 已知限制

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

📖 文档

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