基于SDF渲染字体

作者: 落单的毛毛虫 | 来源:发表于2019-12-02 11:12 被阅读0次

18号字体

18号字体.png

18号字体放大15倍

位图字体_放大15倍.png

基于sdf渲染字体放大15倍

矢量字体_放大15倍.png

相比常规的渲染方式,基于SDF渲染文字可无限放大并保持清晰,几乎没有开销就可实现描边,发光,抗锯齿等效果.且它只需要很小的纹理缓存SDF信息即可.

所谓SDF(Signed-distance-field),就是将每个像素存储的颜色值换成距离文字轮廓最短距离,当像素在文字内,则用正数距离,在文字外则用负数距离,文字轮廓距离则是零,因此只要判断像素如果是正数,就输出颜色,否则丢弃颜色即可.

该技术由Valve开发半条命2时提出,当时主要用于渲染图片,之后被广泛用于其他技术中,用于渲染字体仅是其中一项.

相对比常规的渲染方式,除了片段着色器的差别外,主要差别在于生成的纹理缓存.

常规渲染方式的纹理缓存大致如下:

一个纹理只存一个字号

fnt36.png

一个纹理存储多个字号

fnt_atlas.png

它们都有一个共同点:每个像素存储的信息都是颜色.而sdf每个像素存储的是距离,因此它能提供矢量信息.(怎么存储多个字号, 可查看合并图集)

SDF纹理

sdf.png

SDF渲染字体在网上有很多资料,但我翻遍了百度,只找到一个可运行的文字SDF生成工具,在我反复调试后,发现这个工具生成的SDF是错的,迫不得已我只好花20分钟重写了一个,算法也简单,无非就是暴搜+阀值控制,生成4096*4096的SDF,i7 7700k大概需要1分钟.

描边

描边.png

内发光

内发光.png

外发光

外发光.png

效果

动态图.gif

相关文章

  • 基于SDF渲染字体

    18号字体 18号字体放大15倍 基于sdf渲染字体放大15倍 相比常规的渲染方式,基于SDF渲染文字可无限放大并...

  • sdf字体处理

    sdf字体处理(先占坑,后续再填)

  • Unity Anti-aliasing shader (SDF)

    分享下最近通过论文研究基于SDF的Anti-aliasing。 什么是SDF?SDF=signed distanc...

  • 面对的文字问题

    1 .描边:SDF策略2 .翻译,翻译换行。多语言的时候3 .字体。

  • 无标题文章dsf sdf

    sdf sdf sdf sdf

  • hello world

    asdfasdfsdaf sdf sdf sdf sadf sadfsad dfasdf dsf sdf sdf

  • Ubuntu上安装Kali-Linux的工具

    Kali-Linux之前的渗透神器BackTrack是基于Ubuntu的,界面比较友好,字体渲染看起来也比较舒服(...

  • 字体渲染

    smashing magzine 上的一篇文章,有时间翻译一下 http://www.smashingmagazi...

  • 无标题文章

    dfsdf sdf sdf sd fsdfsdfsdfsdf sdf sdfsdfdsf

  • Ubuntu 字体渲染

    Linux上的字体渲染一直是一件相当烦人的事。。。 没字体好用的字体字体渲染本身相当复杂 所以,有了字体之后还得学...

网友评论

    本文标题:基于SDF渲染字体

    本文链接:https://www.haomeiwen.com/subject/yjmxgctx.html