[HN Gopher] G0-G3 corners, visualised: learn what "Apple corners...
       ___________________________________________________________________
        
       G0-G3 corners, visualised: learn what "Apple corners" are
        
       Author : dgroshev
       Score  : 123 points
       Date   : 2025-11-23 18:16 UTC (4 days ago)
        
 (HTM) web link (www.printables.com)
 (TXT) w3m dump (www.printables.com)
        
       | LiamPowell wrote:
       | These corners are so close that they're going to have no
       | practical difference when 3D printing them, the maximum deviation
       | between G1 and G3 is only 0.1mm. You need to exaggerate the
       | effect much more to show the difference.
       | 
       | > G3 continuous corners mean that the print head experiences
       | smooth acceleration while printing such corners.
       | 
       | Axial acceleration is the key here, not just acceleration, that
       | however does not matter if the controller does not output
       | feedrate profiles with smooth acceleration to go along with it.
        
         | ricardobeat wrote:
         | > the maximum deviation between G1 and G3 is only 0.1mm
         | 
         | In a small 100x100mm box, with a 12mm fillet, G1/G2/G3 corners
         | already have a visible 0.5mm difference. What gives it away is
         | the lack of a hard transition between the flat surface and the
         | corner, that's very noticeable on a reflective surface.
         | 
         | On the mechanical side, I think the effect they refer to also
         | comes down to that transition line - going from a straight line
         | immediately into a curve (G1) which adds lateral forces, vs
         | easing into that curve over a few more steps which avoids
         | jerking the print head.
        
           | LiamPowell wrote:
           | I may have measured incorrectly in the provided model then.
           | That's still pushing things at 3D printer scales, especially
           | when you don't have a polished surface. I also think an
           | internal corner might be more noticeable by feel.
        
             | anamexis wrote:
             | > That's still pushing things at 3D printer scales
             | 
             | Consumer FDM 3D printers have an XY positional resolution
             | on the order of 0.01 mm.
        
         | kergonath wrote:
         | > the maximum deviation between G1 and G3 is only 0.1mm. You
         | need to exaggerate the effect much more to show the difference.
         | 
         | Even if the difference is small, it can be very visible because
         | of how light is scattered on the surface. This causes visible
         | transitions when the splines intersect the sides. Depending on
         | what you do, it might or might not matter, but there is a
         | visible difference.
         | 
         | I cannot test, but I would think that it would also be felt
         | with the fingers. Of course, it matters only if the surface is
         | smooth enough in the first place.
        
           | baq wrote:
           | > be felt with the fingers
           | 
           | reminded me of https://en.wikipedia.org/wiki/Achim_Leistner
        
             | kergonath wrote:
             | Very interesting, thanks for the link!
        
         | dgroshev wrote:
         | It seems small in absolute terms, but it's suprisingly visible,
         | even to "normal" people, which was the entire point of making a
         | physical object!
         | 
         | I gave that object to a dozen people without explanation. Only
         | one of them was a designer. All of them preferred G3 after
         | comparing corners by look and touch for a few seconds.
         | Honestly, I was surprised that it was this unanimous; I
         | deliberately made the difference small.
        
       | ZiiS wrote:
       | I wanted to play with this in OpenSCAD; here is G1 vs G2
       | include <BOSL2/nurbs.scad>       $fn=16;       back(400)
       | cuboid([200,200,100],rounding=50,edges="Z");
       | pts=subdivide_path(square([200,200],center=true),8);
       | linear_extrude(100)
       | polygon(nurbs_curve(pts,2,splinesteps=$fn/4,type="closed"));
        
       | EZ-E wrote:
       | I thought this was going to talk about all the competing,
       | different corners radiuses on MacOS windows
       | 
       | (is plural of radius radiuses? or radii?)
        
         | ZiiS wrote:
         | I am sure we can now obsess over their different continuities
         | as well as radii. (Either is fine)
        
       | atoav wrote:
       | As someone who modeled surfaces like this for a living:
       | G0 Positional Continuity: The surfaces touch without gap, but
       | there may be a sharp corner. Example: the corners of a cube
       | G1 Tangential Continuity: G0 but additionally the surfaces have
       | the same slope (are tangential) at the point where they touch.
       | Example: adding a circular fillet to the corners of a cube
       | 
       | This is where most basic CAD modellers would stop. The problem
       | with just putting a cylindrical or a spherical fillet in a corner
       | is that you basically go from a flat surface (zero curvature) to
       | a surface with some curvature on a whim. If your surface is
       | reflective that means you go from a flat mirror to a strongly
       | distorting one instantly, this will visually appear as a edge
       | even if there is none. Curvature btw. is just the reciprocal of
       | radius (1/r)
       | 
       | If we talk about forces (e.g. imagine a skateboard ramp) you go
       | flat (no centripetal force) to circular (constant centripetal
       | force) without any transition inbetween. In effect this will feel
       | like a bump that can throw inexperienced skateboarders of their
       | feet.
       | 
       | This means tangential transitions often do not cut it.
       | G2 Continuity: In addition to being G0 and G1 you additionally
       | ensure the curvature is the same where both surfaces meet. This
       | usually means instead of going from a flat surface into a circle
       | you go into a curve that starta out flat and then bends slowly
       | into a radius.
       | 
       | Now the curvature of a curve can be drawn as a curvature comb.
       | You basically take the curvature at any point of the curve and
       | draw the value as the length of a line that is perpendicular to
       | the curve.
       | 
       | G1 is if the perpendicular lines at the ends of the two curves
       | align. G2 is if the curvature comb at the end of the two lines
       | additionally has the same height (indicating the same curvature
       | at the transition point).
       | 
       | G3 is basically just ensuring that the two curvature combs are
       | tangential at the point where they meet. G4 is ensuring that the
       | curvature combs are not only tangential, but have the same
       | curvature. G5 is taking the curvature of the curvature...
       | 
       | By this point you may be able to sense a pattern.
        
         | baq wrote:
         | sounds like every step needs one more derivative to be
         | continuous...?
        
           | spookie wrote:
           | Exactly.
        
           | atoav wrote:
           | I thought about talking about derivatives but wanted to avoid
           | to mention to many unexplained words, but yes, derivatives
           | are exactly the way you should be thinking about this.
           | 
           | In physics/mechanical engineering they have even names for
           | these derivatives when we talk about motion (in this order):
           | position       velocity       acceleration       jerk
           | snap       crackle       pop
           | 
           | Also see: https://en.wikipedia.org/wiki/Jerk_%28physics%29
        
         | kuschku wrote:
         | This same effect also shows up in other fields:
         | 
         | - Why roller coaster loops aren't circular
         | https://www.youtube.com/watch?v=3Kzl2suBE2w - Highway
         | Engineering: Track transition curve
         | https://en.wikipedia.org/wiki/Track_transition_curve
        
         | javawizard wrote:
         | Well now I'm curious: what's the limit of G<n> as <n> goes to
         | infinity?
         | 
         | A truncated sine wave? (insofar as sine waves are their own
         | derivative, shifted by 90 degrees, so if I'm doing my math
         | right they would theoretically be G[?]-continuous)
        
           | LegionMammal978 wrote:
           | Things like bump functions [0] would generally do the trick.
           | 
           | [0] https://en.wikipedia.org/wiki/Bump_function
        
       | ricardobeat wrote:
       | One thing they don't mention is that smooth G2/G3 corners will
       | print horribly (with FDM) if added to vertical corners, there
       | just aren't enough layers even with a 0.2mm nozzle. You can see
       | they use a straight chamfer on the example piece.
       | 
       | While dreaming up Apple-like objects I quickly discovered
       | 3D-printing them with good surface finish is nearly impossible.
       | Best we can do is Mac mini-like flat tops. Like most other
       | manufacturing methods, its limitations heavily influence the
       | design.
        
         | Someone wrote:
         | Apple is 3D-printing Apple-like objects
         | (https://www.apple.com/newsroom/2025/11/mapping-the-future-
         | wi...), so one can hope this will trickle-down to hobbyist
         | price points some time in the future.
        
           | supermatt wrote:
           | There was a kickstarter for a $3000 SLS printer a while ago.
           | Formlabs (who have over 50% of the SLS market) promptly
           | bought the company and shut down the kickstarter - and gave
           | backers a $1000 coupon towards their $30000 SLS printers...
        
             | javawizard wrote:
             | That pissed me off so much.
             | 
             | I was one of the backers and I was sooooo looking forward
             | to an affordable home SLS printer. They'd done some
             | incredible engineering, too, in service of getting the
             | price point down to where it was.
             | 
             | Scaling up was going to be a massive challenge for them,
             | but damn, I wish they'd tried instead of phoning it in
             | early.
             | 
             | (Mind you, I'm sure Formlabs paid them handsomely. Would I
             | make the same decision under the same circumstances? I
             | honestly don't know. So far be it from me to judge them,
             | but man do I wish someone would do something about
             | Formlabs' ridiculous prices and monopoly over that space.)
        
               | hobofan wrote:
               | > I wish they'd tried
               | 
               | I'm sure they've tried. From what I recall they've had
               | serious reliability issues on the preview units. So I'd
               | be skeptical if it would have even turned into a
               | successfully delivered Kickstarter. They would have to
               | deliver on that first before even concerning themselves
               | with how to scale up.
               | 
               | So maybe they didn't even get handsomely paid in the
               | acquisition, but were given an option to save face.
        
           | VBprogrammer wrote:
           | Working within the limitations of a medium is a skill as old
           | as time. Often work arounds for the limitations become design
           | features that people come to expect. 3d prints typically use
           | more chamfers than fillets for exactly this reason.
           | 
           | Most of the hobby grade printers are FDM, it's unlikely we'll
           | evolve beyond the limitations of layer lines being a few
           | tenths of a mm. UV resin printers however aren't ridiculously
           | expensive and they have small enough layers that it's
           | completely doable.
        
             | exasperaited wrote:
             | Well, you can certainly FDM print layers below one tenth of
             | a millimetre tall even with a 0.2mm nozzle, and stagger
             | horizontal edges the same. The problem is the time cost of
             | doing so with a large object. Even variable layer height
             | burns through a lot of time. There is some work being done
             | with variable layer heights on outer perimeters only so we
             | may get some significant improvements in the future.
             | 
             | I just wish people would, as you are saying, work with and
             | accept the inherent qualities of the medium rather than
             | doing insane, foolish stuff like using carbon-fibre-filled
             | filaments for surface finish.
        
             | wongarsu wrote:
             | And you still get something pretty apple-like if you use
             | large fillets for anything that follows the layer lines and
             | small chamfers for any corner that doesn't. Maybe not
             | Macbook-like, but certainly Mac-Mini-like. And if that's
             | not good enough there's always the option of spending time
             | with filler and sandpaper. There are few fabrication
             | methods that get perfect looking results without some
             | dedication to post-processing. With UV resin printers you
             | just trade the sanding for washing and curing (a really
             | good trade if you need tiny details, but still)
        
           | kergonath wrote:
           | Each method has its limitations. The technique they use
           | (melting powder with lasers) is completely different to what
           | people typically do at home (using either photosensitive
           | resin or filaments).
        
         | dgroshev wrote:
         | I mostly agree, but it also depends on the size and the shape
         | of the fillet. Large sweeping curves that stay close to
         | horizontal for a long distance are bad, but a tight corner can
         | still look better in G2/G3 than just G1. On the top at least,
         | because fillets on the bottom create sharp overhangs that don't
         | print well.
         | 
         | Also, if you have that option, filler + sanding + paint can
         | hide the layers completely, but preserve the overall shape.
        
       | d--b wrote:
       | This is also what's happening in an elevator. You not only want
       | the speed to increase slowly, you also want the acceleration to
       | increase slowly, cause that's what actually makes your guts go
       | down. And the best way to do this is to have the acceleration of
       | the acceleration continuous.
       | 
       | In the end the position of the elevator is 3-continuous (why is
       | it called G3? in France we call this C3). And the apple corner is
       | just a graph of the position of an elevator wrt time. Mind
       | blowing
        
         | LiamPowell wrote:
         | G and C continuity have slightly different meanings. You can
         | have curves that are G^n but not C^n and vice-versa. I'll leave
         | it to you to find a maths textbook that gives a better
         | explanation than I would if I attempted to here.
        
         | andrewingram wrote:
         | I'm always reminded of snap, crackle and pop (https://en.wikipe
         | dia.org/wiki/Fourth,_fifth,_and_sixth_deriv...) for this topic.
         | Essentially it's not enough to just have continuous
         | acceleration, you have to ease into it (low snap), you can
         | probably go into further derivatives for ultra smoothness but
         | maybe not worth it?
        
           | quietbritishjim wrote:
           | As your link says, acceleration is 2nd derivative of
           | position, so rate of change of acceleration is 3rd
           | derivative, often called jolt. As you say, you want
           | acceleration to vary slowly, so it's low jolt that you want.
           | 
           | Snap (or jounce), crackle and pop are 4th/5th/6th derivative.
           | They're probably less of a problem.
        
             | nkrisc wrote:
             | I've also heard it called "jerk".
        
             | andrewingram wrote:
             | Oops, yeah you're right!
        
             | rcxdude wrote:
             | It can help because the higher derivatives also tend to
             | promote vibrations in the system, but I doubt it'd be
             | perceptible by people. I have heard of 5th-order smooth
             | curves being used for very sensitive structures, like the
             | movement of big observatory telescopes.
        
         | oasisaimlessly wrote:
         | G^n curvature solely depends on the geometry of the curve,
         | while C^n continuity also depends on how you parameterize the
         | curve. So, G^n is what you want if you're talking about a
         | purely geometric shape rather than an (x(t), y(t)) trajectory.
         | 
         | * reference: section 2.1 of
         | https://graphics.stanford.edu/courses/cs348a-21-winter/Reade...
        
       | junon wrote:
       | If anyone wants a good primer into curves, Freya Holmer has an
       | amazing deep dive into continuity.
       | 
       | https://youtu.be/jvPPXbo87ds?si=7IbeklF4p9qg1F6X
        
         | dgroshev wrote:
         | It's a lovely video! I linked it in the description, and I
         | strongly recommend the other videos too.
        
         | KeplerBoy wrote:
         | Such a shame Freya doesn't seem to post regularly anywhere
         | these days. I miss her tweets.
        
           | kurishutofu wrote:
           | I think she is active on bluesky
        
             | gpm wrote:
             | She is, but I think her work results in less pretty tweets
             | these days.
        
               | mcphage wrote:
               | I dunno, she tweeted (skeeted?) out something recently
               | with position & rotation splines that was pretty cool.
        
           | pschastain wrote:
           | https://bsky.app/profile/freya.bsky.social
        
           | rozab wrote:
           | I think she's in the mines working on her Blender/Maya
           | alternative, Half Edge.
           | 
           | https://half-edge.handmade.network/
        
             | adgjlsfhk1 wrote:
             | going up against Blender seems really tough.
        
       | owobeid wrote:
       | Are there good ways of achieving this in tools like Blender and
       | Illustrator? My best result so far in Illustrator was to round
       | corners first and then apply a small amount of smooth but it
       | looks a bit wonky.
        
         | WillAdams wrote:
         | It should work to drag the off-curve nodes so that they touch
         | where the corner would be if the rounded rect was a
         | square/rectangle.
        
       | fennecfoxy wrote:
       | It's just a corner with a huge radius...idk why the cult has
       | suddenly attributed this to Apple. Perhaps because of the
       | ridiculous court case.
        
         | echoangle wrote:
         | No, it's not a circular shape, that's the entire point of the
         | article.
        
         | jdiff wrote:
         | This is an article about continuity, not corners. I mean it is
         | about corners, but not ones with huge radii.
        
       | aziaziazi wrote:
       | This page has images that clarify the subject:
       | https://help.autodesk.com/view/ALIAS/2024/ENU/?guid=continui...
        
         | crazygringo wrote:
         | Thank you, this is so much more helpful if you don't want to
         | watch videos.
        
       | manoDev wrote:
       | I remember reading somewhere that these curves were based on the
       | curves that naturally occur on smooth pebbles due to the abrasion
       | of water, but can't find a link now (searching "apple" and
       | "pebble" only gives me results about the smartwatch)
        
         | nusl wrote:
         | Maybe from here?
         | 
         | https://www.figma.com/blog/desperately-seeking-squircles/
        
           | manoDev wrote:
           | Maybe!
           | 
           | > a squircle doesn't look like a square with surgery
           | performed on it; it registers as an entity in its own right,
           | like the shape of a smooth pebble in a riverbed, a unified
           | and elemental whole.
           | 
           | But I seem to remember reading about Jobs or maybe Ive
           | stating smooth pebbles as a source of inspiration for how
           | objects should feel in the hand - I believe it was in the
           | context of the first iPhone shape.
        
       | sfpotter wrote:
       | One interesting and sort of unhappy artifact of CAD is the
       | adoption of B-splines and NURBS as the primal basis for modeling.
       | The whole point of B-splines is that they are the obvious basis
       | for maximally continuous splines of a certain degree (i.e.,
       | degree n gives C^{n-1}). This is much more than G continuity. But
       | in CAD, it's often the case that all you care about _is_ just G
       | continuity.
       | 
       | So you run into a weird situation where CAD software may pass
       | around NURBS or B-splines with multiply inserted (or even fully
       | inserted) knots, seriously reducing the need for using splines in
       | the first place.
       | 
       | The problem is that splines are a really inconvenient and even
       | unstable basis for doing numerical work... which is what all of
       | CAD is.
        
         | tobr wrote:
         | Curious, is there some alternative that would give you both
         | higher order continuity and numerical stability? Or are they
         | fundamentally at odds?
        
           | sfpotter wrote:
           | IMO, higher order continuity is a red herring. You can make
           | something approximately high order continuous (say, to 10+
           | digits, or whatever you like) piecewise much more easily than
           | enforcing mathematically exact high order continuity. Once
           | you think of continuity as something to achieve
           | approximately, standard methods from classical approximation
           | theory suffice.
        
       | Duanemclemore wrote:
       | Rhino3d [0] is one of the state-of-the-art programs (along with
       | Alias) for the drawing of nurbs and modeling with them. The
       | result is the industry standard "Class A" surfaces. Rhino has
       | amazing "BlendCrv" and "BlendSrf" commands that allow you to
       | combine curvatures between the two curves / surfaces being
       | blended. EG, you can interactively choose G0 at one side and G3
       | at the other, etc.
       | 
       | Rhino also has really nice and performant curvature analysis
       | tools, and a whole host of other tools for implementing Nurbs.
       | 
       | Alias is at least $5,000 / year per seat. Rhino is $995 for a
       | perpetual license, with new versions coming out every 2.5 - 3
       | years and significant functionality upgrades each time.
       | 
       | McNeel also maintains OpenNurbs [1], an open source library [2]
       | for the construction and use of Nurbs. This powers Rhino of
       | course and is used in other software. I'm still waiting for
       | someone to implement OpenNurbs natively and robustly on Linux.
       | But I like the Rhino platform and McNeel as a company so much
       | that I run it using wine.
       | 
       | [0] https://www.rhino3d.com/ Developed by McNeel Software [1]
       | https://www.rhino3d.com/features/developer/opennurbs/ [2]
       | https://github.com/mcneel/opennurbs
        
         | sfpotter wrote:
         | FYI: OpenNURBS runs fine on Linux, and is actually only
         | supposed to be an (the) open source implementation of Rhino's
         | .3dm file format. It is stripped of much of the functionality
         | required of a full fledged CAD kernel (the rest is proprietary
         | and included in Rhino proper).
        
       ___________________________________________________________________
       (page generated 2025-11-27 23:01 UTC)