Thanks Jim.

A 2.14 representation when 1 unit = 1em is sufficient.  If we are talking
pixels then 10.6 or better 8.8 makes more sense.  And I agree that the
pixel values are more useful to clients than em values.

On Thu, Jun 4, 2020 at 8:35 AM Jim Van Verth <jvanve...@google.com> wrote:

> Behdad,
>
> Thanks for the pointer to cu2qu, I'll take a look at it. I assume you're
> suggesting we use that in place of GrPathUtils::convertCubicToQuads. I
> believe in our case we chop at inflections to avoid artifacts from our
> resolution independent curve rendering.
>
> As far as scale for our SDFs, 1 unit in distance is one pixel. And Anuj,
> I'm not sure 2.14 is enough precision in the integer part. It's been a
> while, but I believe I got better results with at least 3 bits of integer.
>
> On Wed, Jun 3, 2020 at 6:33 PM Behdad Esfahbod <beh...@behdad.org> wrote:
>
>> Jim,
>>
>> I see that in your implementation you are converting cubics to quadratic
>> spline.  That makes a lot of sense and I support that.  For the conversion
>> though, I see a messy piece of code, which is typical of that kind
>> of thing.  I like to introduce you to cu2qu algorithm which we designed and
>> implemented back when I was at Google.  It has a much simpler algorithm,
>> which is very robust by design and has been used in production of thousands
>> of fonts in recent years with no bug report whatsoever.  The core algorithm
>> is very simple:
>>
>>
>> https://github.com/googlefonts/cu2qu/blob/master/Lib/cu2qu/cu2qu.py#L218
>>
>> Here's a highlevel description of the algorithm:
>>
>>   https://github.com/googlefonts/cu2qu/issues/10
>>
>> This was specifically designed to have very good behavior for encoding
>> the results in a 'glyf' table.  But is useful for more general uses as well.
>>
>> It would work much better if we break the input curve on cusps if any.
>> But even that has not been an issue:
>>
>>   https://github.com/googlefonts/cu2qu/issues/6
>>
>> Cheers,
>> behdad
>>
>>
>> On Wed, Jun 3, 2020 at 3:16 PM Behdad Esfahbod <beh...@behdad.org> wrote:
>>
>>> Hi Jim, others,
>>>
>>> Thanks for your input.  I've been meaning to get into the discussion as
>>> well but didn't get to.
>>>
>>> I support your suggestions: generate from vector instead of bitmap, as
>>> well as 8-bit 3.5 fixed point or similar at least as an option.  In your
>>> 3.5 fixed-point, does one unit reflect 1em, or 1 pixel at the SDF size?
>>>
>>> I think we do want a 8bit representation at least, and possible a higher
>>> one.
>>>
>>> On Wed, Jun 3, 2020 at 10:26 AM Jim Van Verth <jvanve...@google.com>
>>> wrote:
>>>
>>>> Forgive me for coming into this late -- a colleague pointed me to this
>>>> thread a couple of days ago and I'm just catching up. I work on Skia, and
>>>> we've been generating SDFs from glyphs for quite some time now, so the
>>>> possibility of just getting them from Freetype is pretty exciting.
>>>>
>>>> I hope you don't mind some comments on what we have now. We currently
>>>> use the Gustavson algorithm to generate them from bitmaps but it produces
>>>> slightly fuzzy results. I have wanted to move to use this algorithm to
>>>> generate them directly from the outline which might be useful to you:
>>>>
>>>> https://skia.googlesource.com/skia/+/refs/heads/master/src/gpu/GrDistanceFieldGenFromVector.cpp
>>>> We use it to store atlased paths at the moment and it produces much
>>>> better results.
>>>>
>>>> As far as format, we use an 8-bit 3.5 fixed point format, because it
>>>> allows us to combine the SDF and bitmap glyphs into the same atlas to
>>>> conserve space. There is a sacrifice in quality, but we only use the SDFs
>>>> for larger glyphs so it's acceptable.
>>>>
>>>> If you would like more details on our implementation please let me
>>>> know. I'm looking forward to seeing how this turns out.
>>>>
>>>>
>>>
>>> --
>>> behdad
>>> http://behdad.org/
>>>
>>
>>
>> --
>> behdad
>> http://behdad.org/
>>
>
>
> --
>
> Jim Van Verth | Software Engineer | jvanve...@google.com | 919-210-7664
>
>

-- 
behdad
http://behdad.org/

Reply via email to