基于SDF渲染字体

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分钟.

描边

内发光

外发光

效果

原文地址:https://www.cnblogs.com/mmc1206x/p/11965064.html

时间: 2024-11-03 09:42:59

基于SDF渲染字体的相关文章

unity3d 基于物理渲染的问题解决

[狗刨学习网] 最近1个月做了unity 次世代开发的一些程序方面的支持工作,当然也是基于物理渲染相关的,主要还是skyshop marmoset的使用吧,他算是unity4.x版本 PBR的优秀方案之一了 但在使用以及性能上,还是多少有些坑和不足,这里也是自己的一些心得吧,希望可以其他对这个方案有兴趣的朋友起到一些帮助. 一.遇到了fps降低的BUG 国庆节前的老版本工程和最新的工程版本运行起来没任何区别,但新版本在真机上的的运行效率有问题,只有7.5fps 开发和运行环境, XCode6.1

Unity3d 基于物理渲染Physically-Based Rendering之最终篇

前情提要: 讲求基本算法 Unity3d 基于物理渲染Physically-Based Rendering之specular BRDF plus篇 Unity3d 基于物理渲染Physically-Based Rendering之实现 最后我们用fragment shader 实现,加上diffuse漫反射,代码和之前的surface差不多,只是多了reflect方向的计算,reflect方向的计算方法为用CG函数库中函数reflect, float3 reflect(float3 i, flo

Windows下使用GetGlyphOutline在OpenGL中渲染字体

欢迎转载,请标明出处:http://blog.csdn.net/tianyu2202/ 无图无JB,先上图.使用OpenGL绘制字体,支持多种字体,支持TrueType轮廓字体,支持自选字体纹理大小和输出大小,支持在三维空间内绘制. 关于OpenGL中字体的显示网上其实有很多的教程,不过经常用到的方式有比较简单的Bitmap方式.比较复杂的FreeType方式.而本文介绍的方式虽然只能在Windows下实现,却有着和FreeType一样的显示效果,最重要的是非常简单,仅仅200多行代码即可实现.

AGG第四十一课 AGG和GDI渲染字体大小对比

如下是GDI渲染字体的代码: CClientDC dc(this); CPen pen(PS_SOLID,3,RGB(0,255,255)); CPen* pOldPen; pOldPen=dc.SelectObject (&pen); dc.SelectObject (&pOldPen); CFont font; CFont* pOLdFont = NULL; font.CreatePointFont(10,_T("System"),&dc); pOLdFon

基于物理渲染的基础理论

本篇作为理论的概括介绍,并不涉及公式的部分 基于物理渲染的优点 很容易就可以作出真实和照片级的效果. 同一配置可以适用于在不同HDR光照环境下. 接口简单而直观,都是基于世界真实的参数.(如粗糙度,金属度,等等). 不需要美术去提供经验性的"奇怪"参数和配置. 更容易去解决问题和扩展需求. 基于物理的渲染和和传统区别 有着基于物理规则的光照模式 有着无处不在的fresnel效果 能量守恒“energy conservation”,物体平面的反射光无法超过它所解接受的入射光 基于物体材质

翻译 基于物理渲染的美术资源设计流程

基于物理的渲染 相关的系列文章又一篇,原创的总结也马上要发出来 如果要在游戏产品里推行基于物理的渲染,只有程序渲染管线是远远不够的,如何培训美术和设计人员去适应新的方法也是一个重要课题 这篇ppt也是我计划的一系列美术教材中的一篇,希望能对大家起到帮助,ppt里的有一个链接是要FQ的,为了方便,我就在这贴里翻译了 链接 http://pan.baidu.com/s/1mg2xSjY 49kw 原文 http://research.tri-ace.com/Data/cedec2012_FlowFo

翻译 次世代基于物理渲染的反射模型

本文是Tri-Ace在cedec2013上发表的次世代基于物理渲染的反射模型的翻译版,时间和能力有限,一些错误或者不好理解的地方也请联系我修正 受到physically-based shading at disney siggraph 2012的影响,很多引擎都对它有所借鉴,3A也是对他们以前的基于物理的Blinn-Phong的改进版模型做了解析后,参考Disney BRDF,设计了新的Model, 同时也在Cook-Torrance的Microfacet BRDF基础上,提出了自己对F ,G,

Unity3d 基于物理渲染Physically-Based Rendering之实现

根据前文的例子http://blog.csdn.net/wolf96/article/details/44172243(不弄超链接了审核太慢)弄一下真正的基于物理的渲染逃了节课= =,弄了一下.公式和之前的文章一样,这次加上cubeMap贴图,由于方便,就直接用surface shader了,因为不用求reflect方向,之前也有这一篇文章说明surface shader中cubeMap的使用方法和实时反射的方法http://blog.csdn.net/wolf96/article/detail

Unity3d 基于物理渲染Physically-Based Rendering之specular BRDF

在实时渲染中Physically-Based Rendering(PBR)中文为基于物理的渲染 它能为渲染的物体带来更真实的效果,而且能量守恒 稍微解释一下字母的意思,为对后文的理解有帮助, 从右到左 L为光线方向,H为半角向量,L是和V的中间,N为法线方向,V为我们眼睛的观察方向(相机看的方向),R为反射方向 Torrance-Sparrow光照模型的镜面反射公式 D为法线分布函数(NDF) F为反射函数(Fresnel 函数) G为阴影遮罩函数(几何函数),未被shadow或mask的比例