使用Bitmap Font Generator生成字体文件时的字体设置、输出设置和描述文件,翻译自Bitmap Font Generator的在线文档。
字体设置(Font settings)
在选项(Option)菜单中选择字体设置或按下F键即可打开字体设置面板。
这一面板控制字体的属性,如字符集、字体外观等。
字体图形(Font graphics)
无效字符字形(invalid character glyph)是指对于特定字符如果在TrueType字体中没有适当的字形时用作回退使用的字形。
不包含字偶距(not include kerning pairs)的选项在使用此生成的bmfont的应用程序不支持字偶距,或源TrueType字体中有不正确的字偶距时非常实用。
光栅化(Rasterizing)
增加从TrueType的轮廓渲染(render from TrueType outline)选项是因为Windows的本地字体引擎会会裁切掉上下超出单元高度(cell height)的字形。正常情况下这不是问题,并且在大多数情况下不会注意到这两种形式光栅化字形的区别。
TrueType微调(TrueType hinting)可以 在文本以较小的尺寸渲染时,按照屏幕像素来调整字形边缘的显示,使文本更易读。在本地字体引擎中这一选项总是开启,当使用轮廓渲染(render from outline)时则可以选择将其关闭,以得到字符准确的形状。请注意对于较小的字体,细的线会变得不可见以至于字形变得不易读。
ClearType是本地字体引擎提供的选项,可以借助LCD/LED屏幕的像素布局来使用次像素级平滑(subpixel smoothing)。当对字形光栅化时,会失去次像素级的平滑,但仍可以有较好的抗锯齿效果,所以就有了此选项,可以根据需要使用。
当使用字体平滑(font smoothing)来生成字体时,建议仅使用字体平滑。如果使用了超采样(super sampling),由于向下采样时使用平均,生成的字体可能会降低锐度(sharpness)。这一现象在生成较小的字体时更明显。在字体平滑失效时,超采样会对光栅化字体非常有用。
Effects
生成字体时可选择同时生成一个烘培的可变宽度的轮廓。如果使用了轮廓(outline)字体会占用更多一点的纹理空间,但好处是不必在绘制字体的运行时再生成轮廓。
输出选项(Export options)
在选项(Option)菜单中选择输出选项或按下T键即可打开字体设置面板。
这一面板控制字体如何存储,如纹理布局、文件格式等。
内边距(Padding)
当需要在其它的绘制程序中增加一些后处理效果时,内边距会很有用。例如,如果你要增加一个5x5核心的模糊特效,就要在每一侧增加2的内边距。与此相似,如果你想加一个阴影,你应当在字符的下部和右侧增加一点内边距(假定那就是你想增加阴影的方向)。
间距(Spacing)
间距用于控制字体纹理中字符之间保留的最小空间。如果在绘制字体时使用mipmapping来缩放纹理,则需要增加间距(spacing)以避免在缩小纹理时出现的出血(bleeding)。mipmap纹理的级别越多,需要的间距也越多。
双线性过滤方式也可能引起出血,所以除非你使用的是像素级的完美图片,即每个纹素与屏幕上的像素都一一对应完美映射,你需要在竖直方向和水平方向留至少1的间距。
统一单元高度(Equalize the cell heights)
当勾选这一选项时,所有的字体字符都会被输出到等高的单元里。当你最终产生的字体的工作流中包含有基于字符高度的后处理步骤时,这一选项会非常有用,如使用渐变。
弊端在于纹理中能容纳的字符数会变少,并且字体渲染器要绘制更大的长方形。
强制零偏移(Force offsets to zero)
这一选项是为了增加对无法处理xoffset, yoffset和xadvance的字体渲染器的支持。当勾选此选项时,字形图像会增加内间距,以将xoffset和yoffset设为0,并且xadvance会与宽度相等。这一选项也会强制统一单元高度(Equalize the cell heights)。
注意如果原始的TrueType字体使用了负的xoffsets或xadvance小于字形宽度,这一选项会改变最终字符的间距,如字符有悬垂部分时。
纹理(Texture)
BMFont支持多种不同的纹理布局。宽度和高度,即纹理的尺寸。应当使纹理的尺寸尽可能小,同时仍能够将所有的字符容纳在一张纹理内。
如果导入有带颜色的图标,或是计划在后处理时为字符加入颜色,应当选取32bit格式,否则8bit格式就足够。
如果选择了32bit格式,则可以通过选择在每个通道打包字符(pack characters in each channel)来优化纹理内存的使用,这种情况下将需要一个特殊的像素着色器在绘制时解码。在这一模式下,你仍可以导入带颜色的图标,字符会以适当的放方式环绕其打包在一起。
8bit模式下,字体轮廓也可以与字符一起编码,与将字符轮廓存储为带颜色的图片相比,这将允许你在相同的空间里存储更多字符。这也需要在绘制时使用特殊的像素着色器来解码。
通道选项(Channel options)
- 字形(glyph) : 该通道将根据字形几何来设置。值为1表示像素位于字形内。
- 轮廓(outline) : 该通道将根据轮廓几何来设置。值为1表示像素位于轮廓或字形内。
- 字形+轮廓(glyph + outline) : 编码得到的值可以区分字形和轮廓。值0.5表示该像素位于轮廓内但不在字形内。值为1表示像素位于字形内。
- 1(one) : 通道内所有像素都被设为1。
- 0(zero) : 通道内所有像素都被设为0。
以下是一些常见的选择:
- 32bit 白色字形黑色轮廓: alpha = outline, red = green = blue = glyph
- 32bit 白色字形无轮廓: alpha = glyph, red = green = blue = one
- 使用8bit来编码打包的字形和轮廓: alpha = glyph + outline
- 打包字形纹理不带轮廓: alpha = glyph
文件格式(File format)
最后你可以选择字体描述文件和纹理文件的格式。绝大多数情况下是个按需选择的问题,而不是说某一个会优于另一个。然而如果你想节省磁盘空间,应当选择二进制描述文件和png纹理。
File format
生成的字体描述文件的内容。
info
此标签包含字体是如何生成的等信息。
标签 | 描述 |
---|---|
face | 使用的true type 字体的名称 |
size | true type字体的大小 |
bold | 字体是粗体 |
italic | 字体是斜体 |
charset | OEM字符集的名称(如不使用unicode) |
unicode | 设为1表示使用unicode字符集 |
stretchH | 字符高度延伸比例,100%表示不延伸 |
smooth | 设为1表示开启平滑 |
aa | 使用的超采样的级别,1表示不使用超采样 |
padding | 每个字符的内间距 (up, right, down, left) |
spacing | 字符的间距 (horizontal, vertical). |
outline | 每个字符的轮廓宽度 |
common
此标签包含所有字符的共用信息。
标签 | 描述 |
---|---|
lineHeight | 以像素为单位的两行文本的距离 |
base | 从该行的顶部到字符基部的像素数(参见下图,两条水平虚线的距离) |
scaleW | 纹理的宽度,用来确定字符图片的x坐标 |
scaleH | 纹理的高度,用来确定字符图片的y坐标 |
pages | 字体包含的纹理的页数 |
packed | 如果黑白的字符打包放入每个纹理通道中,则会将其设为1。这种情况下alphaChnl用来描述各通道存储的内容 |
alphaChnl | 如果存储glyph数据则设置为0,存储outline则设为1,存储glyph + outline则设为2,若通道设为设为zero则设为3,如设为one则设为4 |
redChnl | 如果存储glyph数据则设置为0,存储outline则设为1,存储glyph + outline则设为2,若通道设为设为zero则设为3,如设为one则设为4 |
greenChnl | 如果存储glyph数据则设置为0,存储outline则设为1,存储glyph + outline则设为2,若通道设为设为zero则设为3,如设为one则设为4 |
blueChnl | 如果存储glyph数据则设置为0,存储outline则设为1,存储glyph + outline则设为2,若通道设为设为zero则设为3,如设为one则设为4 |
page
此标签定义纹理文件的名称。字体中的每一页会对应有一个此标签。
标签 | 描述 |
---|---|
id | 页面id |
file | 纹理文件的名称 |
char
此标签描述字体中的字符。字体中包含的每一个字符会对应有一个此标签。
标签 | 描述 |
---|---|
id | 字符的id |
x | 纹理中字符图片的左侧位置 |
y | 纹理中字符图片的顶部位置 |
width | 纹理中字符图片的宽度 |
height | 纹理中字符图片的高度 |
xoffset | 当复制纹理中图片到屏幕时,需要从当前位置偏移的距离 |
yoffset | 当复制纹理中图片到屏幕时,需要从当前位置偏移的距离 |
xadvance | 在绘制字体之后,当前位置需要向后推进的距离 |
page | 包含字符图片的纹理页面 |
chnl | 包含有字符图片的纹理通道(1 = blue, 2 = green, 4 = red, 8 = alpha, 15 = all channels) |
字偶距(kerning)
字偶距信息用来调整某些特定字符的间距,如某些字符会比其它字符放置得更靠近彼此。
标签 | 描述 |
---|---|
first | 第一个字符id |
second | 第二个字符id |
amount | 当在紧接着第一个字符绘制第二个字符时x位置应当做出的调整量。 |