376 Followers
175 Following
197 Posts
Type designer running Just Another Foundry @jaf with Shoko Mugikura @ShokoMugikura. Maker of @kernon and @rmx.
JAF homepagehttps://justanotherfoundry.com/
RMX homepagehttps://remix-tools.com/
KO homepagehttps://kern-on.com/

I keep thinking about camcorders. Imagine being a videographer for the first 10 or 20 years after camcorders went on sale. You'd go through the following thoughts:

"Everyone can make movies? This is going to kill my job."
"Haha, this is trash. My job is safe."
"Quality is getting better but it's still trash."
"It's trash but people are kind of happy with it? For recording memories and having fun it does what they need."
"OK, quality is actually getting decent, you could maybe shoot a pro movie on this. Worried about my job again."
"What is my job? Now that anyone can shoot videos, it's obvious that it's not just pointing a camera and making a movie. It's knowing light, angles, sound, timing. Both the camcorder, and my job, have their place."

Anyway, back to coding.

@TiroTypeworks @justvanrossum @letterror Normalising the setup based on the bounding box would be an elegant solution to the issue at hand. However, I believe we have another requirement: Adding a master to the setup must not change the visible result for those instances that do no use it. I am thinking of scenarios like adding an extreme master late in the design process or even after the initial release. Unfortunately, this rules out simple bounding box normalisation.
@TiroTypeworks @justvanrossum @letterror Far less impressive than Just’s visualisation, but as I have made it already, here is mine. I didn’t include any triangulation but it’s easy to imagine that there is a risk that an interpolation mechanism, generally speaking, treats the two options very differently even though they are practically the same, only with different axis scales.
@TiroTypeworks Oh, with the help of that evil new technology I just found out how all this would elegantly be expressed by a maths pro: “Delaunay triangulation is not affine-invariant”. There you go!
@TiroTypeworks This is true for the one-dimensional case: the results are independent of the axis scale/length/resolution. However, as soon as Delauney triangulation comes into play – or any mechanism that relies on concepts such as Euclidean distance or angles –, we loose this independence. Which means changing the relative scales of the axes may change the result, as different point pairs are considered “close to each other” (as per Pythagoras). At least that’s my understanding.
@justvanrossum @TiroTypeworks @letterror Thanks, I see. This practically means “manually set with computer assistance”. The designer can decide to re-fresh (or not) the automatic edges after they have changed the setup. That’s certainly more robust. Even though, I’d feel uncomfortable that the automatically determined edges (which one would usually rely on) depend on the axis scaling, and there may be a different, more appropriate edge configuration out there, which I missed.
@TiroTypeworks @letterror It seems surprisingly difficult to explain what I mean. This is not about intervals. What I am talking about is simply scaling the entire setup by a certain factor in one dimension. In other words, multiplying a certain coordinate of each point with the same factor. I believe the requirement for a new interpolation mechanism should be that this must not affect the interpolations. [Edit] As far as I can tell, all the existing mechanisms (VF, MM, Glyphs) fulfil this requirement.

@letterror Each master has coordinates, a tuple of values, of course. Same for the interpolated instance(s).

Let’s say in my font project, I have a foo axis that goes from 0 to 100. Then I decide that I want it to go from 0 to 1000 instead. I will simply add a zero to the foo value of each master and each instance. I’d expect that the interpolations remain perfectly identical.

@letterror There are some axes which can’t be re-scaled easily, though. For example, the weight axis nowadays is expected to range from 100 to 1000, while the width axis is typically scaled at 50 (compressed) to 100 (regular). This means the width axis has a built-in dominance of roughly 1:10 over the weight axis. Only because someone, a long time ago, decided that 400 is regular and 700 is bold. Had they decided that 40 is regular and 70 is bold then our interpolated fonts would look differently. I am not prepared to accept that.

2/2

@letterror Not sure what to make of this.

In font interpolation, unlike in geo sciences, the relative scales of most dimensions are arbitrary.

It seems the implications were not clear.

If the scaling of an axis affects the visible result, then, as a font maker, I will play around with different scalings, trying to find the one that gives the best results. For several axes at once. This could be quite tedious.

1/2