应用简介
KlayGE游戏引擎是一个跨平台、开源的游戏引擎,是用于下一代游戏的一个完整的游戏开发框架,用C++开发的,使用Python作脚本语言,采用API无关的插件式结构,提供了很多先进技术,并且有无限的扩展性,所提供框架使游戏的开发、测试、移植得到简化。
【功能特点】
1、图形
支持D3D 11.2,OpenGL 2.1-4.5和OpenGL ES 2.0-3.1
采用fxml作为可渲染物体的特效脚本,可以直接把美工生成的特效导出使用
Python脚本可以在运行期动态解释,所以修改脚本以后不需要重新编译
可以通过height map来建立地形场景
支持骨骼动画
硬件Occlusion culling
粒子系统
Post processing技术
自适应硬件状态缓存和延迟更新机制
支持逐像素光照和渲染技术
基于distance的字体系统,兼有矢量和点阵的优点
支持Procedural texture
支持Subsurface Scattering,可用于渲染树叶、皮肤、玉器等半透明材质
支持Phong tessellation技术,在运行期自动光滑低模
2、音频
支持各种平台的音频输出
支持3D声音定位和多普勒效应
输入格式支持Ogg Vorbis
支持流式播放
3、工具
法线图生成器,可以从高度图生成法线图
距离图生成器,可以从高度图或3D纹理生成距离图
MeshML导出插件,从3DS Max导出模型
OpenGL兼容性检测工具
HDR压缩器,支持cubemap和2D HDR纹理的压缩
Normal map压缩器,2:1或4:1的压缩率
基于distance的字体生成器,可以把矢量字体转换成引擎使用的字体格式
FXML2Shader工具,把FXML的特效脚本转换成HLSL或Cg
5、程序特性
引擎是开放源代码的,包含了100%的引擎、工具的源代码
可扩展的、面向对象的C++引擎,带有用于静态和动态加载代码和资源的软件架构,易于移植和调试
用Python作为脚本语言,提供了对动态数据的自动支持,开发调试方便,并很容易和C++主程序配合工作
【使用说明】
第一步:生成大位图
在KFontGen中,这一步是通过freetype读取矢量字体,渲染一张4096×4096的灰度图。
第二步:轮廓搜索
freetype生成的灰度图是经过光栅化的,也就是说字的轮廓和内部都进行了填充。我们只关心轮廓本身,所以在这一步,我们需要提取出它的轮廓,也就是同时满足
该元素的值不为0
该元素的8个相邻元素存在0
这两个条件的元素。把轮廓元素标识为1,其他标示为0,就可以提取到轮廓。
第三步:得到distance field
一般来说,目标字体大小远远小于4096×4096。所以这里需要把对上一步得到的大位图进行离散采样,得到目标字体大小的点阵。在默认情况 下,KFontGen生成的目标字体大小是32×32。也就是说,从(64, 64)开始,x和y方向分别每隔128采一个点。分别计算这些采样点到轮廓的最近距离,这样得到的就是一个32×32的distance field。同时,在采样的时候,根据步骤一得到的灰度图可以判断一个采样点是否在字内,如果在字内,这个距离就是正数,否则就是负数。由此可以得到所要 的signed distance field。
第四步:量化和压缩
上一步得到的distance field每一个元素都是个float的数据,需要量化成每个元素8位,以减少空间占用,加速渲染。量化之后的数据经过LZMA压缩后存入文件中。