Blender
V3.3
|
#include "BLI_function_ref.hh"
#include "BLI_generic_virtual_array.hh"
#include "BLI_string_ref.hh"
#include "BLI_vector.hh"
#include "BLI_vector_set.hh"
#include "FN_multi_function.hh"
Go to the source code of this file.
Classes | |
class | blender::fn::FieldNode |
class | blender::fn::GFieldBase< NodePtr > |
class | blender::fn::GField |
class | blender::fn::GFieldRef |
struct | blender::fn::detail::TypedFieldBase |
class | blender::fn::Field< T > |
class | blender::fn::FieldOperation |
class | blender::fn::FieldInput |
class | blender::fn::FieldConstant |
struct | blender::fn::FieldInputs |
class | blender::fn::FieldContext |
class | blender::fn::FieldEvaluator |
class | blender::fn::IndexFieldInput |
struct | blender::fn::ValueOrField< T > |
Namespaces | |
blender | |
blender::fn | |
blender::fn::detail | |
Enumerations | |
enum class | blender::fn::FieldNodeType { blender::fn::Input , blender::fn::Operation , blender::fn::Constant } |
Functions | |
Vector< GVArray > | blender::fn::evaluate_fields (ResourceScope &scope, Span< GFieldRef > fields_to_evaluate, IndexMask mask, const FieldContext &context, Span< GVMutableArray > dst_varrays={}) |
Utility functions for simple field creation and evaluation | |
void | blender::fn::evaluate_constant_field (const GField &field, void *r_value) |
template<typename T > | |
T | blender::fn::evaluate_constant_field (const Field< T > &field) |
Field< bool > | blender::fn::invert_boolean_field (const Field< bool > &field) |
GField | blender::fn::make_constant_field (const CPPType &type, const void *value) |
template<typename T > | |
Field< T > | blender::fn::make_constant_field (T value) |
GField | blender::fn::make_field_constant_if_possible (GField field) |
#FieldNode Inline Methods | |
bool | blender::fn::operator== (const FieldNode &a, const FieldNode &b) |
bool | blender::fn::operator!= (const FieldNode &a, const FieldNode &b) |
Variables | |
template<typename T > | |
static constexpr bool | blender::fn::is_field_v |
A #Field represents a function that outputs a value based on an arbitrary number of inputs. The inputs for a specific field evaluation are provided by a #FieldContext.
A typical example is a field that computes a displacement vector for every vertex on a mesh based on its position.
Fields can be build, composed and evaluated at run-time. They are stored in a directed tree graph data structure, whereby each node is a #FieldNode and edges are dependencies. A #FieldNode has an arbitrary number of inputs and at least one output and a #Field references a specific output of a #FieldNode. The inputs of a #FieldNode are other fields.
There are two different types of field nodes:
When fields are evaluated, they are converted into a multi-function procedure which allows efficient computation. In the future, we might support different field evaluation mechanisms for e.g. the following scenarios:
Whenever possible, multiple fields should be evaluated together to avoid duplicate work when they share common sub-fields and a common context.
Definition in file FN_field.hh.