为SDF创建mipMap时,是否有一些算法可以保留细节?例如,如果4个像素的组中只有一个像素高于阈值,则会使用双线性丢失此像素,而创建具有“ max”值的mipMap会增加噪声。
当SDF的目的是使同一图像保持较低的分辨率时,对图像进行降采样的最佳方法是什么?

#1 楼

制作SDF时,通常会有无限详细的数据(例如,构成字母的贝塞尔曲线)形成特定大小的SDF图像。

如果制作的是64x64,第一个Mip为32x32。正确执行此操作的方法是执行从源数据创建SDF纹理的原始过程,但要以32x32而不是64x64的分辨率执行。对其他mips重复同样的操作。正确但慢的方法是进行超级采样。在像素的不同位置进行多个采样,并对结果取平均值。

#2 楼

从我发现的结果来看,无论您如何映射,带符号的距离字段都不适合缩小(在屏幕上以比纹理覆盖的更少的像素绘制文本)。它们的主要用例是放大倍数,它们在此处很耀眼,因为当渲染的对象在屏幕上增大时,您不需要增加距离场纹理的大小。

进行渲染(例如,文本),并带有带符号的距离字段:


纹理应足够大,以使其代表您要渲染的对象的完整几何细节。一条好的经验法则是,纹理中字形的每条线/描边的宽度至少应为2像素。
您在屏幕上使用基于距离场的纹理绘制的对象应该在屏幕上较大,纹理(例如,在距离场纹理中覆盖64x64像素的字形应在屏幕上的每个方向覆盖至少64像素)

如果这些属性不适合您的使用情况,则最好使用直接光栅化的纹理(而不是距离场),因为那些mip映射要好得多。