KlayGE游戏引擎
From KlayGE游戏引擎, post address http://www.klayge.org/about/features/转载请注明出处为KlayGE游戏引擎,本文地址为http://www.klayge.org/about/features/
概览
KlayGE是用于下一代游戏的一个完整的游戏开发框架。它是API无关的插件式结构,提供了很多先进技术,并且有无限的扩展性。
KlayGE的设计目的非常明确,用最先进的技术武装引擎。它所提供框架使游戏的开发、测试、移植得到简化。KlayGE的目标平台是当年发布的最高硬件到前一年发布的最低硬件。
图形
- 支持D3D11,OpenGL和OpenGL ES 2
- 采用fxml作为可渲染物体的特效脚本,可以直接把美工生成的特效导出使用
- Python脚本可以在运行期动态解释,所以修改脚本以后不需要重新编译
- 可以通过height map来建立地形场景
- 支持骨骼动画
- 硬件Occlusion culling
- 粒子系统
- Post processing技术
- 自适应硬件状态缓存和延迟更新机制
- 支持逐像素光照和渲染技术
- 基于distance的字体系统,兼有矢量和点阵的优点
- 支持Procedural texture
- 支持Subsurface Scattering,可用于渲染树叶、皮肤、玉器等半透明材质
- 支持PN Triangles技术,在运行期自动光滑低模
- 着色
- 包含常用操作的shader库
- 完全抽象出图形API
- 多遍渲染
- 完全支持可编程着色
- 可以使用多条渲染流
- 光照
- 动态光照
- 全方向shadow map
音频
- 支持各种平台的音频输出
- 支持3D声音定位和多普勒效应
- 输入格式支持Ogg Vorbis
- 支持流式播放
工具
- 法线图生成器,可以从高度图生成法线图
- 距离图生成器,可以从高度图或3D纹理生成距离图
- MeshML导出插件,从3DS Max导出模型
- OpenGL兼容性检测工具
- HDR压缩器,支持cubemap和2D HDR纹理的压缩
- Normal map压缩器,2:1或4:1的压缩率
- 基于distance的字体生成器,可以把矢量字体转换成引擎使用的字体格式
- FXML2Shader工具,把FXML的特效脚本转换成HLSL或Cg
程序特性
- 引擎是开放源代码的,包含了100%的引擎、工具的源代码
- 可扩展的、面向对象的C++引擎,带有用于静态和动态加载代码和资源的软件架构,易于移植和调试
- 用Python作为脚本语言,提供了对动态数据的自动支持,开发调试方便,并很容易和C++主程序配合工作
目录
- KlayGE是什么?
- KlayGE是你一个人开发的吗?
- 哪里能找到KlayGE的文档?
- 为什么选择了GPL?
- 为什么用Python而不是LUA?
- 为什么必须要有Shader Model 2.0及以上?
- KlayGE的网络部分如何?
- 编译例子的时候出现像这样的连接错误信息:“libcmtd.lib(dbgheap.obj) : error LNK2005: __CrtSetDbgFlag 已经在MSVCRTD.lib(MSVCR80D.dll) 中定义”,请问如何解决?
- Boost编译的时候应该用什么参数?
- 为什么在Visual Studio里运行例子的时候ResLoader::Load出现assert failed?
- 在编译的时候提示”‘yasm’ is not recognized as an internal or external command, operable program or batch file.”,如何解决?
问:KlayGE是什么?
答:KlayGE是一个开放源代码、跨平台的游戏引擎。它是用C++开发的,并使用Python作脚本语言。KlayGE在GPL协议下发行。
问:KlayGE是你一个人开发的吗?
答:是的。几乎所有的开发都是我一个人完成的。但在这个过程中使用了一些第三方的代码,比如7zip的解码部分。不少朋友也在开发的过程中给予了不可或缺的帮助。
问:哪里能找到KlayGE的文档?
答:目前KlayGE的文档仅限于Documentation下的文件。文档缺乏的原因主要是我没有足够的时间去写,另外我更希望用代码本身来自我诠释。
问:为什么选择了GPL?
答:在KlayGE 2.7之前使用的是LGPL协议,但后来为了保护它不被某些专有软件吞并,所以换成了GPL。
问:为什么用Python而不是LUA?
答:KlayGE 2.0之前(当时还叫作Clay! Engine),LUA是首选的脚本语言。LUA的优点是速度快,缺点是在C++中的调用极其麻烦,而且语言本身能力较弱。Python速度不如LUA, 但是语言能力强大得多,也不必写成栈式的调用方式,简洁得多。在KlayGE中,脚本不是为了效率而存在的,所以Python成了不二之选。
问:为什么必须要有Shader Model 2.0及以上?
答:KlayGE是一款面向高端的引擎,所以在一定程度上要用较高的配置,以满足先进技术的需要。另一方面,Shader Model 2.0并不算一个很高的要求,市面上的新显卡几乎都是支持Shader Model 3.0的。对于游戏开发者来说,如果现在还在使用不支持Shader Model 2.0的硬件,那只能说实在落后得太多了。
问:KlayGE的网络部分如何?
答:KlayGE中的网络是弱项,甚至可以说几乎无法使用。所以需要重新开发,或者使用别的网络库。
问:编译例子的时候出现像这样的连接错误信息:“libcmtd.lib(dbgheap.obj) : error LNK2005: __CrtSetDbgFlag 已经在MSVCRTD.lib(MSVCR80D.dll) 中定义”,请问如何解决?
答:由于KlayGE在VC下使用的运行库是多线程的DLL,所以需要把所有连接到exe的lib的运行库改为 多线程DLL(Project- >Properties->Configuration Properties->C/C++->Code Generation->RuntimeLibrary,选择Multi-threaded Debug DLL/Multi-threaded DLL)。
问:Boost编译的时候应该用什么参数?
答:Boost 1.36的编译参数可以通过bjam的命令行参数来设置,可以写一个批处理文件,内容是:
SET BZIP2_SOURCE="D:/bzip2-1.0.5" SET ZLIB_SOURCE="D:/zlib-1.2.3" SET ICU_PATH="D:/icu4c-3_6" bjam --toolset=msvc-9.0 --stagedir=./lib_vc9_x86 --builddir=./ address-model=32 link=shared runtime-link=shared threading=multi cxxflags=-wd4819 cxxflags=-wd4910 define=_CRT_SECURE_NO_DEPRECATE define=_SCL_SECURE_NO_DEPRECATE define=_SECURE_SCL=0 stage debug release bjam --toolset=msvc-9.0 --stagedir=./lib_vc9_x64 --builddir=./ address-model=64 link=shared runtime-link=shared threading=multi cxxflags=-wd4819 cxxflags=-wd4910 define=_CRT_SECURE_NO_DEPRECATE define=_SCL_SECURE_NO_DEPRECATE define=_SECURE_SCL=0 stage debug release
直接在boost的目录下运行这个批处理就可以编译出dll版本的boost库。
问:为什么在Visual Studio里运行例子的时候ResLoader::Load出现assert failed?
答:需要在Visual Studio中把工程的Working Directory设置成$(OutDir)。此问题在KlayGE 3.10中不再出现。
问:在编译的时候提示”‘yasm’ is not recognized as an internal or external command, operable program or batch file.”,如何解决?
答:根据设置,Visual Studio的编译工具必须能调用yasm才能编译.asm的文件。解决方法之一是把下载下来的yasm-X.X.X-winYY.exe(X表示版本 号,YY表示32或64)改名成yasm.exe,并拷贝到VC的bin目录下,比如”C:Program FilesMicrosoft Visual Studio 9.0VCbin”。(注:这个问题实际上不该出现在本FAQ中,因为这其实是个命令行调用的问题,谁都该会的。可悲于国内“开发者”的素质,竟然有 不少人都问了我该问题,使得我不得不将它写在这里。)此问题将在KlayGE 3.11中避免。
愿望列表
From KlayGE
这里列出了一些希望以后能加入KlayGE的功能。
愿望列表可以用来激励未来的工作。其中有些是很明确的做法,有些只是飘渺的想法,大部分则介于两者之间。同样,实现这些条目的工作量从对现有接口的小修改到大的研究项目都有。
愿望列表
矢量纹理
直接在texel上存储矢量参数,字体系统也可以建立在其之上。
软件渲染插件
类似于D3D10的软件渲染插件,用纯软件支持D3D10+的所有功能。
基于HTML5的UI
集成HTML5渲染器,可以直接用HTML5来作为UI的表达方式。
地形渲染
大规模地形渲染。
去除DirectShow
不使用DirectShow来播放视频和音频。备选方案之一是用.ogm作为容器格式,Theora作为视频编码,Vorbis作为音频编码,同时也支持字幕。
GPU上进行物理和数学计算
提出人:吴野
GPGPU的物理模拟和线性代数计算。
实时全局光照
提出人:吴野
实时计算全局光照。支持阴影、折射、反射、半透明和多次散射。
强大的内存管理器
支持跨越DLL边界的内存分配/清除、泄露检测和内存池。最好能Lock-free或Wait-free。
GPU音频处理
通过GPU处理音频(3D、特效),然后传给声卡播放。
Command buffer的记录和重放
把所有的DX/OGL API调用都在一个线程里捕捉,并可以在其它线程里重放。
实时Catmull-Clark细分
提出人:周波
实现Approximating Catmull-Clark Subdivision Surfaces with Bicubic Patches的GPU细分算法
正在做的
基于GPU的细分
在D3D11/D3D10(ATI)上支持硬件的细分,在D3D9/OpenGL上支持基于shader的细分。(D3D11的细分已经支持了)
移动平台支持
OpenGL ES 2.0插件和D3D mobile插件。(OpenGL ES 2.0插件已经完成)
已经完成
延迟着色
延迟着色的渲染系统,支持抗锯齿和透明。(作为KlayGE 3.8.0的一个例子)
深度剥离
屏幕空间环境遮挡
KlayGE 3.12.0在上半年的最后一天发布了!本版的亮点是支持实时全局光照。主要更新如下:
- 支持全局光照
- 包含第三方库及其编译脚本
- 增加了Maya导出插件
- 支持Dual Paraboloid Shadow Map
- 增加了多种模式的BC1-BC5纹理压缩函数
- 增加了cmake工程脚本
- 支持Filmic tonemapping
- 支持FXAA和Temporal AA
KlayGE 3.12.0的很多功能是由组员完成的。感谢吴彧文提供的GI,感谢王锐、朱晓阳、honyeung Lau提供的Maya插件,感谢张亚川提供的DPSM,感谢陈顺斌、郭鹏提供的FXAA和Temporal AA,感谢王锐提供的cmake工程脚本。更感谢大家这么多年来的支持和帮助!
从此处下载KlayGE 3.12.0。
Related posts:你可能感兴趣的:
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow