为何缩放时符号距离场(SDF)画质无损而普通图像不行?
符号距离场(SDF)渲染文本无画质损失的原因
要搞懂这个问题,核心得看两种图像存储的本质差异:
普通图像 vs SDF的存储内容
- 普通图像存的是像素颜色值,本质是对原始视觉信号的离散采样——比如文本边缘的锐利过渡,被拆成了一个个相邻的不同颜色像素。
- SDF存的是每个点到文本边缘的符号距离:负数代表该点在文本内部,正数代表在外部,数值大小就是到边缘的实际距离。它存储的是几何信息,而非直接的视觉颜色。
插值对两者的不同影响
- 普通图像放大时,插值是对离散的颜色值做加权平均。比如原本锐利的文本边缘,原始像素里只有“黑”和“白”两种颜色,放大后插值只能生成介于两者之间的灰色,自然就模糊了——因为原始数据里没有边缘的几何细节,只能靠颜色猜测填补。
- SDF放大时,插值的是连续的距离值。距离本身是平滑的物理量,插值得到的新距离值依然能准确反映该点到文本边缘的近似距离。渲染时只需要判断:距离值小于0就渲染文本颜色,大于0就渲染背景——相当于用更精细的采样重新计算了文本的边缘位置,自然不会出现模糊或画质下降。
简单说:普通图像是“记录看到的结果”,放大是对残缺结果的补全;SDF是“记录几何规则”,放大是用规则重新生成细节。
内容的提问来源于stack exchange,提问作者anglewings
相关产品推荐
相关产品推荐

