I’m developing a new fluid simulation engine that can be used for very large scale scenarios ( based on sparse, adaptive multiresolution techniques for grid resolutions of up to 4000x4000x4000 on standard work stations ).
However, as all the development effort is put into the complex simulation algorithms itself, there are no time ressources left for programming graphical interfaces or different plugins to each 3D Apps such as blender and others.
So the simulation engine will be a console-only application to be used for the sole purpose of performing the physical fluid simulation itself.
So my question now is how to solve the problem of integration/interoperability of the engine with host 3D apps (I’m thinking of blender but it should also work with the main commercial apps like Maya etc.)
There are three main “interfaces” i.e. input-output situations to handle:
(1) Specification of parameters that control the behaviour of the fluid simulation itself independent from a concrete scene setup, such as “grid resolution”, “time step”, “CFL number”, “fluid viscosity” abd so on.
(2) Specification of the fluid sources and interacting (possibly animated) solid objects, custom force fields etc.
(3) Output of the result for rendering.
The current approach is to use text/XML/Jason based configuration files for (1) and sequences of OpenVDB volumes to be read from and written to (a fast) disk for (2) and (3). OpenVDB wuld be a “natural fit” for the simulator as the internal representation of all data is based on sparese level set functions (fluid,solid,force-fields, and even all output relevant for rendering so there would be no need for meshing or mesh-based input/output) . However, due to the very high resolution , the amount of storage for sequences of large OpenVDB volumes (even sparse and compressed) may be impractical for a 3D workflow (It should be feasible, however, with the now avaialble fast and large SSD to handle animations of several hundreds frames in the form of OpenVDB volumes where each volume may be several hundred MB )
I for myself have only limited experience with 3D apps and CGI production workflow (my main focus is on programming and physical simulation algorithms) so I ask this question to the CGI community here.
Is the approach outlined above (i.e. parameter-config-files plus disk-resident OpenVDB-volumes) feasible with respect to usability in a typical 3D production workflow ?
What about the alternatives (such as python/C++ bindings ? simple and general plugin interfaces ? I assume it would then be necessary to write separate plugins for each 3D app ? )
Some other Open Source engines (e.g. Mantaflow) offer extensive C++ or Python interfaces such that animation can be directly scripted in the programming language. However I wonder if directly writing C++ code or python scripts to drive animations is not the preferred way of interacting with a simulation engine for most 3D artists/users ?
Thanks for any proposals or comments