非真实感渲染入门

非真实感渲染入门

图形学渲染风格主要分为真实感渲染(Photorealistic rendering)和非真实感渲染(Non-photorealistic rendering,NPR)两大类。不同于真实感渲染是为了渲染出照片级别的画面,非真实感渲染主要在于模拟艺术化的绘制风格,呈现出手绘的效果。常见的非真实渲染技术包括卡通渲染、油画渲染、像素感渲染、铅笔画、素描画、蜡笔画和水墨画等类型。

卡通渲染(Cel Shading/Toon Shading)

卡通渲染是NPR领域应用最广的渲染技术,在影视和游戏领域十分常见。如《你的名字》,塞尔达传说:荒野之息,Okami和原神等作品。


卡通渲染在游戏领域主要分为美式卡通风格和日式卡通风格两种。其中美式卡通色彩上比较连续,不会出现明显的色块分界线,如堡垒之夜;而日式卡通在着色方面会有明显的色块,色块的分界线清晰,如崩坏3。


描边(Outline Rendering)

在Real-Time Rendering一书中将描边技术分为了以下五大类:基于法线和视角的描边( Shading Normal Contour Edges)、过程式的几何描边( Procedural Geometry Silhouetting)、基于图片处理的描边( Edge Detection by Image Processing)、基于轮廓线检测的描边( Geometric Contour Edge Detection)和混合以上几种描边方法(Hybrid Silhouetting)。

基于法线和视角的描边

通过观察,位于边缘的法线与视线方向的夹角接近90°,因此可以使用视线方向和法线方向的点积结果来获取轮廓线的信息。

但这种方法会导致描边的粗细不均匀。

过程式几何描边

基本思路是通过两次绘制,第一次绘制角色,第二次绘制描边。绘制描边的时候,在顶点着色器将顶点沿着法线方向位移一段距离,使得模型轮廓放大,渲染作为描边。

基于图像处理的方法

基于图像的算法是通过图像处理的方法来进行边缘检测,一般用于屏幕空间的检测。我们通常使用深度、法线、亮度和颜色等属性作为边缘判断的依据。

左上角是法线图,中上是深度图,左下是法线图得到的边缘,中下是深度图得到的边缘,右上是经过加粗(取周围一定范围内的最深的像素的颜色为自身的颜色)的边缘图,右下是最后的结果。

着色

在卡通渲染中,尤其是日式的卡通渲染中,色阶较少且着色一般不是连续的,存在非常明显的颜色分界线。

漫反射

漫反射亮度采用Lambert模型,再进行阈值化。一般会根据NdotL = dot(normal,lightDir)的结果与阈值比较来指定不同的颜色值,从而模拟卡通色块的着色效果;除了这种方法之外,更常见的处理方式是利用NdotL的结果从一维渐变纹理RampTexture中进行采样

有些时候也会使用平滑阶跃函数柔化明暗边界,这样比较容易使角色与场景融合也起到一定的抗锯齿效果。

高光

根据法线和半向量的点积,与高光阈值比较,控制高光的范围。

Stylized highlights for cartoon rendering and animation
风格化高光

边缘光

物体的边缘会有一圈边缘光,实现比轮廓线更好的边界区分效果。这里的实现和基于法线和视角的描边一样。

NPR与PBR的结合


非真实感渲染入门
https://kenny-hoho.github.io/2023/01/29/非真实感渲染入门/
作者
Kenny-hoho
发布于
2023年1月29日
许可协议