# Tag Info

The Lane-Riesenfeld algorithm subdivides the control polygon of a B-spline to create a new control polygon with the same limit spline. It's made up of two steps: first, duplicating all of the control points $P_i$ into $P^\prime_{2i}$ and $P^\prime_{2i+1}$; then, moving each point to the midpoint between it and the next point, so $P^\prime_i \rightarrow \... 6 The subdivision schemes are not arbitrary. Catmull-Clark, arguably the most used subdivision scheme, generalizes bicubic B-splines to meshes of arbitrary topology. Most, other subdivision schemes also generalize other degree B-splines to arbitrary topology. Doo-Sabin for biquadratic B-splines and Loop subdivision generalizes quartic box-splines defined ... 5 More of an extended comment than an answer: What do you mean by "optimization and accuracy"? Do you mean computational efficiency for some particular application, like ray tracing, physical simulation, CAD modeling, ....? Note that the idea of "accuracy" for a subdivision scheme is not well-posed. Different schemes will have different limit surfaces, but ... 4 Subdivision can be used for curves in 2D just as easily as for surfaces in 3D. Usually the subdivision algorithms applied to 2D are called subdivision curves. Subdivision curves do not suffer from the problem that subdivision surfaces have around extraordinary points and therefore all subdivision surfaces can easily be converted to (uniform) B-splines. This ... 4 Instead of subdividing until reaching certain edge length on screen, you should look into GPU Gems 2 article "Adaptive Tessellation of Subdivision Surfaces with Displacement Mapping" by Michael Bunnell. It uses edge flatness test to adaptively tessellate the geometry which results in better quality with the same number of triangles. With your current ... 3 What you are looking for is semi-sharp creases. You can find it in section 3 of this paper: https://graphics.pixar.com/library/Geri/paper.pdf Basically, each edge is given a sharpness value$s$. This can either be a integer or a floating point value. This value signifies how many subdivision steps this edge will be subdivided using sharp-subdivision rules. ... 3 I'm just going to add a few more details to the paper that Stefan linked to. First of all, the matrix$H_1$displayed in the paper is incorrect; every element should be multiplied by a factor of$\frac{1}{8}\$. $$H_1 = \frac{1}{8} \begin{bmatrix} 4 & 4 & 0 & 0 \\ 1 & 6 & 1 & 0 \\ 0 & 4 & 4 & 0 \\ 0 & ... 3 The derivation is presented in the original paper that introduced CC subdivisions as a generalisation of B-Spline patches: https://people.eecs.berkeley.edu/~sequin/CS284/PAPERS/CatmullClark_SDSurf.pdf 2 For regular quad faces, what you want to do is send the vertices for the quad you're evaluating and the eight neighboring quads around it: a total of 4x4 vertices. The B-spline needs to know where the neighboring vertices are in order to generate a surface patch that connects smoothly to the neighboring patches. In the case that the adjacent faces aren't ... 2 Both T-splines and subdivision surfaces are capable of handling an arbitrary topology input mesh, whereas NURBS can only handle meshes with regular topology. Complex NURBS objects are therefore made out of multiple regular meshes. These meshes are trimmed and fit together to form a single complex object. However, along the trimming lines of the mesh ... 1 The procedure only works for closed meshes or closed parts of a mesh with boundaries. For vertices V_{i} on the boundary of an mesh you have to use the following rules:$$V_i = \frac{V_{i-1} + 6 V_{i} + V_{i+1}}{8},$$where V_{i-1} and V_{i+1} are previous and next vertex on the boundary with respect to V_i. In your case it would be:$$P = \frac{e_2 +...