My ultimate goal: I’d like to create procedural cirrus clouds (long, thin, feathery high altitude clouds), ideally shaped fairly directly, e.g. with a curve. There are some very good procedural cloud systems for other types of clouds, but I have been unable to find a setup for realistic cirrus clouds. Part of the key to a realistic result is controlling the wispiness differentially along the “path” of the cloud, as these clouds tend to be puffier at their leading edge, then stretch out and become feathery along the trailing edge, with the feathery strands following the curve of the cloud, which follows air currents, presumably.
I’ve come up with a fairly realistic solution using geometry nodes and the volume cube node (see below), but it’s very slow, even for a single cloud, and my animation requires a dozen clouds or more. The key to making it work is that I’ve essentially created a custom coordinate system that follows the curve of the cloud to control textures differentially along the curve, in order to control wispiness as described in the first paragraph. I’m doing this in geometry nodes by using the spline factor to get the Z coordinate along the curve, and raycasting to extruded horizontal and vertical planes following the curve to get X and Y coordinates.
In theory, I could achieve a similar result more efficiently in shader nodes if I could create or access a similar custom coordinate system that follows the curve, but I can’t come up with a way of doing that in shaders nodes.
I can think of three theoretical solutions. Unfortunately, I can’t get any of them working.
Use existing features of shader nodes to infer a similar coordinate system from a curve or mesh. As far as I can tell, the only texture coordinate system which follows the shape of a curve or mesh is UV, which doesn’t help with volumes.
Use my current method of creating a custom coordinate system in geometry nodes, saving it in some way accessible within shader nodes and doing all the actual texture interpretations there. Unfortunately, geo nodes doesn’t seem to have a way to store any info other than density in a volume. It appears the roadmap for geometry nodes will eventually allow storing arbitrary attributes as new grids in the volume, but this hasn’t been implemented yet. Of course, named attributes are accessible within shader nodes, but they seem to only apply to a mesh surface, not a volume.
Some other method of creating a volume that does allow custom data grids. Any ideas?
TIA for any suggestions!
-Tim Nolte Maskil Productions Ltd