A procedural crystal setup in Geometry-Nodes (GN).
The provided Blender file contains the "crystal" GN node-tree plus two procedural materials (one for the surface and the other for the optional volume).
The "crystal" node-tree has some of the main parameters exposed, but lot of interesting results can be obtained by playing around and study the internal nodes configurations.
The Apply Damage enables the edge damage that can additionally be controlled via the other parameters. This option is the one that will slow down the most the node-tree, as it it relies on mesh-boolean operation, even more if combined with the Subdivision Surface option.
We suggest to start with these two options off (node-tree value set to 0) to get an initial understanding of the node-tree, and turn them on only after, to get more realistic and fine details.
Area imperfections can instead be controlled via the "crystal_empty" object plus the related parameters. These affects also the location and size of the internal volume, if enabled via Add Internal Volume.
Given the nature of the crystal material best results are obtained with Cycles rendering.
This setup has been tested with Blender 3.2.1.
For any inquiries, feel free to reach out on Twitter