当前位置: 首页 > 工具软件 > KlayGE > 使用案例 >

KlayGE游戏引擎

白高逸
2023-12-01
                 

概览

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 releasebjam --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的功能。

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

愿望列表

矢量纹理

直接在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。

KlayGE 3.12.0 released today! The highlight feature of this version is Real-time Global Illumination. The main updates are:

  • Support global illumination
  • Including third party libs and compiling script
  • Add Maya exporter
  • Support Dual Paraboloid Shadow Map
  • Add BC1-BC5 texture compression functions
  • Add cmake script
  • Support filmic tonemapping
  • Support FXAA and Temporal AA

Many features of KlayGE 3.12.0 is done by team members. Thanks atyuwen‘s GI. Thanks Ray, Xiaoyang, honyeung Lau‘s Maya exporter. Thanks windameister’s DPSM. Thanks Shunbin, Peng‘s FXAA and Temporal AA. Thanks Ray‘s cmake script.

Download KlayGE 3.12.0 here.


           

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

 类似资料: