[MPEG-OTSPEC] VARC, glyf, and TT-instructions

Skef Iterum skef at skef.org
Tue Feb 6 01:03:58 CET 2024


Coming back to this subject --

We just did a couple explicit tests and it appears that the developing 
understanding is still conflating two distinct things: whether and how 
the /context/ that the font is being rendered in is transformed, and 
whether and how a component of a composite glyph is transformed.

One might imagine a rasterizer that does something like the following:

 1. Each component is given access to CVT-derived values that take into
    account the total transformation of the component (any "external"
    transformation plus any transformation at the composite level).
 2. Whether grid-fitting is active depends on those component-specific
    CVT values. If there is rotation or skew the fitting might always be
    off. If there is just scaling maybe it is left on.
 3. If the instructions are on, they apply to the points of the
    component /post-/tranformation.

What our experiments imply is:

 1. The CVT values only vary by "external" transformation, not component
    transformation. Therefore if there is no "external" skew or
    rotation, instructions will generally be turned on for every component.
 2. Grid-fitting of the component occurs /pre-/transformation. The
    points of the component are transformed to their final locations in
    a later step.

So if this is accurate the typical result of rendering a component with 
a skew and/or rotation in a context that does not have skew and/or 
rotation will be to grid-fit the "original" component using its hint 
data and then transforming the result. This will yield a glyph that is 
distorted (due to the grid-fitting) but not hinted according to the 
pixel grid it is rendered against.

So, one thing the VARC specification could, well, /specify/ is that VARC 
components extracted from the glyf table are hinted more like the first 
list above than the second -- with further details presumably to be 
worked out. That way, with an appropriate header, grid fitting could be 
on or off depending on the total transformation of the component. 
Whether the existing instruction set is rich enough to handle 
non-uniform scaling when grid-fitting isn't cancelled by skew or 
rotation still seems like an open question, given that that's not how 
things seem to work in practice now. But such a change would be a start.

However, the VARC spec being added to the working draft says /nothing/ 
about hinting, apparently leaving the question of how hinting is 
supposed to be managed in the face of component transformation -- the 
latter being a central part of VARC -- unresolved.

Skef

On 1/26/24 13:04, Greg Hitchcock wrote:
>
> Through a combination of the GETINFO instruction and the INSTCTRL 
> instruction, glyphs or fonts can make educated decisions about whether 
> to apply instructions under different circumstances such as rotations, 
> stretching, &c. Typically we recommend in the pre-program to disable 
> hints under rotation, but if someone comes up with a clever algorithm 
> for handling this, that is an option.
>
> GregH
>
> *From:*mpeg-otspec <mpeg-otspec-bounces at lists.aau.at> *On Behalf Of 
> *Skef Iterum via mpeg-otspec
> *Sent:* Friday, January 26, 2024 11:33 AM
> *To:* Laurence Penney <lorp at lorp.org>
> *Cc:* mpeg-otspec <mpeg-otspec at lists.aau.at>
> *Subject:* Re: [MPEG-OTSPEC] VARC, glyf, and TT-instructions
>
>
> 	
>
> You don't often get email from mpeg-otspec at lists.aau.at. Learn why 
> this is important <https://aka.ms/LearnAboutSenderIdentification>
>
> 	
>
> On 1/24/24 23:47, Laurence Penney wrote:
>
>         On 25 Jan 2024, at 01:25, Skef Iterum via mpeg-otspec
>         <mpeg-otspec at lists.aau.at> <mailto:mpeg-otspec at lists.aau.at>
>         wrote:
>
>         There is a distinction between whether the text path itself is
>         skewed or
>         rotated and whether a component in a composite is skewed or
>         rotated.
>         Asking around it seems as though with the existing glyf components
>         instructions are /not/ automatically turned off when
>         "compositing", but
>         perhaps that info is wrong.
>
>         Either way, though, that seems like something the
>         specification should
>         clarify.
>
>     I asked similar questions when I was getting my head around TT
>     hinting, and recall being told that skewed or rotated components
>     were not hinted. The person I asked would most likely have been
>     Greg Hitchcock.
>
> Josh Hadley on our team got curious about this and did an experiment 
> or two
> in VTT. As far as we can tell there is no automatic disabling of hints 
> when using
> "not nice" transformations, at least in that tool. We can provide a 
> specific
> example or two if anyone needs them.
>
> It's possible that the "client side" implementations work differently 
> than the
> development tools but designers are likely to take the guidance of 
> those tools
> unless there is very strong conventional wisdom pointing in a different
> direction.
>
> Skef
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.aau.at/mailman/private/mpeg-otspec/attachments/20240205/d86e972c/attachment-0001.htm>


More information about the mpeg-otspec mailing list