--- 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(个人感觉不需要)