1.2.0
为网格自动计算平滑法线并烘焙到顶点色 / 切线 / 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 的
OUTLINEPass 复制进过自己的 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