18 号字体放大 15 倍
基于 sdf 渲染字体放大 15 倍
相比常规的渲染方式, 基于SDF渲染文字可无限放大并保持清晰, 几乎没有开销就可实现描边, 发光, 抗锯齿等效果.且它只需要很小的纹理缓存SDF信息即可.
所谓SDF(Signed-distance-field), 就是将每个像素存储的颜色值换成距离文字轮廓最短距离, 当像素在文字内, 则用正数距离, 在文字外则用负数距离, 文字轮廓距离则是零, 因此只要判断像素如果是正数, 就输出颜色, 否则丢弃颜色即可.
该技术由开发半条命 2 时提出, 当时主要用于渲染图片, 之后被广泛用于其他技术中, 用于渲染字体仅是其中一项.
相对比常规的渲染方式, 除了片段着色器的差别外, 主要差别在于生成的纹理缓存.
常规渲染方式的纹理缓存大致如下:
一个纹理只存一个字号
一个纹理存储多个字号
它们都有一个共同点: 每个像素存储的信息都是颜色.而sdf每个像素存储的是距离, 因此它能提供矢量信息.(怎么存储多个字号, 可查看合并图集)
SDF纹理
SDF渲染字体在网上有很多资料, 但我翻遍了百度, 只找到一个可运行的文字SDF生成工具, 在我反复调试后, 发现这个工具生成的SDF是错的, 迫不得已我只好花20分钟重写了一个, 算法也简单, 无非就是暴搜 + 阀值控制, 生成 4096*4096 的 SDF,i7 7700k 大概需要 1 分钟.
描边
内发光
外发光
效果
来源: https://www.cnblogs.com/mmc1206x/p/11965064.html