02 - 非真实感渲染NPR
本文将介绍非真实感渲染NPR的概念,以及一些NPR的思路(如描边,渲染草、头发,模型表面打线等)。
概念
真实感渲染的目标就是结果跟照片一样真,相对的,非真实感渲染的目标就是结果要有某种艺术风格。在实时渲染中,非真实感渲染实际上就是先得到真实的渲染结果,然后进行快速且可靠的风格化。
NPR可被应用于艺术、可视化、工业、教育、游戏等领域,它们通常有一些鲜明的艺术风格,如描边、明显色块、表面打线等。
风格化的重点
描边
边的类型
如图,物体的“边”可分为四种类型:
- [B]oundary / border edge:物体与外界的边界;
- [C]rease:物体内部的“折痕”;
- [M]aterial edge:材质的边界;
- [S]ilhouette edge:首先满足B,且由物体多个面共享的边。
如何描边
可以通过着色的方式描边:
如图,描“S边”,观察方向和法向量方向几乎垂直时,就可认为是“S边”。然后将这片区域变暗,效果可能不太好。
※也可以通过几何方法来描边:
比较朴素的版本是用两个模型来渲染:原模型和一个稍微比它大点的模型,然后将大模型作为小模型的“描边”。(就像LearnOpenGL中模板测试那一节)。
比较高效的版本是将模型分为正向面和反向面,如下图,正向面作为原模型,反向面将其扩大一圈作为正向面的“描边”。
※还可以通过图像后处理的方描边:
可以利用不同的卷积核对渲染结果进行后处理,例如使用Sobel detector
作为卷积核,也能根据屏幕法线、深度贴图来判断边界。
色块
让风格化具有色块(Color Blocks)效果主要有两种方法:
- 硬着色(Hard Shading):在着色时进行阈值化,阈值化可以不仅是二值化。
- 海报化(Posterization):对最终渲染结果(图片)进行阈值化。
阈值化就是针对不同的条件对渲染效果做出调整:
并且不同色块的渲染效果可以自由组合:
表面打线
表面打线(Strokes Surface Stylization),即在模型表面处有类似素描般效果的风格化。
表面打线的思路就是根据着色结果(如亮暗)给这片区域应用不同密度/分布的TAMs(Tonal art maps),其中,TAMs就是不同密度/分布的划线贴图。
总结
- NPR是艺术驱动的,如何将艺术家的需求正确实现很重要,这需要多和艺术家交流。
- 每个角色,甚至他的每个部分都可能有不同的NPR
- NPR效果好不好,还取决于它的基础——风格化之前的真实渲染结果。
参考资料
- GAMES202: 高质量实时渲染 (ucsb.edu)