electronicarts/mesh2splat
GitHub: electronicarts/mesh2splat
由 EA SEED 开发的极速三维网格转 3D 高斯泼溅工具,绕过传统优化流程在亚毫秒内完成转换,并附带支持 PBR 的 3DGS 渲染器。
Stars: 817 | Forks: 71
Mesh2Splat 附带一个 **3DGS 渲染器**,用于查看转换结果。
目前,实现此目标的唯一方法是生成 3D 模型的合成数据集(相机姿态、图像渲染和初始稀疏点云),然后将其输入到 3DGS 流程中。此过程可能需要几分钟,具体取决于所使用的特定 3DGS 流程和模型。
而 **Mesh2Splat** 则通过直接使用 3D 模型中的几何、材质和纹理信息,而非经过经典的 3DGS 流程,能够在毫秒内获得输入 3D 模型的 3DGS 表示。
## 用例
**Mesh2Splat** 专为快速、灵活地集成到 3D Gaussian Splatting (3DGS) 工作流而设计,特别是在传统流程太慢或与某些场景不兼容的情况下。以下是一些关键用例:
- **仅限 3DGS 的渲染流程**
一些 3DGS 渲染器不支持混合渲染(即混合三角网格和高斯)。在这些情况下,Mesh2Splat 能够将网格资产直接转换为纯 3DGS 格式,从而无需依赖较慢的优化流程即可进行原生渲染。
- **3DGS 优化的快速初始化**
在为 3DGS 优化流程准备模型时(例如,使用新的图像集或更改外观),拥有一个良好的初始猜测对于更快的收敛和更好的结果至关重要。Mesh2Splat 提供了一种基于几何和纹理的初始化,可以作为进一步精修的强有力起点。
- **利用高斯图元增强传统渲染器**
在以三角网格为主要表示形式但支持 3DGS 渲染的流程中,Mesh2Splat 可用于将选定的资产转换为高斯。这使开发者和艺术家能够利用高斯的独特属性。
## 特性
### 转换器
- **直接处理 3D 模型**:直接从 3D 网格获取 3DGS 模型(目前仅支持 `.glb` 格式)。
- **采样密度**:您可以通过滑块在设置中轻松调整采样密度(转换质量)。
- **纹理贴图支持**:目前,Mesh2Splat 支持以下纹理贴图:
- 漫反射
- 金属度-粗糙度
- 法线
- **性能提升**:显著减少将 3D 网格转换为 3DGS 所需的时间。
- **可重照明性**:在支持该功能的渲染器下,可以轻松地对高斯进行重新照明。
$`{\Sigma_{2D}} = \begin{bmatrix} \sigma^{2}_x & 0 \\\ 0 & \sigma^{2}_y \end{bmatrix}`$
其中:$`{\sigma_{x}}\sim {\sigma_{y}}\sim 0.65`$
且 $`{\rho} = 0`$ - 然后,对于几何着色器阶段中的每个三角形图元,我们执行以下操作: - 根据法线相似性将三平面正交投影应用到 X、Y 或 Z 面,并在 [-1, 1] 范围内进行归一化。 - 为每个三角形计算从 *正交 UV 空间* 到 *3D 空间* 的雅可比矩阵:$`J = V \cdot (UV)^{-1} `$。 - 推导出对应于纹理轴 $`u`$ 和 $`v`$ 的 3D 方向,并计算 3D 导数向量的幅度。 - 将找到的长度乘以 2D 高斯的标准差,这样我们就找到了在 3D 空间中沿与表面对齐的方向的缩放因子。 - 打包后的缩放值将为: - $`packedScale_x = log(length(Ju) * sigma_x)`$ - $`packedScale_y = log(length(Jv) * sigma_y)`$ - $`packedScale_z = log(1e-7)`$ - 既然我们已经获得了特定三角形的 *3D 高斯* 部分的 **缩放** 和 **旋转**,我们就为该三角形的每个顶点生成一个 3D 高斯,将其各自的 3D 位置设置为顶点的 3D 位置,为了利用硬件插值器,我们设置 ```gl_Position = vec4(gs_in[i].normalizedUv * 2.0 - 1.0, 0.0, 1.0);```。这意味着光栅化器将插值这些值,并在正交空间中为每个片段生成一个 3D 高斯。 - 在片段着色器中执行纹理获取,并为每个高斯设置此数据。 - 每个片段现在通过原子操作将一个高斯附加到共享的 [SSBO](https://www.khronos.org/opengl/wiki/Shader_Storage_Buffer_Object) 中。 ## 性能 Mesh2Splat 平均能够在 **<0.5ms** 内将 3D 网格转换为 3DGS。
## 构建说明 要构建 **Mesh2Splat**,请按照以下步骤操作: ### 前置条件 - **CMake ≥ 3.21.1** 需要支持 **Visual Studio 2022** 项目生成。较旧版本可能会默认使用不受支持的生成器。 - **Visual Studio 2019 或 2022** 必须包含 **"Desktop development with C++"** 工作负载。请确保您的 CMake 版本与您的 Visual Studio 版本兼容。 - **兼容 OpenGL 的 GPU 和驱动程序** ### 构建步骤 1. 在项目根目录下打开终端(`cmd` 或 `PowerShell`)。 2. 运行提供的批处理脚本之一: - `run_build_debug.bat` - `run_build_release.bat` 3. 打开 `bin` 文件夹并运行可执行文件,或者打开 `build` 文件夹中的 `.sln` 文件
## 构建说明 ### 前置条件 安装依赖项: ``` sudo apt install build-essential cmake pkg-config git \ libfreeimage-dev libglew-dev libglfw3-dev libgl1-mesa-dev \ libxinerama-dev libxcursor-dev libxi-dev libxxf86vm-dev ``` ### 构建步骤 1. 创建并进入构建目录: mkdir build && cd build 2. 配置并构建: cmake .. cmake --build . -j16 3. 运行位于 `build` 目录中的可执行文件。
## 局限性 - 体积数据(如树叶、草、头发、云等)尚未被作为目标处理,如果使用非三角形图元,可能无法正确转换。
## 如何引用 要引用此代码仓库,请点击 GitHub 页面顶部的 **“Cite this repository”** 按钮。 或者,您可以使用以下 BibTeX 条目: ``` @misc{ scolari2025mesh2splat, author = {Scolari, Stefano}, title = {Mesh2Splat: Fast mesh to 3D Gaussian splat conversion}, year = {2025}, howpublished = {\url{https://github.com/electronicarts/mesh2splat}}, note = {Extended and updated version of the author's Master's thesis at KTH.} } ``` 这项工作建立在作者的硕士论文工作之上: ``` @mastersthesis{ scolari2024thesis, author = {Scolari, Stefano}, title = {Mesh2Splat: Gaussian Splatting from 3D Geometry and Materials}, school = {KTH Royal Institute of Technology}, year = {2024}, url = {https://urn.kb.se/resolve?urn=urn:nbn:se:kth:diva-359582} } ``` # 作者
seed.ea.com
SEED is a pioneering group within Electronic Arts, combining creativity with applied research.
We explore, build, and help define the future of interactive entertainment. Mesh2splat 是 Electronic Arts 的一个项目,由 [Stefano Scolari](https://www.linkedin.com/in/stefano-scolari/) 在 [SEED](https://www.ea.com/seed) 实习期间为他在 [KTH](https://www.kth.se/en) 的硕士论文创建,并在 Martin Mittring([SEED](https://www.ea.com/seed) 首席渲染工程师)和 Christopher Peters([KTH](https://www.kth.se/en) 人机交互与计算机图形学教授)的指导下完成。 # 贡献 在您做出贡献之前,EA 必须存档一份由每位贡献者签署的贡献者许可协议 (CLA)。您可以在此处[签署](https://electronicarts.na1.echosign.com/public/esignWidget?wid=CBFCIBAA3AAABLblqZhByHRvZqmltGtliuExmuV-WNzlaJGPhbSRg2ufuPsM3P0QmILZjLpkGslg24-UJtek*)。 # 许可证 源代码在开源许可证下发布,详情请参见 [LICENSE.txt](./LICENSE.txt)