-
Notifications
You must be signed in to change notification settings - Fork 76
Description
Hi,
in the original 3DGS repo, when saving Gaussians to a .ply file, the opacity is saved in its unactivated form (i.e. before applying a sigmoid function):
https://github.com/graphdeco-inria/gaussian-splatting/blob/54c035f7834b564019656c3e3fcc3646292f727d/scene/gaussian_model.py#L246
Based on this, I would assume, that any 3DGS viewer that loads a .ply file, will apply a sigmoid to the loaded opacities. Hence it would make sense to apply an inverse sigmoid function ( https://github.com/graphdeco-inria/gaussian-splatting/blob/54c035f7834b564019656c3e3fcc3646292f727d/utils/general_utils.py#L18 ) to the opacities before storing them in
pixelsplat/src/model/ply_export.py
Line 26 in 59d420a
| def export_ply( |
A small disclaimer: I didn't look into code of 3DGS viewers, to confirm that they apply a sigmoid on the loaded opacities. However, I've played a bit with NoPoSplat and there I saw clear artifacts when visualizing my exported .ply files, which disappeared when I applied the inverse sigmoid before exporting. When visualizing exported .ply files from pixelSplat, the improvement is a bit less obvious, but in my opinion it also looks better, with the inverse sigmoid:
-
Without applying inverse sigmoid on the opacities before exporting (visualized using https://antimatter15.com/splat/):

-
With applying inverse sigmoid on the opacities before exporting:

It would be great if you could confirm whether the inverse sigmoid indeed makes sense here and potentially update the code.
Thanks and best,
Philipp