基於SDF渲染字體


18號字體

18號字體.png

18號字體放大15倍

位圖字體_放大15倍.png

基於sdf渲染字體放大15倍

矢量字體_放大15倍.png

相比常規的渲染方式,基於SDF渲染文字可無限放大並保持清晰,幾乎沒有開銷就可實現描邊,發光,抗鋸齒等效果.且它只需要很小的紋理緩存SDF信息即可.

所謂SDF(Signed-distance-field),就是將每個像素存儲的顏色值換成距離文字輪廓最短距離,當像素在文字內,則用正數距離,在文字外則用負數距離,文字輪廓距離則是零,因此只要判斷像素如果是正數,就輸出顏色,否則丟棄顏色即可.

該技術由Valve開發半條命2時提出,當時主要用於渲染圖片,之后被廣泛用於其他技術中,用於渲染字體僅是其中一項.

相對比常規的渲染方式,除了片段着色器的差別外,主要差別在於生成的紋理緩存.

常規渲染方式的紋理緩存大致如下:

一個紋理只存一個字號

fnt36.png

一個紋理存儲多個字號

fnt_atlas.png

它們都有一個共同點:每個像素存儲的信息都是顏色.而sdf每個像素存儲的是距離,因此它能提供矢量信息.(怎么存儲多個字號, 可查看合並圖集)

SDF紋理

sdf.png

SDF渲染字體在網上有很多資料,但我翻遍了百度,只找到一個可運行的文字SDF生成工具,在我反復調試后,發現這個工具生成的SDF是錯的,迫不得已我只好花20分鍾重寫了一個,算法也簡單,無非就是暴搜+閥值控制,生成4096*4096的SDF,i7 7700k大概需要1分鍾.

描邊

描邊.png

內發光

內發光.png

外發光

外發光.png

效果

動態圖.gif


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM