# Gli amici delle sub-D

**URL:** <https://it.discourse.mcneel.com/t/gli-amici-delle-sub-d/8708>\
**Category:** Rhino Windows\
**Created:** [24 Aprile 2026, 2:40pm UTC](https://it.discourse.mcneel.com/t/gli-amici-delle-sub-d/8708 "2026-04-24T14:40:54Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Gambler](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/gambler/32/16276_2.png) [@Gambler](https://it.discourse.mcneel.com/u/Gambler)\
**Post date:** [24 Aprile 2026, 2:40pm UTC](https://it.discourse.mcneel.com/t/gli-amici-delle-sub-d/8708/1 "2026-04-24T14:40:54Z")

</div>

Un saluto a tutti.  
Come noto una curva, per essere “sub-D friendly”, deve soddisfare alcuni criteri.  
In particolare occorre la collinearità dei primi (e ultimi) tre CV e una loro disposizione spaziale piuttosto curiosa: la distanza tra il primo e il secondo CV deve essere un terzo della distanza tra il primo e il terzo CV.  
Ma perché questa regola?

Cominciamo a vedere innanzitutto perché non è sufficiente la “semplice” collinearità dei primi tre punti di controllo nonostante ci garantisca, da sola, una curvatura nulla all’estremo della curva.  
Penso che, se la derivata seconda non fosse nulla all’estremo, dopo un istante infinitesimo, potrebbe accadere che la variazione della curvatura subisca uno strappo (dovrebbe chiamarsi jerk) che potrebbe risultare sgradevole in una superficie dove è richiesta una transizione fluida.  
Abbiamo avuto modo di vedere più volte che la curvatura e la derivata seconda sono due cose differenti.  
La formula della curvatura è:

\kappa = \frac{\|\mathbf{C}' \times \mathbf{C}''\|}{\|\mathbf{C}'\|^3}

Il primo vincolo, come detto, è la collinearità dei primi tre punti di controllo P\_0, P\_1 e P\_2, ma perché?  
Perché se questi punti giacciono sulla stessa retta, i vettori della derivata prima \mathbf{C}' e della derivata seconda \mathbf{C}'' risultano paralleli.  
Di conseguenza, il loro prodotto vettoriale è nullo, rendendo la curvatura \kappa = 0.

Ma vediamo l’annullamento della derivata seconda che mi pare la questione meno intuitiva, per lo meno per me.  
Credo che, mentre la collinearità garantisce la forma (continuità geometrica), la compatibilità Sub-D richiede anche la continuità matematica (parametrica).  
Questo si ottiene azzerando il vettore della derivata seconda all’origine \mathbf{C}''(0) = \vec{0}.

In una curva **B-spline clamped** , la derivata seconda è definibile come:

\mathbf{C}''(0) = \frac{p(p-1)}{u\_{p+1}} \left( \frac{P\_2 - P\_1}{u\_{p+2}} - \frac{P\_1 - P\_0}{u\_{p+1}} \right)

Affinché tale valore sia nullo, deve necessariamente annullarsi l’espressione tra parentesi.  
Ma visto che il coefficiente moltiplicativo \frac{p(p-1)}{u\_{p+1}} è un valore scalare costante, l’unico modo per annullare il vettore \mathbf{C}''(0) è che il termine tra parentesi sia zero.  
Definendo d\_1 la distanza tra P\_0 e P\_1, e d\_2 la distanza tra P\_1 e P\_2, otteniamo la condizione fondamentale:

\frac{d\_1}{d\_2} = \frac{u\_{p+1}}{u\_{p+2}}

Notiamo subito l’invarianza dal grado della curva!  
L’annullamento della derivata seconda non dipende pertanto dal grado p della curva.  
Il coefficiente p(p-1) moltiplica l’intero termine, ma non influisce sulla posizione di equilibrio dei punti.  
Pertanto, il rapporto tra le distanze dei punti di controllo dipende esclusivamente dalla struttura del vettore dei nodi.  
Il comportamento della curva cambia infatti radicalmente a seconda che la distribuzione dei nodi sia uniforme o meno.

Analizziamo il caso in cui il vettore dei nodi sia uniforme, che poi è il caso di reale interesse visto che, nelle implementazioni Sub-D standard (Catmull-Clark?), è richiesto espressamente.

I primi due nodi non nulli sono u\_{p+1} = 1 e u\_{p+2} = 2.

Sostituendo quindi nella formula:

\frac{d\_1}{d\_2} = \frac{1}{2} \implies d\_2 = 2d\_1

Se consideriamo la lunghezza totale L del segmento che unisce P\_0 a P\_2, si deduce che d\_1 deve essere 1/3 di L, mentre d\_2 deve essere i 2/3 di L.  
Questo è il famoso rapporto 1/3 - 2/3 che garantisce la perfetta compatibilità con le superfici di suddivisione.

Ecco quindi il perché della regola!!! :-))

