Auto LOD Group


学完代数拓扑已经有一段时间了, 尽管内容已经忘了不少了, 但一直心心念念将代数拓扑的思想应用至游戏开发中. 终于在前段时间, 自己完成了一个名为Auto LOD Group的UE5插件初版, 利用闭曲面分类定理设置游戏开发过程中使用到的Mesh的LOD Group. 由于不同美术同学设置Mesh的LOD Group的标准可能是不一致的, 会使得游戏开发过程中对于LOD Group的管理变得十分混乱, 而Auto LOD Group便可以帮助实现LOD Group的自动化设置, 严格保证了LOD Group的设置标准的一致性. 限于所在项目的保密性, 接下来仅简单介绍一下Auto LOD Group的算法思想.

参考材料
1. 闭曲面分类定理
2. 如何直观,准确地解释"亏格"。?
3. 几何处理和模型简化课程笔记

1. 闭曲面分类定理

首先复习一下闭曲面分类定理.
$\\$ 闭曲面分类定理 一个二维闭曲面, 它是且只能是以下三种类型之一:
$\\$ 1) 球面: $\mathbb{S}^2$, 这时为可定向闭曲面.
$\\$ 2) $n$个环面作连通和: $n \mathbb{T}^2$型, 这时为可定向闭曲面.
$\\$ 3) $m$个射影平面作连通和: $m \mathbb{P}^2$型, 这时为不可定向闭曲面.
$\\$ 这个定理蕴含了对任意的正整数$m$, $n$, 这些不同类型的闭曲面是不交的, 这个不交性的证明需要用到基本群的相关理论. 可定向性是拓扑不变量.

上述三类曲面的Euler示性数和亏格如下:
$\\$ 1) $\mathbb{S}^2$, Euler示性数是2, 亏格是0.
$\\$ 2) $n \mathbb{T}^2$, Euler示性数是$2 – 2n$, (可定向) 亏格是$n$.
$\\$ 3) $m \mathbb{P}^2$, Euler示性数是$2 – m$, (不可定向) 亏格是$m$.
$\\$ Euler示性数和亏格是拓扑不变量.

注: 一个曲面做连通和被视为还是这个曲面自身.

2. 亏格计算

一般来说, 游戏开发所使用的Mesh的连通分支数(即第0个Betti数) 不一定为1, 且可能是带洞的. 此处洞的数量不一定为亏格, 因为亏格对应的洞必须是穿透型的, 不穿透的洞再深也不行(详见参考材料2). 因此, 在计算亏格时, 必须考虑第0个Betti数与边界的连通分支数(即洞的数量). 笔者所使用的计算亏格的公式为:
$\\$ 1) 当Mesh的隐藏曲面为可定向曲面时, $$v – e + f = 2s – 2g – h.$$$\\$ 2) 当Mesh的隐藏曲面为不可定向曲面时, $$v – e + f = 2s – g – h.$$其中, $s$为第0个Betti数, $g$为亏格, $h$为边界的连通分支数.
$\\$ 证: 仅证1). 不妨设Mesh的所有连通分支的顶点数分别为$v_1$, $\cdots$, $v_s$, 边数分别为$e_1$, $\cdots$, $e_s$, 面数分别为$f_1$, $\cdots$, $f_s$, 边界的连通分支数分别为$h_1$, $\cdots$, $h_s$, 考虑连通分支$C_i$, 其亏格计算公式为$$v_i – e_i + f_i = 2 – 2g_i – h_i,$$其中, 用该连通分支$C_i$的欧拉示性数$v_i – e_i + f_i$加上边界的连通分支数$h_i$的操作可视为仅用一个面进行补洞. 又Mesh的亏格$g$为其所有连通分支$\{ C_i \}_{i = 1}^s$的亏格$\{ g_i \}_{i = 1}^s$之和, 故其亏格计算公式为$${\textstyle \sum_{i = 1}^{s}} v_i – {\textstyle \sum_{i = 1}^{s}} e_i + {\textstyle \sum_{i = 1}^{s}} f_i = 2s – 2{\textstyle \sum_{i = 1}^{s}} g_i – {\textstyle \sum_{i = 1}^{s}} h_i,$$上式可简记为$$v – e + f = 2s – 2g – h.$$从而, 命题得证. 类似可得2).
$\\$ 此外, 借助并查集这个强有力的数据结构, 也可以较快速度地计算出Mesh的第0个Betti数, 边界的连通分支数与可定向性.

3. 亏格到LOD Group的映射

实际上, 各个项目组对于LOD Group的设置规则可能是各不相同的. 笔者将Mesh的亏格$g$到其LOD Group的映射定义如下:$$f: (g, b, s) \mapsto LOD \ Group,$$其中, $b$为Mesh的的Bounding Sphere的半径, $s$为Mesh采用的Shading Model. 之所以还需要考虑Mesh采用的Shading Model, 是因为上述的亏格计算是不考虑材质产生的亏格的. 目前, 笔者观察到Two Sided Foliage Shading Model会产生一定数量的亏格, 对于采用了Two Sided Foliage Shading Model的Mesh, 会直接将其LOD Group设置为Foliage相关的LOD Group.

4. 应用

分类问题一直是数学研究的基本问题之一, 在利用闭曲面分类定理与LOD Group对游戏开发过程中使用到的Mesh进行分类后, 我们便可以针对每一类Mesh进行特定的优化. 如
$\\$ 1) 对于高亏格, LOD Group为Foliage, Deco或Small Prop的Mesh, 由于其很难在遮挡剔除中发挥作用, 那么可以关闭对应的Actor Settings上的Use as Occluder选项. 尤其是对于LOD Group为Foliage的Mesh, 还可以启用Nanite进行渲染(分Cluster渲染, 剔除效率更高).
$\\$ 2) 对于LOD Group为Vista的Mesh, 可以将其绘制到天空盒上(待验证…).

5. 未来工作

目前Auto LOD Group算法已经在笔者项目内顺利落地, 也取得了还算不错的自动化效果. 但依旧存在一些不足等待解决, 如:
$\\$ 1) 实际上, 目前计算得到的Mesh的总亏格数量区分意义不大. 尤其是对于非流形的Mesh, 必须对其进行Manifold-Connected(MC) 分解得到MC复形(参考论文Hui A, De Floriani L. A two-level topological decomposition for non-manifold simplicial shapes[C]//Proceedings of the 2007 ACM symposium on Solid and physical modeling. 2007: 355-360.), 比较其每一个MC Component的亏格(参考论文Heisserman J A. A generalized Euler-Poincaré equation[J]. 1991.), 这样在Mesh的分类问题上才更具区分价值.
$\\$ 2) 计算Mesh的材质产生的亏格.
$\\$ 3) 计算Mesh的Handle与Tunnel(参考论文Dey T K, Fan F, Wang Y. An efficient computation of handle and tunnel loops via Reeb graphs[J]. ACM Transactions on Graphics (TOG), 2013, 32(4): 1-10. 或许可以用至Portal Culling中?).
$\\$ 最后, 也希望能够将代数拓扑更深层次的思想应用至游戏开发中. 不忘初心, 以学术之心应工业之事(ง •_•)ง~

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注