Thanks. Volumes seem like the most idiomatic way to do it. I’ll have to do some study of how rendering volumes works, and see if it is plausible to implement it this way. Is there a writeup somewhere about the architecture of the renderer?
I found this https://blender.community/c/rightclickselect/Zbdbbc/ feature request which is related to what I’m thinking about. A challenge of solving it in a generalized way, is choosing the integration step size to properly track the disturbances in the refractive index field, unless this is a property the volume can keep track of itself before rendering. The step size must be appropriate for the scale of the disturbances. For instance over a burning fire, the scale is a few cm, while in the atmosphere as a whole, the scale is thousands of meters.