Low-Level Evaluation #476
-
When considering an expression in libfive such as min(self, other) where self and other are non-constant, passing individual values to evaluate the expression at specific points is straight-forward. However, my understanding is that evaluation in libfive returns continuous output/more than a collection sampled points. How is this type of evaluation actually performed by libfive/its tree structures and the CPU? If continuity isn't actually present, is there a sampling resolution at which all of the points "collapse" into a continuous field due to roundoff or some other effect? |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 3 replies
-
Evaluation works by converting a math tree into a "tape", which is a series of individual math operations with input and output locations. For example,
This tape is then evaluated by one or more interpreters, which are specialized for a particular kind of evaluation. For example, the Here's an actual example of the evaluation loop. This means evaluation can take place at any |
Beta Was this translation helpful? Give feedback.
Evaluation works by converting a math tree into a "tape", which is a series of individual math operations with input and output locations. For example,
cos(X + 1)
could becomeThis tape is then evaluated by one or more interpreters, which are specialized for a particular kind of evaluation. For example, the
ArrayEvaluator
evaluates an array of single points; theDerivArrayEvaluator
performs both value and partial derivatives.Here's an actual example of the evaluation loop.
This means evaluation can take place at any
float x, y, z
position. We're eventually limited by floating-point resolution, and the exact limits will depend on the structure ofβ¦