78 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 描边
date: 2023-12-08 16:49:45
excerpt:
tags:
rating: ⭐
---
# 实现功能
- 后处理描边
- MeshDraw描边
# 其他游戏做法
## 蓝色协议
采用后处理、Backface以及预绘制描边。
[[蓝色协议的方案#轮廓]]
# 概念
## 描边概念以及各个算子数学的意义
参考https://zhuanlan.zhihu.com/p/478943345
### 图像描边的本质
根据微积分的定义在二维离散函数中推导出来的。核心目的是得到像素点与其相临像素的灰度值变化情况,并通过这种变化来增强图像。原始定义的梯度只是灰度值变化的度量工具。
### Sobel
- Sobel卷积x方向的因子
| -1 | 0 | +1 |
| --- | --- | --- |
| -2 | 0 | +2 |
| -1 | 0 | +1 |
y方向的因子为
|+1|+2|+1|
|---|---|---|
|0|0|0|
|-1|-2|-1|
Sobel算子更具像素点上下左右临近灰度加权差在边缘出达到极值这i一现象检测边缘。对噪声具有平滑作用提供较为准确的边缘方向信息边缘定位精度不够高**当对精度要求不是很高时**,是一种较为常用的边缘检测方法。
**如果要求整体x和y方向的图像梯度只需要将Gx与Gy相加即可。**
### Robert
Robert算子被应用到图像增强总的锐化其作为一阶微分算子Robert计算简单对细节的反应敏感。其边缘检测的作用是提供边缘候选点可以提供相对较细的边缘。Gx 与Gy的表示
| -1 | 0 | 0 | -1 |
| --- | --- | --- | --- |
| 0 | 1 | 1 | 0 |
### Laplace
拉普拉斯算子是最简单的**各同性微分算子**,具有**旋转不变性**。二维图像的拉普拉斯变换是各向同性的二阶导数。拉普拉斯算子可以增强图像**边缘变化剧烈的位置****平缓减弱变换缓慢的变化区域**。因此可以**使用拉普拉斯算子对原图像灰度图像进行处理,然后再与原图像叠加**。
# 实现记录
[[OutlinePass]]
# BackFace描边
## 调整法线插件
### Blender
【【Blender】三渲二动漫角色脸部法线修改教程】 https://www.bilibili.com/video/BV1bX4y1y7pP/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e
### Maya
法线编辑工具:https://www.bilibili.com/video/BV1uW411w7tp/?spm_id_from=333.337.search-card.all.click&vd_source=d47c0bb42f9c72fd7d74562185cee290
作者还提供代码:![[NomalEditor.mel]]
# 杂项
## 蓝色协议的做法
### 模型外扩
### 后处理
1. 使用Sobel算子进行深度检测**只勾数值差别较大的区域**:脸部顶点色定义区域 与 模型外部轮廓。
2. 使用Sobel进行ID贴图检测。**只勾数值差别较大的区域**。
3. 进行法线点积dot检测。**在 深度差异小 以及 同一个ID区域内进行检测**:手指区域。
1. 使用Sobel过滤器进行深度检测描边。
2. 使用Sobel过滤器进行Id图检测描边。
3. 使用Sobel过滤器进行Normal检测描边。用于处理一些难以分ID深度差又很小的地方通过获取周围点法线求点乘的方式判断出轮廓。![[08-Assets/Images/ImageBag/UrealEngineNPR/蓝色协议_Normal检测描边.png)
4. 预先画好的轮廓GBuffer
所以使用需要 OutlineId、OutlineWidth感觉可以传递一个全局Outline信息贴图再通过ID查表来获取但只能在角色较少时使用、OutlinePaint 、OutlineZShift个人感觉不需要