Fields are functions that return different values at different positions. You can combine simple fields to produce a field that varies in complex ways, then sample the field at different positions, and finally use the values in your computations. If you build compounds that take a field as input, you can create reusable effects that can be easily modified and tweaked by changing the input field.
Unlike voxel-based volumes, field values are not interpolated between values stored on a grid. Instead, fields are implicitly defined and evaluated directly at positions. This means that they are independent of resolution.
A good analogy to help understand fields is that, if a volume is similar to an image-based texture where the voxels correspond to pixels, then a field is like a procedural texture that can be sampled at any resolution. In fact, a vector field can be used as a volumetric texture directly.
Another analogy is with Fcurves. You use an Fcurve to define a custom mapping from values of X to values of Y. This can then be used to control an effect that looks up the curve values at whatever values of X are required, and then uses the resulting Y values in its calculations. Similarly, you can use a field to map positions to values and then use the field to drive an effect based on its values at a geometry's point positions.
Bifrost has two kinds of field:
In addition, proxy fields let you create fields using the properties of point-based geometries as well as volumes. This lets you perform calculations that combine field values with properties stored on geometry, such as point_age
or custom weights.