refer:
Unity模板描边
openGL模板测试
《UnityShader入门精要》
种类概述
描边的基础实现方式有以下这五大类:
- 基于V和N描边:通过V·N来得到轮廓信息,只需要一个Pass
(缺点:效果一般) - 过程式几何描边:先渲染放大的背面,再渲染正面,这样轮廓就出现在屏幕上了;需要两个Pass,适合表面平滑模型
(缺点:不适合cube这种规则平整的模型) - 后处理描边:通过后处理的卷积实现,详情看本人的另一篇文章
(缺点:深度和法线变化小的轮廓无法检测:桌面上的纸张) - 轮廓边检测描边:通过公式(后面会讲)判断模型上的哪些边是位于边缘的,直接获取构成轮廓的边,并直接用渲染这些边
(缺点:由于是逐帧单独提取轮廓,因此帧之间会出现跳跃性)
*以上4种结合使用:
- 34结合:先找到轮廓边,再将模型和轮廓边都渲染到RenderTex中,再在RenderTex中进行风格化处理
基于V和N描边
就是边缘光啦,详细去看本人的边缘光文章,很简单,这里不作介绍
过程式几何描边
代码实现在这篇文章中,后续在处理下面残留的几个问题后,我会把代码改进并搬过来(坏!那篇文章还没写完,后续补吧)
Learn OpenGL中的模板测试描边,个人认为可以包含在这部分中,原理是一致的,只是实现细节不一样:
(模板测试描边:很简单,用模板测试渲染两次模型,第一次渲染时放大模型并用纯色Pass,第二次正常渲染(第五个入门精要里没有说)
(暂时还没法解决这些问题,后续学懂了再来修改)
存在的问题: