I am a blender user who very frequently uses Houdini to generate large point cloud simulations, and I’d like to see proper support for alembic pointclouds in Blender:
My goals were:
A. Be able to use Alembic import to import points as a pointcloud, not verts on a mesh. This created the limitation that colors and attributes had to exist on face loops, which pointclouds do not have.
B. via geo nodes, be able to instance other geometry onto the points, and use “transfer attribute” with index and have it work. (This works by using “index / [num vertices on instancing geometry]”).
C. even better, have Cycles X render point clouds as spheres, as approached in this differential D9887.
D. ensure point cloud renderings had access to attributes imported in step A for alembic files.
tldr I created some branches, and I need to know the way to submit differentials.
Branch A - Alembic → Pointcloud Importer
This was pretty straightforward, though it was important to also change the procedural renderer (alembic_read.cpp) to be consistent with the rest.
Once I was able to get the pointclouds into Blender here, I had achieved goal A but I still needed to support B - transfer attribute by index.
Branch B - Mesh and Point Cloud Info Geometry Nodes
Each point input has attributes that must be instanced by realized geometry.
When instancing these points to geometry, (say a 4 point plane), the 1 point attribute could be transferred to the 4 points of the plane if they referred to the same source point.
The source point index for any destination point is (index_realized / vertices_per_instance).
tldr Mesh Info provides the verticies_per_instance.
This is loads faster than using geometry searches for the same purpose.
Branch C - Cycles Point Cloud as Spheres
This branch took the work from branch A and combined D9887 which was then refactored to commit 7b530c6096112c9a15db2e637d44012e248f1ab4 (origin/blender-v3.0-release).
I learnt a lot about Optix kernel rendering, kernel textures, woof - ultimately I have this rendering on CPU, CUDA, and OPTIX on my 3090 on Manjaro. The material issues that were mentioned in the original diff appear to be resolved.
Due to the complexity of the work spanning across various modules, and the result ultimately being one diff, with large parts ultimately being authored by pmoursnv and brecht, how best should I submit diffs?
Can I present the Alembic and Mesh and Point Cloud Info nodes as 1 diff, and somehow present the D9887 refactor as another?
Thanks for your help, looking forward to contributing!