Seiler’s Interpolation
t =
Above is an interactive demo showing a cubic Bézier curve with 4 control points b0, b1, b2, and b3 evaluated using Seiler’s interpolation, which uses 2 Seiler points s1 and s2 computed from the Bézier control points.
Abstract
Seiler's interpolation allows evaluating polynomial curves, such as Bézier curves, with a small number of linear interpolations. It is particularly effective with hardware linear interpolation used in GPU texture filtering. We compare it to the popular alternatives, such as de Casteljau's algorithm, and present how it extends to higher-degree polynomials.
Summary
For a cubic curve, its two Seiler points s1 and s2 can be computed from the Bézier control points b0, b1, b2, and b3 using
s1 = 3b1 – b0 – b3
s2 = 3b2 – b3 – b0
Then, the Bézier curve C at parametric position t can be evaluated with only 3 linear interpolation (lerp) operations using the end points of the Bézier curve and the two Seiler points:
b03 | = lerp( b0, b3, t ) |
s12 | = lerp( s1, s2, t ) |
C(t) | = lerp( b03, s12, (1–t)t ) |
Using this representation, one can store the Seiler points s1 and s2 instead of the internal Bézier control points b1 and b2. In a GPU implementation, these control points can be read from a texture, which can automatically perform the first two linear interpolations above in hardware, and only the final linear interpolation needs to be computed in software.