How to clip a specific area from 3D Gaussian Splatting (3DGS) in Cesium

Hi everyone,

Is it possible to clip a specific area from 3D Gaussian Splatting (3DGS) in Cesium?

I would really appreciate it if anyone could help me.

Hey @Masum_Billah, good question!

I don’t believe clipping is currently supported for Gaussian Splat tilesets in CesiumJS. Gaussian Splats use a separate rendering pipeline that doesn’t have clipping plane integration yet.

I haven’t seen an existing GitHub issue tracking this, so if it’s important for your workflow I’d encourage you to file a feature request on the CesiumJS repo. That helps the team gauge interest. In the meantime I’ll check internally if there’s any info I’m missing.

Could you share a bit more about what you’re trying to do? For example, if you’re trying to isolate a section of a 3DGS scan, there might be options on the data prep side (trimming the splats before tiling) that could get you closer. Let me know!

Hi @darcyvdd

Thank you for your response.

I was trying to clip the 3DGS using a clipping polygon. But it did not work. I thought there was another way to clip it, that’s why I posted a question here. Thank you for confirming it.

Hi @darcyvdd, what would be the suggested method to trim the splat before tiling? I don’t think thats possible with CesiumIon. Presumably this would require iTwin or another 3DGS generation tool?

It does not necessarily require any proprietary tool. There are online editing tools for tasks like this.

The editor at SuperSplat Editor is pretty popular. The following is a short screencap that shows the basic process:

  • Drag-and-drop a PLY file
  • Use one of the ‘Selection’ tools at the bottom (‘Rectangle’ in the example)
  • Select the desired splats
  • Use the ‘Selection → Separate’ function from the menu bar
    (I’m guessing that this will be the English name here)
  • Delete the original data set from the ‘Scene Manager’

Cesium Splat Editing

The remaining data (i.e. the selection) can then be saved as a new PLY file, with the ‘File → Export → PLY’ menu entry.

Thanks @Marco13, my workflow is only using CesiumIon, which does not export a PLY. Clipping a selection from the CesiumIon-generated splat is the objective.

I understand your example with a PLY originating somewhere else and editing it with SuperSplat. Thank you for illustrating that.

The suggestion to ‘trim before tiling’ is only applicable when the tileset was generated from PLY. Otherwise, there is nothing to trim. If the splat data was created with a reconstruction from photos, and all that you have is the final tileset, then I’m not aware of an existing tool for this sort of clipping.

There are always ongoing efforts for improvements for CesiumJS, both for splats and for clipping. Given that clipping Gaussian splats is an important use case, I opened Clipping for Gaussian splats · Issue #13474 · CesiumGS/cesium · GitHub

(This includes a Sandcastle that shows a possible workaround, but this is only a draft, and requires Add custom shader for Gaussian Splats by dbiguenet · Pull Request #13418 · CesiumGS/cesium · GitHub to be merged first)

FYI, my 3dtiles-inspector tool allows cropping areas in 3dgs 3dtiles it will write results back to the 3d tiles files.

Hi @William_Liu

Thank you for your reply.
I used the 3dtiles-inspector tool and cropped areas from 3dgs 3dtiles and saved it.
After saving the tileset, when I tried to load it, it gave an error like the screenshot

Here is an example tileset that I used to crop

Thanks for your example, I have identified the issue. A fix will be released tomorrow

Alright, the fix is released now, it should be good now

Thank you @William_Liu . I will check.

@William_Liu
It is working. I appreciate your help.