卡通渲染总结《二》

关于技术的方面,一方面就是其轮廓边缘检测:

主要的方法可以被分为基于图片空间和对象空间,对象空间比图片空间会多一些立体坐标位置的信息。

轮廓类型分类

首先我们顶一下轮廓是什么,从一个视角看去如果一条边相邻的两个面其恰好对应于正面和反面,则认为这条边为轮廓,如下图所示:

折痕则根据相邻两个多边形的二面角可以被分为山脊边缘和山谷边缘,对于山脊边缘,角度值小于阈值,对于谷边缘,角度值大于指定阈值。

材质边则是建模过程中艺术家能确定的不同材质之间的边界

还有一种轮廓类型为非固体对象边,就比如一张纸它的四周就是边缘。下面这幅图就全面的体现和分类了对应的边

图像空间方法

所以现在的方法使用深度值和法线图来判断边缘,

  • 深度缓冲的利用中:通常认为同一个物体的深度值变化是小的,而不同物体间深度变化会变大,相当于通过0阶导的形式来判断,但是无法检测出一阶导变化大的边例如上图的C,其就相当于函数|x|
  • 法线图:法线图能弥补深度无法检测一阶导变化的轮廓线,但发现生成的方式有多种。比如使用渲染管线中的顶点着色器传输法线到片段着色器插值。

最终通过两者相加来组成结果 如下图 上面是深度,下面是法线,右边是最终结果。

但图像空间毕竟无法使用3D的信息,在物体的远近变化处,可能出现边缘宽度不一致的情况。

对象空间方法

对象空间可以获得更多的3D信息,但在计算上也会相应的更复杂,所以面对实时渲染时需要进一步的提高效率。

其中对于光滑的表面可以计算视角方向和法线方向的点乘判断折痕边,


n i ∗ ( x i − C ) = 0 n_i * (x_i - C) = 0 ni∗(xi−C)=0

其中 C C C表示视角方向 n i n_i ni 表示表面发现方向 x i x_i xi表示视角点。

相关推荐
郝学胜-神的一滴8 小时前
[简化版 GAMES 101] 计算机图形学 12:可见性与 Z‑Buffer 深度缓存
unity·godot·图形渲染·three.js·opengl·unreal
XX風1 天前
OpenGL OIT 之 Linked List 实现(上篇):原理、流程与缓冲区设计
图形渲染
玖釉-2 天前
Vulkan Specialization Constants 详解:在“运行时配置”和“编译期优化”之间取得平衡
c++·windows·图形渲染
charlie1145141913 天前
通用GUI编程技术——图形渲染实战(四十五)——D3D12资源与堆管理:从上传到驻留
开发语言·3d·图形渲染·win32
玖釉-4 天前
Vulkan 中 Shader 的 vert、frag、mesh、comp 全面解析:作用、关系、特点与工程实践
开发语言·c++·windows·算法·图形渲染
玖釉-4 天前
Vulkan 示例解析:gltfscenerendering.cpp 如何渲染一个复杂 glTF 场景
c++·windows·图形渲染
玖釉-4 天前
Vulkan 示例解析:pipelines.cpp 如何在一个 Render Pass 中切换多条 Graphics Pipeline
c++·windows·算法·图形渲染
做cv的小昊4 天前
计算机图形学:【Games101】学习笔记06——几何(曲线和曲面、网格处理)、阴影图
c++·笔记·学习·游戏·图形渲染·几何学·光照贴图
郝学胜-神的一滴7 天前
[简化版 GAMES 101] 计算机图形学 11:频域·卷积·抗锯齿
c++·unity·图形渲染·opengl·three·unreal
RReality11 天前
【Unity Shader URP】水面效果 实战教程
unity·游戏引擎·图形渲染