-
Notifications
You must be signed in to change notification settings - Fork 16
RFC: Cpu mesh to gaussian example #193
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
|
thanks for sharing, aesthetic work like this is interesting! the popping is caused by gaussian sort updates and mesh clipping. sort update popping will be resolved in the future (waiting on the wgpu radix sort /w subgroup support) questions:
a related project (a very useful reference for geometry -> gaussian compute shaders): ideally, mesh skinning can be left native, where the compute shader is converting surfaces -> gaussians post-morph.
the current configuration does clip edges of gaussians with full opacity.
I appreciate the example! I'll add a few suggestions. generally, I think work like this can definitely help iron out some of the wrinkles in the gaussian render pipeline and align the project towards game workflows |
| faces: Vec<Gaussian3d>, | ||
| ) { | ||
| // Vertices cloud - visible by default | ||
| if !vertices.is_empty() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
multiple gaussian clouds occupying similar space will cause popping due to object-level centroid sorting.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could you clarify if you're suggesting a change here? I don't think I understand.
|
Thanks for the comments :) I applied the changes, asked for clarification on one. Is that wgpu feature planned or on the way? If it’s only a rendering artefact then other experiments can probably proceed while waiting for it. Do you have a timeline for the global sorting? I would presume that the memory for the gaussians for the real-time conversion would still have to get allocated on the rust side? Or is it possible to instance the gaussians for the meshes in the shader directly? If you accept this example PR, next I could make the cutoff a uniform as a small warmup for the compute shader conversion example. I’ll do my best to do that one independently, but I would open a draft PR if I get stuck. Hope that’s not a bother :) |
This is a proof of concept and RFC for a new example which converts a mesh into a gaussian cloud based on its points, edges, or triangles, on the CPU.
The motivation for this was strictly aesthetic. I thought it would be an interesting art style to have low- or medium-poly 3D assets converted to gaussian clouds in order to look more painterly and dreamlike.
Maybe this could also be an interesting way to debug and help enhance the rendering pipeline. I think I already see some popping and rendering artefacts from looking around the converted model. Might also be due to my flawed understanding of the library or bevy meshes in general, maybe I flipped some axis by accident or something. I had very little experience manipulating meshes so I had to rely on AI to help, which I hope doesn't diminish the value of this example, at least as a starting point for discussion.
The mesh in this example is Blender's Suzanne monkey model, which from my searches doesn't seem to have license restrictions. I also haven't yet removed the basic cube which I used for debugging the splat orientations.
Please share your thoughts when you can spare the time. Personally this would be my ideal art style for a game right now, so I would like to understand its limitations. With that in mind, my questions are: