Hotdry.
ai-systems

使用Wang Tiles实现无缝无限高斯溅射纹理

面向广阔辐射场世界,给出Wang平铺生成可无限拼接3D高斯的技术参数与工程清单,无边界伪影。

Gaussian Splatting(高斯溅射,简称 3DGS)作为一种高效的辐射场表示方法,已在实时新型视点合成中大放异彩。它使用数百万个 3D 高斯原语来显式建模场景,实现高保真渲染的同时支持实时性能。然而,在构建无限扩展的沉浸式世界时,传统 3DGS 面临边界伪影问题:简单拼接多个场景块会导致接缝处颜色、几何不连续,破坏沉浸感。

GSWT(Gaussian Splatting Wang Tiles)通过引入经典的 Wang Tiles(王瓦片)机制,巧妙解决这一痛点。王瓦片是一种二维正方形瓦片系统,每片边缘着色,只有相邻边缘颜色匹配时才能拼接,从而生成无缝无限纹理。GSWT 将这一思想扩展到 3D 高斯域,实现过程化生成可平铺的 3D 高斯块,无需手动对齐,支持动态无限世界构建,如游戏中的程序化地形或 VR 漫游空间。

Wang Tiles 基础回顾与 3DGS 适配

Wang Tiles 源于 Bertram V. Wang 的平铺理论,每片瓦片有四条边(上、下、左、右),每个边赋一 “颜色”(离散标签)。有效瓦片集需满足:任意两片相邻边颜色相同,且整个集无周期性以确保随机性。经典示例用 16 片瓦片生成无限浴室地板纹理。

在 GSWT 中,“颜色” 映射为高斯边界属性:边缘高斯的位置、协方差、不透明度与 SH 颜色系数的哈希或聚类标签。生成流程:

  1. 场景分块:将源辐射场切分为 N×N 网格块(推荐 N=4~8),每个块含固定高斯数(10^510^6)。
  2. 边界提取:为每个块提取边缘高斯带(宽度占块边长 10-20%),计算边界特征向量:均值位置、平均协方差尺度、主导颜色聚类。
  3. 标签生成:使用 K-Means(K=8~32)对边界特征聚类,赋唯一标签。确保标签空间覆盖常见边界模式。
  4. 瓦片合成:随机组合匹配标签的块,优化内部高斯以最小化新接缝。损失函数:L = L_seam + λ L_density,其中 L_seam 衡量相邻块渲染图像的 L1/L2 差异(在重叠区),λ=0.1~0.5。

此适配的关键在于高斯原语的柔性:不像刚性网格,3DGS 可通过梯度下降微调边界高斯,实现完美匹配。

工程化参数与阈值

为落地 GSWT,核心是参数调优,确保生成质量与性能平衡。以下是推荐配置清单:

  • 瓦片规格

    参数 说明
    分辨率 512x512x 深度图 每个瓦片渲染视点,确保 LOD 一致
    高斯密度 5e5 / 瓦片 平衡质量与内存(RTX4090 下 < 4GB)
    边界重叠 15% 优化时强制匹配重叠区,避免锐利边缘
  • 标签系统

    • 颜色数:16(2^4,易硬件索引)。
    • 特征维:32(位置 12 + 协方差 6 + SH9 + α5)。
    • 聚类阈值:欧氏距离 < 0.05(归一化后)。
  • 优化超参

    阶段 迭代数 LR 损失权重
    初始化 1000 0.01 L_rgb=1.0
    边界匹配 5000 0.001 L_seam=10.0, λ=0.2
    精炼 2000 0.0001 L_density=1.0, 密度正则 = 0.01
    剪枝 - - 透明度 < 0.005 剔除

    使用 Adam 优化器,批次大小 = 1(全瓦片)。监控指标:PSNR>30dB(接缝区),渲染 FPS>100(1080p)。

  • 无限渲染管线

    1. 预生成瓦片库(~100 片,覆盖标签组合)。
    2. 运行时:基于相机位置查询瓦片 ID(哈希地图),动态加载邻域(3x3 网格)。
    3. 融合:视锥剔除 + 深度排序,边界高斯共享实例化(节省 20% 内存)。
    4. LOD:远处瓦片降采样高斯(尺度 > 2x 时 50% 剪枝)。

潜在风险与回滚策略

  • 风险 1:标签爆炸。过多颜色导致无效集。限 K<64,手动验证周期图。
  • 风险 2:过拟合。单一源场景泛化差。解:多源训练(Tanks&Temples + 自采数据),数据增强(随机旋转 / 光照)。
  • 风险 3:性能瓶颈。大世界高斯 > 1e8。回滚:分层渲染(近高精度、远点云近似),或 Hybrid NeRF-GS。

回滚:若 GSWT 失败,fallback 到重叠拼接(20% 重叠 + Poisson 融合),虽非无限但实用。

可落地实现清单

  1. 环境:PyTorch 2.1+, gsplat/nerfstudio(CUDA11.8)。
  2. 伪码框架
    class GSWTTile:
        def __init__(self, gaussians, edge_tags):
            self.gauss = gaussians  # [N, 32] 属性
            self.tags = edge_tags   # [4]
    
    def generate_tileset(source_ply, num_tiles=64):
        blocks = split_scene(source_ply)
        tiles = []
        for _ in range(num_tiles):
            candidates = match_tags(blocks)
            tile = optimize_seam(candidates[0], candidates[1:])
            tiles.append(tile)
        return tiles
    
    def render_infinite(cam_pose, tileset):
        grid_pos = world_to_grid(cam_pose)
        neighbors = fetch_neighbors(grid_pos, tileset, 3)
        gauss_all = merge_gaussians(neighbors)
        return rasterize(gauss_all, cam_pose)
    
  3. 测试基准:Mip-NeRF360 数据集,目标无限地形。度量:接缝 PSNR、内存 <8GB、FPS>60。
  4. 扩展:动态 GSWT(时间维标签)、语义瓦片(标签含物体类)。

GSWT 标志着 3DGS 从静态重建向程序化无限世界的跃进,适用于元宇宙、自动驾驶模拟等。未来可结合扩散模型生成多样瓦片,进一步提升创造性。

资料来源

  • 3D Gaussian Splatting 原始实现(graphdegeneration.github.io/3dgs)。
  • Wang Tiles 理论(en.wikipedia.org/wiki/Wang_tile)。
  • 相关讨论:Hacker News 近期线程(news.ycombinator.com)。

(正文约 1250 字)

查看归档