Background

I want to render 3D points with color information for scientific visualization. I have several hundred thousands of points up to 2 million. For each point I have [xyz] coordinates and two scalars [t, tau]. The scalars should be shown as color and are currently mapped to uv-coordinates.

Wanted result

I want to achieve something like this but with (lots) more points/spheres:

---

Current solution

My workflow

  1. load the data
  2. create/copy a sphere mesh
  3. move the copied mesh to [xyz] coordinates
  4. define the uv coordinates for the whole mesh with respect to [t, tau]
  5. repeat 2. to 4. for each data entry
  6. join all created meshes

Problem

While loading the points and creating the scene I get a slowdown. The first 1000 points work fine, but the overall process gets quickly slower. I am sure it has something to do with the commands I use from the API and the amount of objects I create.

I had two ideas to solve the problem - neither worked:

  1. Create a sphere mesh for each data entry and join them in the end. This leads to a huge amount of created objects, which slows down blender (compare this question).
  2. Create the meshes for a subset of the data entries and join these to a single object/mesh. Do this until all points are loaded. This leads to the problem, that the joining process gets more complicated and increasingly takes more time.

Questions

  1. Are there better commands I can use to speed up the process?
  2. Is there a better solution than copy a sphere mesh for each data entry and adjust its UV-coordinates for coloring. E.g. create one mesh and add vertices to it - how can I alter the UV-coordinates this way.
  3. Is there generally a better way to render a colored point cloud, e.g. this one is missing the colors.
  • 2
    Consider using a different filehosting for your py and data files. Not a big fan of having to sign up to download. Might want to check out Point Cloud Visualizer – batFINGER Mar 21 at 12:55
  • @batFinger Thank you for the hint! I moved files to github. I will also check Point Cloud Visualizer – Thomas Seidl Mar 21 at 13:05
  • 2
    In order to give you specific answers please only ask one question at a time. – Ray Mairlot Mar 21 at 13:59
  • Well the way I see it this is going to be a problem regardless of the used technique, 2 million spheres is a lot. You are probably just hitting inherent performance limitations of Blender, the viewport code and general Python speed. From a rendering performance point of view, it would theoretically be better to have only one sphere and instance it around (a lot less geometry data to store at least) and not merge anything at all. That being said I don't think the viewport performance and general Blender operations (like selection and undo) are gonna like it a lot regardless – Duarte Farrajota Ramos Mar 21 at 18:15
  • @Duarte: Thank you for the input. Create instances of the sphere maybe another solution. I have searched around and also got a clue for the coloring problem. I will keep this question alive and update my solution. – Thomas Seidl Mar 21 at 21:10

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Browse other questions tagged or ask your own question.