Value的Improved Alpha-Tested Magnification for Vector Textures and Special Effects提到了可以利用SDF來渲染高質量的貼圖的同時而不用提供很高精度的貼圖。論文中提到用暴力法從高精度貼圖生成SDF,沒有直接提到其他的算法。暴力法在貼圖大小較小,且spread較小時是可行的,隨着貼圖和spread大小的增加,效率將會降低,下面收集了兩個比較容易實現的算法。
8SSEDT
8SSEDT即8-point signed sequential euclidean distance transform,Signed Distance Fields中給出了實現的僞代碼。該算法的是個O(N)算法,與spread大小無關。通過對貼圖進行從上到下、從下往上兩遍掃描,最終可以得到一個distance transform。
該算法的缺點是無法使用CPU進行並行處理。
Marching Parabola
Distance Fields中提到了另一個算法,這個算法也是一個O(N)算法,但是相比8SSEDT的優點在於可以很容易利用CPU進行並行處理(一次並行處理多行或多列)。
對於輸入貼圖G中任何一點,其DT爲
其中爲G中的cost,對於一個二值圖像,通常定義爲
其中爲對象所在區域,容易看出就是平方距離。
對於點處的DT值,可以看成n個拋物線在處的值的最小值,這就是該算法與拋物線有關的原因。