ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OpenUSD usdVol 中的 ParticleField3DGaussianSplat:3D 高斯泼溅(3DGS)粒子场模式详解

OpenUSD usdVol 中的 ParticleField3DGaussianSplat:3D 高斯泼溅(3DGS)粒子场模式详解 OpenUSD usdVol 中的 ParticleField3DGaussianSplat3D 高斯泼溅3DGS粒子场模式详解【免费下载链接】OpenUSDUniversal Scene Description项目地址: https://gitcode.com/GitHub_Trending/ope/OpenUSD本文基于 OpenUSD 官方文档 ParticleField3DGaussianSplat.md 展开结合pxr/usd/usdVol下的模式定义源码schema.usda、C 模式头文件与实现particleField3DGaussianSplat.h、particleField3DGaussianSplat.cpp进行深度解读。读完本文你将理解该模式如何用一组内置应用模式applied schema描述原始 3D 高斯泼溅数据、如何使用projectionModeHint与sortingModeHint两个渲染提示属性调优画面表现并掌握在 USDA 与 C 两个层面操作该模式的完整方法。一、模式定位面向 3D 高斯泼溅的具体粒子场ParticleField3DGaussianSplat是 usdVol 模式域中一个具体concrete的粒子场模式用于表示原始 3D Gaussian Splats3DGS即 2023 年的 3D 高斯泼溅论文所描述的技术数据。根据 模式文档 与 schema.usda 中的类定义它继承自ParticleField基类 priminherits /ParticleField而ParticleField又继承自Gprim它自带一组自动应用的应用模式applied schemas用于提供 3DGS 论文所需的全部数据属性它还包含若干可选的渲染提示rendering hints用于告知渲染器应该如何投影、排序这些高斯泼溅点。这些提示通常与数据训练时所做的选择相关联。从 schema.usda 可以看到该模式声明了 6 个内置的prepend apiSchemasclass ParticleField3DGaussianSplat ParticleField3DGaussianSplat ( inherits /ParticleField ... prepend apiSchemas [ ParticleFieldPositionAttributeAPI, ParticleFieldOrientationAttributeAPI, ParticleFieldScaleAttributeAPI, ParticleFieldOpacityAttributeAPI, ParticleFieldKernelGaussianEllipsoidAPI, ParticleFieldSphericalHarmonicsAttributeAPI ] ) { ... }这意味着只要你在舞台上定义了一个ParticleField3DGaussianSplatprim上述 6 个应用模式就自动附加在其上无需手动操作。C 侧对应的注册逻辑见 particleField3DGaussianSplat.cpp其中TfType注册和UsdSchemaBase别名ParticleField3DGaussianSplat使IsA查询和按 prim 类型名查找类型成为可能。该模式在 plugInfo.json 中以schemaIdentifier: ParticleField3DGaussianSplat注册到插件系统。其父类ParticleField的定位见 ParticleField 文档是粒子场家族的共同基类所有派生粒子场模式都必须提供 Position、Kernel、Radiance 三类属性形式不限并可选提供 Orientation、Scale、Opacity 等属性。ParticleField3DGaussianSplat正是这一约定在原始 3DGS 技术上的具体落地。usdVol 的 overview 文档 也明确指出ParticleField是为了支持 3D Gaussian Splats 这类光场lightfield技术而引入的并设计上可扩展到 NeRF 等后续技术。二、内置应用模式与数据属性ParticleField3DGaussianSplat本身只直接声明了 2 个属性两个渲染提示见后文其余数据属性全部来自 6 个内置应用模式。以下逐一说明类型与语义依据 schema.usda 中各应用模式的声明以及 particleField3DGaussianSplat.h 中生成的便捷访问器。1. 粒子位置ParticleFieldPositionAttributeAPIpositionspoint3f[]每个粒子在局部空间中的位置该数组的长度决定了粒子场中的粒子数量。positionshpoint3h[]半精度half版本用于减小数据占用schema 明确约定如果 float 版本可用数据消费者应优先使用 float 版本。若未提供任何位置数据则该粒子场不包含任何粒子其他逐粒子数据scale、orientation 等若过长会被截断到粒子数若过短则整段数据被丢弃并回退到默认值。2. 粒子朝向ParticleFieldOrientationAttributeAPIorientationsquatf[]/orientationshquath[]每个粒子的四元数朝向用于旋转其高斯椭球 kernel。长度应与 positions 一致缺失或无效时应应用零旋转默认值。3. 粒子缩放ParticleFieldScaleAttributeAPIscalesfloat3[]/scaleshhalf3[]施加到 kernel 上的仿射线性缩放因子。注意 schema 特别说明这里的 scales 是线性尺度与 USD 其他地方一致不是3DGS 相关 PLY 文件中常见的对数log格式缺失时默认为单位缩放。4. 粒子不透明度ParticleFieldOpacityAttributeAPIopacitiesfloat[]/opacitieshhalf[]每个粒子的不透明度取值范围 [0, 1]采用传统线性图形学意义不是PLY 文件中那种需要 sigmoid 激活函数处理的变换数据。缺失时默认为全不透明1.0。5. 高斯椭球 kernelParticleFieldKernelGaussianEllipsoidAPI该应用模式不带属性它是一个类型标记marker schema声明该粒子场使用的是高斯椭球核。其文档schema.usda 与 ParticleFieldKernelGaussianEllipsoidAPI.md给出了无变换 kernel恒等位置/缩放/旋转、不透明度为 1在点p处的不透明度定义g(u0; o1; x p.length())由于标准差为 13-σ 点位于 3.0即99.7% 的 splat 支持范围落在半径为 3 的球形区域内每个 splat 的不透明度与高斯衰减相乘旋转与缩放把高斯球变换为椭球位置则把峰值衰减从原点平移。6. 球谐辐照度ParticleFieldSphericalHarmonicsAttributeAPI这是 3DGS 视角相关颜色的承载方式属性见 ParticleFieldSphericalHarmonicsAttributeAPI.md属性类型说明radiance:sphericalHarmonicsDegreeintuniform球谐最高阶数全部粒子共用回退值 3。阶数 N 意味着每个粒子有(N1)*(N1)个系数radiance:sphericalHarmonicsCoefficientsfloat3[]展平的球谐系数数组按粒子分组每粒子 N 个连续系数Y(m,l)先按 order (m) 排序、再按 index (l) 排序radiance:sphericalHarmonicsCoefficientshhalf3[]半精度版本float 版本可用时应优先使用 float长度约定系数数组长度 位置数据长度 ×(degree1)*(degree1)过长截断、过短忽略若完全缺失粒子应使用 degree 0 下对应 DC 信号(0.5, 0.5, 0.5)的球谐系数。渲染器可以根据 degree 计算每粒子元素大小从而按粒子条带化stripe读取该数组。三、本模式专属的渲染提示属性文档的主体内容是ParticleField3DGaussianSplat自带的两个uniform token属性。两者在 schema.usda 中均标记了customData { string group Metadata }即被归类为**元数据Metadata**而非渲染数据——它们只是提示渲染器完全可以忽略但它们通常与训练数据时做出的选择对应对调优渲染很关键。projectionModeHintUSD 类型token回退值perspective允许值perspective、tangential见 schema.usda 中 allowedTokens。渲染提示说明如何投影高斯以获得透视正确的画面perspective透视投影类似标准物体从摄像机视角渲染——高斯点按深度进行缩放与形变。tangential切向投影把成像平面视为观察球面的切线高斯点被正交投影能更好地保留形状与尺度有助于减少新视角合成novel view synthesis等特定应用中的畸变。C 侧通过GetProjectionModeHintAttr()/CreateProjectionModeHintAttr()访问创建时类型固定为SdfValueTypeNames-Token、可变性为SdfVariabilityUniformparticleField3DGaussianSplat.cpp。sortingModeHintUSD 类型token回退值zDepth。光栅化器通常按从后到前back-to-front的顺序绘制高斯点该属性提示相对于摄像机排序高斯点所用的度量方式。官方 文档 中列出了两个取值而对照当前 schema.usda 与 C 头文件注释允许值实际包含三个zDepth按粒子位置变换到摄像机局部空间后的 Z 分量排序最常用也是 3DGS 光栅化器的典型做法cameraDistance按粒子到摄像机的欧氏距离排序rayHitDistance按摄像机到射线击中粒子位置的距离排序用于光线追踪场景从源码注释看不支持光线追踪的光栅化器可将该值按cameraDistance处理。这三个 tokenzDepth、cameraDistance、rayHitDistance均已发布在 tokens.h 的UsdVolTokens中C 代码里可直接用UsdVolTokens-zDepth等形式取值编译器可校验拼写。四、继承属性一览按 官方文档 的分组ParticleField3DGaussianSplat从各祖先模式继承的属性如下继承自 Gprim属性USD 类型回退值doubleSidedboolFalseorientationtokenrightHandedprimvars:displayColorcolor3f[]—primvars:displayOpacityfloat[]—继承自 Boundable属性USD 类型extentfloat3[]继承自 Xformable属性USD 类型xformOpOrdertoken[]继承自 Imageable属性USD 类型回退值proxyPrimrelrelationship—purposetokendefaultvisibilitytokeninherited这些继承属性赋予了ParticleField3DGaussianSplat完整的 GPrim 能力变换xformOp:系列 xformOpOrder、包围盒extent、可见性visibility、用途purpose例如render、显示用途的 primvars 与代理 prim 等——也就是说粒子场可以像普通几何体一样被定位、缩放、裁剪与组织。五、USDA 用法示例usdVol 的 overview 文档 给出了一个最小可用的ParticleField3DGaussianSplatprim 示例其属性按位置含数量→ 可选 kernel 控制属性 → 辐照度 → 渲染提示组织def ParticleField3DGaussianSplat GSplat { # Particle positions (and count) point3f[] positions [(0, 0, 0), ... (0, 1, 1)] # Some optional attributes that control the kernel instance quatf[] orientations [(1, 0, 0, 0), ... (0, 0, 1, 0)] float3[] scales [(1, 1, 1), ... (1, 0.5, 0.7)] float[] opacities [1, ... 0.8] # Radiance attributes (from ParticleFieldSphericalHarmonicsAttributeAPI) uniform int radiance:sphericalHarmonicsDegree 2 float3[] radiance:sphericalHarmonicsCoefficients [ (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1), ... (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1), (1, 1, 1)] # Render hints specific to ParticleField3DGaussianSplat uniform token projectionModeHint perspective uniform token sortingModeHint zDepth }使用要点均出自 schema 文档的约定positions是必需的它同时承担位置与粒子数量两个职责orientations、scales、opacities的长度必须与之匹配过长截断、过短整段丢弃并回退默认值。球谐系数长度 positions 长度 × (degree1)²示例中degree 2意味着每粒子 9 个系数与示例数组每粒子 9 项的写法一致。数据精度选择若已有 float 精度数据请使用positions/orientations/scales/opacities/radiance:sphericalHarmonicsCoefficients*h后缀版本用于减小 footprint两者同时存在时消费者应优先 float 版本。两个渲染提示按训练方式取值projectionModeHint与sortingModeHint应如实反映数据训练时所用的投影/排序策略如 3DGS 训练普遍采用透视投影 z 深度排序即示例中的默认组合。六、C 与 Python API 用法C 模式类UsdVolParticleField3DGaussianSplat定义在 particleField3DGaussianSplat.h核心 API 包括Get(stage, path)/Define(stage, path)分别在已存在路径上获取、或在指定路径定义该模式的 prim实现Define会写入 prim 类型名ParticleField3DGaussianSplatGetProjectionModeHintAttr()/GetSortingModeHintAttr()获取两个渲染提示属性实现每个应用模式的便捷访问器如ParticleFieldPositionAttributeAPI()、GetPositionsAttr()/CreatePositionsAttr()、GetPositionshAttr()、GetScalesAttr()、GetRadianceSphericalHarmonicsCoefficientsAttr()等头文件与 6 个内置应用模式一一对应。头文件中还提供了一组自定义非生成方法用于在 float/half 双版本属性之间做选择见 particleField3DGaussianSplat.h 与 particleField3DGaussianSplat.cppUsesFloatPositions()、UsesFloatOrientations()、UsesFloatScales()、UsesFloatOpacities()、UsesFloatRadianceCoefficients()判断逻辑私有辅助_UsesFloatAttr读取 float 版本属性在最早时间样本无时间样本时取默认值的数组若GetArraySize() 0则优先使用 float 版本并返回 true否则返回 half 属性/token 与 false。这正是float 可用时优先 float约定的程序化实现。Python 侧该模式经wrapParticleField3DGaussianSplat.cpp等 SWIG 封装导出UsdVol模块wrap 注册、插件信息 plugInfo.json中的类名为UsdVolParticleField3DGaussianSplat可在脚本中直接Define并写入上述属性。七、关键文件索引内容路径本文核心参考生成的模式文档ParticleField3DGaussianSplat.md基类模式文档ParticleField.md应用模式文档kernel / 球谐ParticleFieldKernelGaussianEllipsoidAPI.md、ParticleFieldSphericalHarmonicsAttributeAPI.md模式定义prim 类型与属性声明schema.usdaC 模式头文件 / 实现particleField3DGaussianSplat.h、particleField3DGaussianSplat.cpp发布 tokenzDepth/cameraDistance/rayHitDistance/perspective/tangential 等tokens.h模块概览与粒子场最佳实践含 USDA 示例overview.mdusdVol 用户文档目录usdVol 文档目录小结ParticleField3DGaussianSplat通过具体模式 6 个自动应用模式的组合把 3DGS 论文中的位置、朝向、缩放、不透明度、高斯椭球核与球谐辐照度统一纳入 USD 的稀疏属性体系并用两个可被忽略但信息量十足的Metadata组 token 提示投影模式、排序模式衔接训练侧与渲染侧的约定理解其继承链Gprim → ParticleField → ParticleField3DGaussianSplat与各应用模式的 float/half 双版本属性约定是正确编写和消费 3D 高斯泼溅 USD 资产的关键。【免费下载链接】OpenUSDUniversal Scene Description项目地址: https://gitcode.com/GitHub_Trending/ope/OpenUSD创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表