Hierarchical Edits: Interpolate "Backwards"?

30 views
Skip to first unread message

John R

unread,
Sep 29, 2021, 2:47:59 PM9/29/21
to OpenSubdiv Forum
Hi all,

Apologies if this is a silly question, but I'm trying to understand if there is a way to interpolate "backwards" in OpenSubdiv. 

My question is most closely related to tutorial 4.3. In this example, a subdivision surface is constructed with 4 levels. Edits are applied to a pair of vertices in level 1, and these changes are propagated through subsequent levels. What I'm wondering is if it's possible for the user to make an edit in, say, level 3, and propagate these changes backwards to levels 2, 1, and 0 (essentially "solving for" the lower resolution meshes that would "produce" the modified mesh at level 3)? Is this possible in OSD? 

Let me know if I can clarify my question any further. Thanks in advance for any help!

Best,
John

Pieter Barendrecht

unread,
Sep 30, 2021, 1:41:57 PM9/30/21
to John R, OpenSubdiv Forum
Hi John,

Great question! Unfortunately, it is — generally spoken — not possible to do this (at least, not exactly). Note that this is not a shortcoming of OpenSubdiv, but a theoretical issue. To see why it does not work, consider the following example: three control points A, B, C forming a triangle. When subdividing it, we obtain six new control points a, b, c and ab, bc, ca forming a hexagon. For example, a is the combination ⅛A + ¾B + ⅛C, and ab is the combination ½A + ½B. The above can be summarised by the following illustration and system of equations (using matrix/vector notation):

Triangle.png
Matrix.png
Now, your question is whether we can obtain the control points A, B and C when we're given the control points a, b, c and ab, bc, ca (and their mutual connections).

If we start with A, B, C given, we can compute the six subdivided points. If we then, for example, move ab a little bit towards B, our task is to find the new position(s) of A and/or B such that our original subdivision rule ab = ½A + ½B is satisfied once again. Note that this involves moving A and/or B. However, when we move A and/or B, the subdivision rules for bc and/or ca will no longer be satisfied (and those for a, b, c might also be violated)! Alas...

Mathematically speaking, the system of equations is overdetermined, which means that apart from special settings, it is not possible to do this (exactly). Only if a, b, c and ab, bc, ca were originally obtained through subdivision, we could compute A, B, C from them.

Just to be complete, in some cases it might be possible to get a reasonable approximation, meaning that you can obtain a triangle A, B, C that when subdivided, is similar to — but not exactly the same as — the hexagon a, b, c, ab, bc, ca. Keyword here is 'least squares'.

Hope this helped! Best,
Pieter

--
You received this message because you are subscribed to the Google Groups "OpenSubdiv Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email to opensubdiv+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/opensubdiv/3e0940e7-e7f6-4326-9905-0ac7aeaf8330n%40googlegroups.com.

John R

unread,
Oct 4, 2021, 3:15:23 PM10/4/21
to OpenSubdiv Forum
Hey Pieter,

Yes, this definitely makes sense and is very helpful. Thank you for taking the time to provide such a detailed explanation! I will write back if I come up with any interesting approximations or findings related to my project.

Best,
John

Reply all
Reply to author
Forward
0 new messages