KlayGE游戏引擎

 

概览

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++主程序配合工作

目录

  1. KlayGE是什么?
  2. KlayGE是你一个人开发的吗?
  3. 哪里能找到KlayGE的文档?
  4. 为什么选择了GPL?
  5. 为什么用Python而不是LUA?
  6. 为什么必须要有Shader Model 2.0及以上?
  7. KlayGE的网络部分如何?
  8. 编译例子的时候出现像这样的连接错误信息:“libcmtd.lib(dbgheap.obj) : error LNK2005: __CrtSetDbgFlag 已经在MSVCRTD.lib(MSVCR80D.dll) 中定义”,请问如何解决?
  9. Boost编译的时候应该用什么参数?
  10. 为什么在Visual Studio里运行例子的时候ResLoader::Load出现assert failed?
  11. 在编译的时候提示”‘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

 
Jump to: navigation, search

这里列出了一些希望以后能加入KlayGE的功能。

愿望列表可以用来激励未来的工作。其中有些是很明确的做法,有些只是飘渺的想法,大部分则介于两者之间。同样,实现这些条目的工作量从对现有接口的小修改到大的研究项目都有。

Contents

[hide]

愿望列表

矢量纹理

直接在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.7.0的一个例子

屏幕空间环境遮挡

SSAO来增加暗处的细节。(作为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。

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

posted on 2019-02-01 13:32  jack船长大哥  阅读(1284)  评论(0编辑  收藏  举报

导航