Raph, I don’t want to rain on your challenge, but this means I can’t gauge quality or speed based on immediate digitization results; it’s very iterative, and “accuracy” isn’t my concern, rightness of design is, which is revealed with testing and use.
Carl I tend to agree. The S-test is not quantitative enough, I mean, what will it show? That some people drew the outline to be the 'right' design, so that it looked right independently from the scan. While others tried to make it very close to the scan, while again others tried to make the curves look very smooth?
The proof is in the making of great looking type – fast. With all the complications of automatized interpolation, with all it's stretching, squeezing, tilting and embolding. I have the feeling that the true value of designing in spirals lies in the automatization of these things, which leads me back to my earlier fantasies about Metafont. So Hrant, when you say that the idea that letters should have skeletons is fatal, what do you mean? Others are welcome to enlighten me on this as well.
What I mean is that when you look at glyphs as being built up from "fattened" skeletons (for example if you see an "A" as being made up of a right thick diagonal, a left thin diagonal and a thin horizontal) you're not designing what people read, hence you're designing the wrong thing; and the "reality" of serifs for example intimately fits in to this issue. I know it's hard (I mean I personally know!) to not think in this way, but you simply cannot arrive at "ideal" (which does not remotely mean "perfect") text type by thinking in terms of skeletons.
Carl "I can’t gauge quality or speed based on immediate digitization results; it’s very iterative, and “accuracy” isn’t my concern, rightness of design is, which is revealed with testing and use."
I feel the same way. It's not getting it, it's getting it right. At least for me, I have to do this by trial and error, both to see how the glyph works with the rest of the face, to find a 'sweet' curve, and to see how it works at intended size. What would be great is if you get to 'sweet' quicker or more naturally with the spirals. I suspect this is so, at least for some situations, but of course I don't know.
By the way, I remember reading that Matthew Carter said something like "Watching me design a typeface would be like watching a freezer freeze ice cubes." That is, the process involves so much incremental change, much of which might not mean much to someone else, but it is intense and dramatic to the designer.
I'm not seeing how the intensity/speed with which a person works has make-or-break relevance here. Sure, some people will find spirals less intuitive, but among those who find them more intuitive the practical benefits will come, either when you're digitizing, or when you're tweaking. Yes, some people do more observation/thought in between the design iterations, but you still have to tweak the outlines in the end! And if a new tool makes creation and/or tweaking more "natural" then it's nominally worth using.
The practical question really is, lacking full integration
into something like FontLab, would it still be worth it?
There's another factor, beyond which is faster or more intuitive. Any time you allow an algorithm to determine a curve for you, it will influence what the design looks like. Bezier curves can describe almost any shape, if you add enough anchor/control points, but they become difficult to manage very quickly once you start adding points beyond the extremes.
As a result most type designers don't add that many points resulting in predictable curves. What percentage of type these days use control points *only* at the extremes of the curves? A lot. How many designs born in the bezier age have slightly tapered stems? Not many. Why? Because it's harder to draw that way. Here the medium influences the message.
From my short experience with these curves, it is much easier to manage additional knots, which means that lazy type designers like me will likely add more. The resulting designs will look at least different from the current batch if not more creative.
If it doesn't go into FontLab, though, I'm unlikely to use it :( I might give FontForge another try if it goes in there, though, even though X11 on OS X is gross.
An interesting side point, Raph, is that in the Underware 'Type Basics' they explicitly compare good straight-to-curve outlines as a path like driving around a curve in a car.
According to the wikipedia article on Cornu spirals, the Cornu spiral is actually used to lay railroad tracks going from straight to curve, because it is in one way the 'ideal' for this purpose. Apparently it is the only curve in which the rate of change in radius is constant. This means that there is a continuous linear increase in the centrifugal force of the train laterally against the tracks. This linearity helps preserve the track, as well as jostle the passengers around less.
Anyway I found it interesting that this analogy of moving around a bend is already discussed in type design, and relates to the Cornu spiral.
I also read about the relevance of cornus to transportation in the wiki, and I guess it makes sense that that would ensure smooth transitions! The Underware stuff though is corny (pardon the pun :-) because beziers don't have that attribute and they're basically just having fun.
Another interesting angle is that Renault (where P Bezier worked) apparently chose beziers over cornus. Now, that was for the design of bodywork and not test track design or something, but I wonder what their reason was for not going with such an industry precedent. Maybe beziers are computationally much lighter, or maybe they wanted to "invent" something New, as managers too often want to.
"Any time you allow an algorithm to determine a curve for you, it will influence what the design looks like."
I think this is an excellent point. It ought to be discussed more often generally. It's hard enough to get full control of Beziers, and unfortunately too many type designers can't separate their design choices from their digital construction choices. Many of Emigre's types, even the recent classic revivals or homages, have this 'digital' gloss.
I do indeed welcome an outline format that doesn't seem to favor grid-based alignment. I know very intimately why rasterization is a major concern in imaging type, but I do think, as Christian says, this kind of thing should not have the influence that it currently has on the design process. Unless a design is being made specifically for low-res use, I'd rather focus on truly ideal node placement and efficient, precise editing, rather than accommodating extrema.
I will need to spend more time drawing with this tool in order to get used to the way the curves work and feel. Therefore, I need to have the tool built into, or accessible in, my current workflow (I don't have time to experiment in a separate environment). Raph, I would prefer to find this drawing environment as an option in FL, FOG, DTL FontMaster or other commercial product.
Well, a digital gloss is still less bad than a chirographic gloss.
But I agree, we should design what we really want as much as possible.
> I would prefer to find this drawing environment
> as an option in FL, FOG, DTL FontMaster or other
> commercial product.
Me too. But we need to tell them, not Raph! :-)
"Well, a digital gloss is still less bad than a chirographic gloss."
Matter of opinion. I think you should consider this carefully. Since type is evolved from written language, it's a lot easier to use chirographic type than type made from geometric modules. When I say "digital gloss" it refers not only to the finish but the structure and the approach to letter- and type-building. Losing every element of chirography that has led to printed language (which is indeed very much a concern, look around) is much less preferable than losing technological constraints. When the tools have no influence, you can still make any kind of typeface, from radically reformist to traditional (or some combination thereof?...).
I wonder what would be required to add a third curve space to FL. Fontlab is really the only option to make this mainstream. My impression is that they have the major market share, and given all the Fontographer pining that goes on here, transitioning to another program is something type designers are pretty resistant too, even if cornu's are better.
I agree with Christian's interest in designing without the bezier propesity to become more unrully the more points you add. We've both talked about this in other threads before. (That said, using the FL interpolate tool instead of simply moving points is a decent work around for curves with many points).
…but can spiro find a frontal logic?
translation in the downstrokes; rotation in the upstrokes:
Thanks, although i only get the part about where it saves (and although I get it, am unable to find these directories), rather than the 'command-line scripts' bit as i'm fairly (completely) ignorant when it comes to whatever that entails.
I guess i'll just have to wait until some bright spark puts it in some software I can utilise.
I wish I were more patient.
Thanks for sharing all this though.
> can spiro find a frontal logic?
I certainly hope not.
Some interesting points here. As a newbie to type design, I recall how much Font Audit controlled my design choices.
Carl and Hrant: the chirography issue is actually something I struggle with, as I want the computer to do exactly what my hand does. Although type design has made me pretty comfortable with Bezier drawing, I still am most comfortable with ink and a brush. My latest type experiments have been trying to find the happy medium by taking my actual vectors from ink on paper. Still trying to find the right balance.
Raph: Matthew mentioned this earlier—but I'm having the same control issues with the Mac.
I am really excited about the possibilities of this, because this actually starts to feel like drawing or painting on screen.
> I still am most comfortable with ink and a brush.
Users don't need your comfort, you need theirs.
"Fortunately, because I am a rocket scientist, I can do that."
This has got to be the greatest quote, ever.
This sounds really cool, but can anyone inform me how unique and/or important this is? On a scale from the invention of the spork to the invention of beer, where does it stand in relative terms of type and type design stuff?
Thanks, although i only get the part about where it saves (and although I get it, am unable to find these directories)
I can't figure out where comman-S saves the "plate" file, but the PostScipt file is pretty easy to find: Choose "Go to a folder..." from the Go menu in the Finder. Type "/tmp/ and hit return. The file called "foo.ps" is the PostScript file that is created when you hit command-P. Rename this before you generate a new one. It can be opened in Illustrator (or whatever).
Note: Don't mess with any of the other files in /tmp/ or you could be sorry. I would also recommend moving the PS file(s) to somewhere more convenient.
I can’t figure out where comman-S saves the “plate” file
It goes straight into your system root directory, at least here it does..
Ralph: "How’d I do?"
Extremely well. In fact, I could only be caught quibbling with your spiral point positions on my laziest day, and I would not spend any time to argue with the output quality of the cubics.
The next thing I'd like to do is see how easy it is to pull contours apart and reconstitute them as new letters, new weights and new widths.Really well done and I look forward to any sort of progress this can make.
[Hrant] I certainly hope not.
It stands to reason that where a curve-fitting routine finds inflection points might be diagnostic of contrast type. And it seems to me that one of the things we ought to want to get a handle on is the logic of contrast in a co-ordinated glyph set. (But this might be where points of view diverge: that following such a logic is contributory to readability.)
My visual argument suggested perhaps spiro has an advantage over beziers in providing this. But even in the bezier environment finding extermata can be revelatory of stress axis and diagnostic of it's consistency or pattern of departures.
@mark/Toby: cheers guys, found the folders, however still can't find the files. I've searched the whole of the computer for "foo.ps"using spotlight and can't find it so who knows, but it don't matter it was just a doodle to test, I'm just impatient to be able to utilize this new tool.
Spotlight doesn't search invisibles. In the Finder, use Go to Folder (command-shift-G), type in "/private/tmp/", click the Go button and the window that opens should contain the foo.ps file.
"And it seems to me that one of the things we ought to want to get a handle on is the logic of contrast in a co-ordinated glyph set."
Peter, I would say not. The "logic" of almost anything in type design tends to be very occasional, inconsistent, and useless if followed too completely. From serif length to contrast to bowl shape to stress angle, these things tend to look bad and function badly when systematized too completely. Greek and Arabic types especially would not take well to this logical approach or analysis.
"Users don’t need your comfort, you need theirs."
Hrant, Terry said ink and brush. It doesn't sound like he's working on a dictionary typeface.
[Carl] "[…] useless if followed / systematized too completely."
I agree, but a consistent contrast scheme will be in evidence I should think, and this has an overall impact on the root mathametical structure of the curves, which then becomes unique--in a deep-structure sense--to that typeface.
> where a curve-fitting routine finds inflection
> points might be diagnostic of contrast type.
I don't get how, but/so it sounds interesting.
> one of the things we ought to want to get a handle on
> is the logic of contrast in a co-ordinated glyph set.
My view is opposed even here, even before you get to the part about readability. To me we need all the help we can get to ween ourselves off of chirography, and a tool that's poorly coordinated with chirography is preferable to the opposite.
> My visual argument suggested perhaps spiro has an advantage
> over beziers in providing this. But even in the bezier environment
> finding extermata can be revelatory of stress axis and diagnostic
> of it’s consistency or pattern of departures.
I'm seeing the opposite, since spirals apparently have less of a dependency on extrema. There's also another potential way spirals might help us grow up: if for some reason it's harder to do an "expand stroke" on a spiral compared to a bezier, making "skeleton-based" type design becomes less attractive.
> Terry said ink and brush. It doesn’t sound
> like he’s working on a dictionary typeface.
What I meant applies to any type, in fact to any act of Design.
As opposed to Art. Users don't care about Terry, and they shouldn't.
> a consistent contrast scheme
Formal consistency is often dysfunctional when it comes to what humans need.
Raph, I'm having a hard time mentally linking an outline description format and any particular set of shapes made with it. This idea seems very tenuous and hopeful. What do you think it will lead to that is of interest to type designers? I can imagine all kinds of outcomes of interest to mathematicians.....
"Users don’t care about Terry, and they shouldn’t."
These two statements might also be a matter of opinion. We do tend to admire people who make things we love to see/use, and I suspect Terry is one of those. Ignoring esthetics is foolish. It's a meaningful ingredient of any design effort.
Hrant, I fully agree that chirography, or fashion, or convention, or any other isolated factor is unhealthy to fixate on. But condemning them as causal of some sort of degradation, disintegration or arrest of progress seems also nearsighted. I'm interested in a balance of ideal function and esthetic appeal (physically as well as visually), and in all areas of design. It is amusing sometimes to see a chair that looks painful and dangerous, which turns out to be rapturous to sit in, but you then have to trick people to sit in it the first time. And I don't see these ingredients/concerns as so opposed as you seem to. Yes, of course it's misleading to fixate on chirography, or "logic" or rules or ink traps, to the detriment of everything else. But I don't think Terry is at that point. We all converge in the type world from very different paths. Bitmaps for example. Or math.
Central to this thread is how to get tools (like Raph's) into our hands so we can stop noticing or being influenced by them, which relates to Terry's comment. Raph might actually like to know how people prefer to work. Whatever method or technique people start out with, you have to agree it's the results that matter.
Now I'm plagued by mental images of text type drawn with ink and brush..... 8D
> Ignoring esthetics is foolish.
Agreed, especially since: it can be enjoyable; and there's no avoiding it anyway. But, as I've stated before, to me the difference between Art and Design (neither of which exists in a pure state) is the intent of the creator in terms of expression.
> you then have to trick people to sit in it the first time.
This is the sort of thing I believe in too.
Hence Paphos (far right): http://www.themicrofoundry.com/s_latin.html
Users don’t care about Terry, and they shouldn’t.
Talk about a massive overstatement! You've missed the point entirely. This isn't about any individual person. It's about making a useful tool for people to use. Nothing more. There's no such thing as a fool-proof, universally accepted method. In fact— FontLab and Illustrator handle Beziers very differently and because of that "users" prefer different methods. Some type designers use Illustrator and import into FontLab—some use FontLab only, and some still even use Fontographer. So your statement is a complete oversimplification. I often find the critical flaw in many of your opinions is that they're based too much on the idea of "absolutism." Life is not all black and white.
Hrant, you're too smart of a guy to make outrageous statements like this. Your fixation on chirography is very apparent to most frequenters of Typophile I'm sure, so it's no surprise that you've twisted words to make your point.
I find it amusing that this is the very thing I've seen you criticize William Berkson about time and time again— you're too literal. Try reading and understanding a person's intent before reacting. And if something is not stated clear enough for you...you can always ask a question. I would have been happy to explain myself more clearly. But I'm sure just reacting is a lot more fun.
Carl: thanks for clarifying things. That is exactly what I meant.
I'm as gray as they come.
It's about balance. When I seem too radical it's because the situation is desperately lopsided, and the balance needs a firm kick to right itself. Gentle, gradual cajoling will not work, at least not in one person's lifetime, and I'm not going to get my offspring to pursue my own ideals - I have to do it myself. When a person is hysterically out of control, you deliver a well-meaning slap in the face. (I don't mean you, I mean the field of type design.)
But I really don't want to derail this thread, which is why I didn't reply much more fully to Carl's post. But you went a hair too far, so I felt compelled to write the above, sorry.
Hrant, I have never seen any more of Paphos than this j. Is there a secret link to more of it? it sounds good... ;)
On topic: I imagine that I could get used to using this drawing method, and the possibility of ignoring the eventual pixel grid is attractive. David Berlow raises an interesting question: How easy to cut and paste, how easy to grab and stretch large segments, how easy to interpolate? All figure into my production flow. I also don't like the idea that the outlines I draw carefully must necessarily go through a conversion process unless I am very very confident of the conversion algorithm, and I'm really picky in that area. PS outline drawing has the advantage that the exact shapes I draw are what the user will receive and use.
The Paphos alphanumerics are all roughly drawn (on paper). But I've stopped working on it mostly because I'm intellectually not ready to finish it.
Here's something of it I've shown on Typophile before:
> unless I am very very confident of the conversion algorithm
Did you miss the French curve challenge on page 1 of this thread? It looks like the conversion algorithm (although apparently not too fast) produces very fine results, without causing an infestation of bezier nodes.
I did see the conversion; I've actually seen/used better. That's why I say I'm picky. Also it's not enough for me to assess this low-res image onscreen. I do suspect, though, that the results are likely to be very very good. I just don't want to lose the newly-won ability to have designs reproduced exactly, without interpretation. The new tool should provide benefits that override that issue, or there should be a conversion method that obviates it.
Ah, nice one patternmaker. Cheers.
@Christian: I might give FontForge another try if it goes in there, though, even though X11 on OS X is gross. X11 on OS X is gross, so why not try out a GNU+Linux distribution and see what free software has to offer all round? :-)
I've tried a bunch of linux distros, and there is some exciting stuff going on, but unfortunately x11 is pretty gross there too ;) Otherwise, I use a ton of free software, and love it (everyone should try Blender for 3d stuff). Someday I'll be smart enough to contribute code to some of my favorites. In the mean time, I drew some cleaned up characters for the Ubuntu title font, but I haven't figured out how to submit it back to the project.
These curves are great to work with. I strongly encourage everyone who hasn't yet downloaded and tried Spiro to do so. Raph, when I first read about your idea to use Cornu spirals to lay out curves a few years back, I was skeptical, but Spiro lives up to your promises. It is easier, quicker, and feels more natural.
Here's something I did in ten minutes. It's not production-ready or anything, but I've been working with Beziers for at least twelve years, and I don't think I could do something that looks this good in ten minutes in FontForge, Inkscape, or any other Bezier program.
"I just don’t want to lose the newly-won ability to have designs reproduced exactly, without interpretation."
So, do you make one-size-fits-one fonts too!? That's so exciting!
"The new tool should provide benefits that override that issue, or there should be a conversion method that obviates it."
That is my basic point here. I want to make containers, not vontainers for containers, or like this containers for containers for continers, unless the content remains precise through the first two container transfers at least.
Raph, that tool is very exiting, I think it solves some major problems with Bezier curves. I have a few comments and questions:
1. As far as I can see, Spiro is essentially a tool that takes on-curve points as input and outputs Bezier curves. Could you explain the benefit of using spirals as an intermediate step? Wouldn't it be possible to find Bezier splines that run through the given points with G2 continuity? Doesn't the problem of G2 continuity still remain when two spirals are connected?
2. It seems that the main differences to direct Bezier editing are:
a. built-in G2 continuity, which is great but G2 continuity can also be enforced automatically for Bezier splines (as I have shown in Lisbon last year)
b. no off-curve points, which is great
c. no need to specify tangents for on-curve points, which is great
d. no possibility to specify tangents for on-curve points, which is very odd
I think for practical type design application it is very important to be able to specify tangents for your on-curve points, which Bezier splines allow but not Spiro. Would it be possible to add support for tangents? Then we would actually have the best of both worlds. Also, I think an option to specify tangents without the position of the on-curve points would be a very handy in everyday type design
3. What about rounding errors? The restriction to 1000 units seems to be built into T1/CFF, isn't also the use of integer coordinates a requirement of Postscript fonts? Or is this just an FL-internal restriction? If not, looking at the (un-rounded) Postscript output is irrelevant - we need to see the final shape in fonts with coordinates rounded to integer numbers and 1000 UPM.
4. You say that Multiple Master technology does not preserve G2 continuity. It is my experience, however (in hundreds of cases), that G2 continuity is in fact preserved when interpolating Bezier curves with MM. I don't know whether it could be proven that this is the case under certain conditions (or under which conditions, to be more exact).
@Tim: but G2 continuity can also be enforced automatically for Bezier splines (as I have shown in Lisbon last year)
Could you please explain more about how to enforce G2 continuity for Bezier splines? (or provide a reference) Thanks!
Tim: The restriction to 1000 units seems to be built into T1/CFF
It is very strongly recommended for Type 1 fonts, i.e. things are expected to break if you use a UPM other than 1000. But it is not a requirement for CFF fonts. I've made CFF fonts with UPMs of 2048 and 4096, and they work fine. There were largely aesthetic problems in pre-CS2 versions of Adobe apps, which presumed a UPM of 1000 for calculating caret height, but that's fixed now and I have not seen other problems with using UPMs other than 1000.
Tim: thanks for your kind words, and even better, your good questions. Some of these questions require fairly deep answers, to which I would refer you to my thesis (I'll put the draft-in-progress online in the next day or two). But I'll try to at least scratch the surface here.
Could you explain the benefit of using spirals as an intermediate step?
Yes. G2 continuity is not the only smoothness property you care about, it's just really crisp and easy to measure. You also want to make sure that the curvature doesn't have any sharp peaks in it. But there is no agreement on what is the best way to quantify this. In my thesis, I refer to Potter Stewart's (meta)-definition of obscenity, and then go on to propose the L∞ norm of the deviation of curvature as the most favored measure of curve smoothness. To all those naysayers out there who feel it should be the L2 norm, I say: fie unto you.
If all you cared about was G2 continuity, Beziers do OK. Manning showed a G2 continuous cubic spline in 1973 (it was used, apparently, for shoe insole shapes). However, for very large turning angles between the on-curve points, his spline sometimes did not converge to a unique solution. Hobby's 1985 splne (used in Metafont, and thus how I got hooked on this stuff) was influenced by Manning's, but traded off exact G2 continuity (it uses a good approximation of curvature instead) for bulletproof stability of the solutions.
But neither of these curves look pretty if you try to make, say, an S segment that turns 90 degrees one way and then the other - you get curvature peaks at about 15% and 85% of the arc length.
So spirals deal with both problems: you never get a curvature peak except at the control point. Also, (and I'm still nailing this down), you can get very good stability. The specific divergence of Manning's spline is definitely avoided, but I don't know for sure whether the Euler spiral spline always converges, or just almost always.
Wouldn’t it be possible to find Bezier splines that run through the given points with G2 continuity?
Yes, Manning's is one such. But the results are quantifiably not as good. I'll have illustrations in my thesis, I promise.
Doesn’t the problem of G2 continuity still remain when two spirals are connected?
That's exactly what the goal of the spline solver is: find Euler spiral segments between all adjacent on-curve points so that curvature is continuous across them. Once you take that as the challenge, it's not too difficult to work out numerical techniques to take it on.
Would it be possible to add support for tangents?
Yes. In fact, I originally planned to do exactly that, but generally found that I didn't need it for my own work. If other people find they need it, it's doable. Inside the solver, the constraints are written as a big matrix, with parameters corresponding to tangent angle, curvature, and so on. It's a matter of UI plumbing to let people write more kinds of constraints, including tangents. I was very concerned about UI complexity, though.
What about rounding errors? The restriction to 1000 units seems to be built into T1/CFF, isn’t also the use of integer coordinates a requirement of Postscript fonts?
John spoke well to the 1000 unit issue. But the short answer is no, the div operator lets you do rational fractions, which means more or less unlimited accuracy. The only real downside is that the font file gets quite a bit bigger.
That said, I also expect good results with rounded coordinates, because it chooses the minimal number of Beziers, and therefore long segments. Rounding becomes more visually noticeable as Beziers get shorter. (This is deep water that I expect to cover more deeply in my "converting to Beziers" chapter - in order to make sense of it, you have to adopt a different error metric than "max distance error". I argue for L2 norm of angle error as an error metric that more accurately models the perception of curve smoothness)
It is my experience, however (in hundreds of cases), that G2 continuity is in fact preserved when interpolating Bezier curves with MM. I don’t know whether it could be proven that this is the case under certain conditions (or under which conditions, to be more exact).
In the general case, it doesn't even preserve G1. An example is given in Figure 2-8 of Adobe's tech note 5091. I can imagine that you learn quickly enough to stay away from those cases, but my point is that the onus is on the designer. With spirals, you do get the G2 continuity all the time, without having to worry about it.
I would imagine that G1 continuity is always preserved when the angles of the control arms are consistent between the masters. This is, of course, always the case at extremal points, which is probably the main reason why they're such a big deal.
It's when you get into more subtle variations, the kind that just can't be done with a single long Bezier segment, that it's harder to control the smoothness.
Here's another interpolation example I whipped out quickly:
As you can see, the curvatures of the fat S are quite different from those of the thin - the radius on the inside bowls is quite small. And all that was done with 17 on-curve and 4 corner points. I've also put up a PDF for people who want a closer look.
Wow, I didn't know your whole thesis is on this subject. I'm very curious to see it. Thank you very much for your detailed answers.
As for the PDF, it would be interesting to see the Spiro based interpolation next to an MM generated version. Do they differ much? If you want you can send me a font file and I can do that interpolation based on Bezier curves (with some preparatory MM optimimations). It looks like your interpolation also can't avoid the problem that in the interpolations the stroke at the center of the s is too thin (being inherited from the extra bold, where it is necessary). I assume this problem can't be solved on a contour basis.
Finally, I have to admit that I do not find the curve of the s in your PDF harmonic at all, especially the three lightest versions. Maybe it is just my subjective perception. To me the disharmonic shape becomes apparent only in the lowest line, where it is filled in. Maybe the initial reactions here in this thread would not have been that enthusiastic if people had seen their shapes filled in? Sorry, no offence, your stuff is great.
sgh:Could you please explain more about how to enforce G2 continuity for Bezier splines?
It basically works like that:
Nodes that connect two Bezier curve elements are shifted towards the wider curve until the curvature on both sides of the node is equal. During this, the BCPs of both cureves are adjusted so that the shape stays as close as possible to the original: for non-s-shaped curves the BCPs are adjusted so that the area within the curve stays the same (taking into account that thin triangle created by the shifting of the node). For s-shaped curves, the BCPs are adjusted so that the curve stays as close as possible to the original, meaning the curve is split in two and both areas within the "half curves" stay the same as before.
Alternatively, nodes that are not extrema can be rotated (towards the narrower side) until the curvature is equal on both sides. BCPs are adjusted as above. I feel this gives better results thatn shifting but it is obviously not possible for extremes.
In addition, I am experimenting with G3 continuity, which obviously means that nodes are shifted perpendicular to their tangent until G3 continuity is given.
Note that this is a system that processes existing shapes - it does not generate shapes. I think this approach is much more appropriate to the typical design process.
Thanks for the description. I've seen the simpler technique of shifting the on-curve node between the fixed off-curve control points mentioned before. In the construction of Aurulent Sans I actually have macros that automatically adjust curve nodes in this way to achieve continuous curvature (this is done after the basic shapes are constructed as a finishing touch). MetaPost's Hobby splines are sometimes discontinuous in curvature when I specify more about the curve (such as tangents, etc). I'll think about rotating points non-extreme curve nodes. Is solving for the rotation to achieve continuous rotation numerically stable?
Assuming that "G3 continuity" means continuity of the derivative of the curvature, can this in general be obtained with cubic Bezier curves?
>I feel this gives better results than shifting
Like everybody now, I guess, I do this 'taking out the bumps' stuff by eye, rather than algorithm.
I have usually found it easier to slide nodes (using the shift key in FontLab) than to change the angle of smoothly connected bezier handles. Changing the angles of handles seems to mess up the 'other' curve--the one you don't want to change--more than sliding the node.
If you are free to move around the angle and length of one handle, because there is a sharp connection, and the other node is at an extremum. then it is easier. But then curve continuity across the node is also not an issue.
Also, to sound a different note here, I think the issues of proportion, weight, contrast, and connections of all the parts of glyphs are more important to text faces than the exact curves, which are not so visible at text sizes. Though sweet curves are an important part of the story, they aren't the biggest part of the story.
@Tim Ahrens: Finally, I have to admit that I do not find the curve of the s in your PDF harmonic at all, especially the three lightest versions.
You're right, it kinda sucked. I was trying to do it with too few points, and too quickly. I spent a little more time on the example, doing a couple of printed rounds instead of entirely on screen, and I'm sure you'll agree that the results are more satisfactory. Sweet curves are, as William points out, no substitute for a careful eye and a willingness to refine the outlines until they're just right. But I do think sweet curves can help that process, and certainly make it more enjoyable.
The new PDF is here, and this time I've included the filled versions in the image:
@sgh: Assuming that “G3 continuity” means continuity of the derivative of the curvature, can this in general be obtained with cubic Bezier curves?
You can bring the error (discontinuity) down as far as you like, by using more curves. The default in Spiro is actually G4 continuity, but I'm switching to G2 as the default because it's easier to control, and the extra continuity isn't really visible except under extreme scrutiny.
MetaPost’s Hobby splines are sometimes discontinuous in curvature when I specify more about the curve (such as tangents, etc).
Well, they're always discontinuous in curvature, just not by much. But yes, when using a two-parameter spline (such as Hobby's cubic primitive or an Euler spiral), specifying the tangent makes the curvature quite discontinuous.
It would be interesting to experiment with G2 continuity with tangent constraints using a four-parameter spline. My guess is that it's possible, but it might not be easy to control, i.e. if the tangent is significantly different than the one that would be assigned automatically, it might cause ripples in neighboring segments. But it's hard to know for sure until it's implemented. I'm not sure if I'll have the chance to do that any time soon. Time to grow new rocket scientists!
Integrating Spiro splines into MetaPost would make a huge amount of sense. The integration would have to be relicensed under the GPL, and of course somebody needs to do the work. But I think it would be excellent closure, because the Hobby splines are what started me down this path in the first place.
Try a narrower "S" (otherwise you'll have to make the diagonal flatter).
Raph, how do you load a background image in ppedit? When ppedit is compiled using x3, it seems that it does not load /tmp/foo.ppm.
This is very interesting! I was always looking for a good way to have description of outlines without off-curve points and Sketch mode in FLS is an example of this approach. In that case we decided to make curve math compatible with Ikarus outlines (while based on different math) and that was not a best approach. Other methods that we were checking provided much smoother results but were not point-compatible with .ik files.
What about Peter Karow's approach to construction of outlines using spirals? Is rougly the same idea? (It is on page 86 in English edition of his book.)
Few words about our future approach to different editing methods: the biggest problem of current Fontlab tools is that all of them mix production with design. We plan to separate it and offer plugin architecture for editing content of glyphs.
There will be only two minimal requirements: plugin must resterize (with smoothing of edges) and provide at least a conversion to and from Bezier outline.