Dovrebbe essere intuitivo cosa accade nel caso in cui il vettore dei nodi non sia uniforme.  
Se i nodi non sono uniformi, il rapporto spaziale dei punti di controllo deve cambiare per compensare la differente velocità del parametro.  
Ad esempio, se u\_{p+1} = 1 e u\_{p+2} = 5, il rapporto dovrà essere d\_1/d\_2 = 1/5. Senza questo adattamento, la curva subirebbe un’accelerazione improvvisa, compromettendo la fluidità del raccordo.  
Fermo restando che nella logica Sub-D non c’è spazio per altre tipologie di curve (Rhino impone grado e tipo di curva), volevo cercare di capire cosa potrebbe succedere con una curva di Bezier o con una Nurbs, intesa questa come curva razionale.

Curva di Bezier.  
Le curve di Bezier direi che non possono essere considerate nativamente Sub-D friendly perché la loro struttura dei nodi è chiusa (solo 0 e 1).  
In una Bezier, l’annullamento della derivata seconda richiede che P\_1 sia il punto medio tra P\_0 e P\_2 quindi il famoso rapporto dovrebbe essere 1/21/2.  
Anche qui dovrebbe esserci indipendenza dal grado della curva.  
Questo rapporto direi che è matematicamente incompatibile con il ritmo sequenziale delle patch Sub-D.

Curva NURBS (razionale).  
Nelle NURBS, entrano in gioco i pesi w\_i.  
Se i pesi sono diversi da 1 (altrimenti non sarebbe razionale), la velocità parametrica viene alterata.  
Per mantenere la derivata seconda nulla all’inizio, credo che bisognerebbe modificare la posizione geometrica dei punti proprio in funzione dei pesi.  
Poiché le Sub-D standard utilizzano pesi unitari, l’uso di pesi non uniformi renderebbe la curva incompatibile con il sistema di suddivisione.

---

<div class="post-metadata">

**Author:** ![byrkow](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/byrkow/32/17400_2.png) [@byrkow](https://it.discourse.mcneel.com/u/byrkow)\
**Post date:** [24 Aprile 2026, 5:20pm UTC](https://it.discourse.mcneel.com/t/gli-amici-delle-sub-d/8708/2 "2026-04-24T17:20:28Z")

</div>

👏 rinnovo i complimenti (🤯 🤯 )

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [24 Aprile 2026, 6:40pm UTC](https://it.discourse.mcneel.com/t/gli-amici-delle-sub-d/8708/3 "2026-04-24T18:40:44Z")

</div>

Grande Fabio !

Grazie per l’ennesima spiegazione. 😀

( Prometto. Non ti chiedo altro … almeno per ora … 😄 )

---

<div class="post-metadata">

**Author:** ![Gambler](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/gambler/32/16276_2.png) [@Gambler](https://it.discourse.mcneel.com/u/Gambler)\
**Post date:** [24 Aprile 2026, 7:20pm UTC](https://it.discourse.mcneel.com/t/gli-amici-delle-sub-d/8708/4 "2026-04-24T19:20:28Z")

</div>

> [@emilio](#):
>
> ( Prometto. Non ti chiedo altro … almeno per ora … 😄 )

Promessa di marinaio? 😀

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [24 Aprile 2026, 8:36pm UTC](https://it.discourse.mcneel.com/t/gli-amici-delle-sub-d/8708/5 "2026-04-24T20:36:39Z")

</div>

> [@Gambler](#):
>
> marinaio?

Manco so nuotare … 😊

---

<div class="post-metadata">

**Author:** ![giuseppe](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/giuseppe/32/16416_2.png) [@giuseppe](https://it.discourse.mcneel.com/u/giuseppe)\
**Post date:** [28 Aprile 2026, 8:28am UTC](https://it.discourse.mcneel.com/t/gli-amici-delle-sub-d/8708/6 "2026-04-28T08:28:18Z")

</div>

Sai che alla fine è più chiaro (intuitivo) il fatto che le singole distanze d1 e d2 debbano essere d2=2\*d1 piuttosto che 1/3 e 2/3…

---

<div class="post-metadata">

**Author:** ![Gambler](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/gambler/32/16276_2.png) [@Gambler](https://it.discourse.mcneel.com/u/Gambler)\
**Post date:** [28 Aprile 2026, 8:35am UTC](https://it.discourse.mcneel.com/t/gli-amici-delle-sub-d/8708/7 "2026-04-28T08:35:19Z")

</div>

Concordo, anche io trovo meno intuitiva la “spiegazione” Mcneel, ma oramai è così. 😎

---

<div class="post-metadata">

**Author:** ![emilio](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/emilio/32/16095_2.png) [@emilio](https://it.discourse.mcneel.com/u/emilio)\
**Post date:** [28 Aprile 2026, 10:44am UTC](https://it.discourse.mcneel.com/t/gli-amici-delle-sub-d/8708/8 "2026-04-28T10:44:53Z")

</div>

> [@Gambler](#):
>
> Concordo,

Anch’io. 😀

---

<div class="post-metadata">

**Author:** ![lucio\_zadra](https://sea3.discourse-cdn.com/mcneel/user_avatar/it.discourse.mcneel.com/lucio_zadra/32/16361_2.png) [@lucio\_zadra](https://it.discourse.mcneel.com/u/lucio_zadra)\
**Post date:** [28 Aprile 2026, 7:03pm UTC](https://it.discourse.mcneel.com/t/gli-amici-delle-sub-d/8708/9 "2026-04-28T19:03:10Z")

</div>

Idem con patate.
