18號字體
18號字體放大15倍
基於sdf渲染字體放大15倍
相比常規的渲染方式,基於SDF渲染文字可無限放大並保持清晰,幾乎沒有開銷就可實現描邊,發光,抗鋸齒等效果.且它只需要很小的紋理緩存SDF信息即可.
所謂SDF(Signed-distance-field),就是將每個像素存儲的顏色值換成距離文字輪廓最短距離,當像素在文字內,則用正數距離,在文字外則用負數距離,文字輪廓距離則是零,因此只要判斷像素如果是正數,就輸出顏色,否則丟棄顏色即可.
該技術由Valve開發半條命2時提出,當時主要用於渲染圖片,之后被廣泛用於其他技術中,用於渲染字體僅是其中一項.
相對比常規的渲染方式,除了片段着色器的差別外,主要差別在於生成的紋理緩存.
常規渲染方式的紋理緩存大致如下:
一個紋理只存一個字號
一個紋理存儲多個字號
它們都有一個共同點:每個像素存儲的信息都是顏色.而sdf每個像素存儲的是距離,因此它能提供矢量信息.(怎么存儲多個字號, 可查看合並圖集)
SDF紋理
SDF渲染字體在網上有很多資料,但我翻遍了百度,只找到一個可運行的文字SDF生成工具,在我反復調試后,發現這個工具生成的SDF是錯的,迫不得已我只好花20分鍾重寫了一個,算法也簡單,無非就是暴搜+閥值控制,生成4096*4096的SDF,i7 7700k大概需要1分鍾.
描邊
內發光
外發光
效果