Urho3D简介

 

简介

 

Urho3D是一个轻量级、跨平台的C++免费开源游戏引擎,在MIT许可协议下发布。极大地吸收了Ogre(http://www.ogre3d.org)和Horde3D(http://www.horde3d.org)的特点。虽然借鉴了Ogre,但代码远比OGRE 1.x的清新和简洁,效率也远比Ogre 1.x好。据说Ogre 2.x代码非常简洁和高效,但是正在开发中,先不做评价。先上图,有个直观的感受。

 

 

基于物理的材质

 

 

场景编辑器

 

特性

 

通用

 

  • 运行时使用c++语言和面向对象编程。

  • 基于任务的多线程。

  • 层式性能分析工具。

  • 场景和对象支持保存和读取多种格式:二进制、XML和JSON。

  • 多线程工作队列等任务的剔除和动画更新。

  • 支持Unicode字符串。

  • 可以从Open Asset Import Library支持的格式中读取模型、场景、动画和材质;也可以从OGRE支持的mesh.xml和skeleton.xml文件里读取模型和动画数据。

  • 资源后台加载。

  • 支持多种IDE:Visual Studio、Xcode、Eclipse、CodeBlocks、CodeLite、QtCreator、CLion。

  • 支持的编译器工具链包括:MSVC、GCC、Clang、MinGW以及它们的交叉编译派生工具。

  • 支持32和64位编译。

  • 可以编译成单个外部库文件(以静态或者动态的方式链接)。

  • 使用SDL 2.0支持跨平台(目前可以运行在Windows、Linux、macOS、iOS、tvOSnew、Android、Raspberry Pi,还包括其他的通用ARM主板,以及使用Emscripten工具链支持Web)。

    图形和图像

  • 支持所有通用的图形API:Direct3D 9、Direct3D 11、OpenGL 2.0 or 3.2、OpenGL ES 2.0和WebGL。

  • 着色语言使用HLSL或者GLSL,支持HLSL字节码缓存(只在第一次用到时编译一次,将编译结果存到本地硬盘上,之后使用直接读取,从而节省加载时间)。

  • 使用xml灵活定制渲染流程:向前渲染或者延迟渲染,启用哪些后期处理。默认实现了前向着色、light pre-pass(也就是延迟光照)和延迟着色。

  • 支持点光源、聚光灯和方向光。

  • 所有光源种类都支持阴影;方向光使用级联阴影(cascaded shadow maps);除了深度偏移还支持法线偏移(normal offsetadjustment)。

  • 在支持SM3的硬件上自动合批。

  • 粒子渲染。

  • 投影纹理。

  • 环境&雾区。

  • 高度雾。

  • 地形系统支持层级细化。

  • 静态和蒙皮贴花。

  • 附加的视口渲染(实现反射等)。

  • 几何形状、材质和动画都支持LOD。

  • 后期处理。

  • HDR和PBR。

  • 能融合进3D场景的2D精灵和粒子。

  • 使用stb_image加载图片文件;支持DDS、KTX、PVR压缩纹理。

    场景管理

  • 基于组件的场景模型。

  • 场景加载/保存在XML和二进制格式。

  • 基于八叉树的场景管理和剔除。

  • 使用软件光栅化实现了遮挡剔除。

    动画

  • 硬件蒙皮的骨骼动画。

  • 场景节点动画。

  • 顶点变形动画。

  • 对象属性的关键帧动画。

  • 动画混合。

    物理

  • 使用Bullet作为物理引擎。

  • 2D物理使用Box2D。

    网络

  • UDP客户端-服务器网络使用kNet库。

  • 使用kNet支持HTTP请求。

  • 场景属性支持网络复制。

    人工智能

  • 使用Recast/Detour库,支持寻路和人群模拟。

    声音

  • 2 D和3 D的音频回放。

  • 使用stb_vorbis支持Ogg Vorbis;支持WAV。

    用户界面

  • 内置的UI系统。

  • 使用XML描述UI布局。

  • 使用FreeType渲染TrueType字体;支持AngelCode位图字体。

  • 本地化和数据子系统。

    脚本

  • 支持AngelScript,这是官方推荐的。

  • 除了Web平台,在所有平台上可选用使用Lua或者LuaJIT实现的脚本接口。

  • 场景组件可以在脚本中定义。

    输入

  • 支持键盘、鼠标、操纵杆和触摸输入。

    工具和编辑器

  • 使用脚本实现的场景编辑器和UI布局编辑器,具有撤销和重做功能。

  • 内容导入使用开放资产导入库。

     

 

效果

 

 

图1动画模型

 

 

图2多个点光源

 

 

图3静态场景

 

 

图4小地图(多台摄像机,还有Bloom效果)

 

 

图5物理碰撞压力测试,这么多立方体刚体,帧率没有明显下降

 

 

图6触发和布娃娃系统

 

 

图7汽车物理

 

 

图8水面渲染

 

 

图10一个忍者打雪仗游戏,这个引擎的人工智能做的不错

 

 

图11粒子系统

 

 

图12各种2D物理

 

 

图13 2D动画

 

 

图14 2D物理

 

 

图15更炫的粒子特效

 

 

图16 2D物理

 

个人评价

 

优点:

 

1、基于MIT协议的开源引擎,限制非常小。

 

2、所包含的特性非常全面。Ogre只是个渲染引擎,虽然有众多的插件,但是插件本身大都质量很低,另外要想做游戏,整合是个很大的工作量。

 

3、代码质量非常高。架构清晰容易拓展,代码简洁高效,包含PBR等诸多商业引擎最新特性。

 

4、有一个简单的场景编辑器,比起Godot的编辑器差了不少。编辑器是用Angel script写的,跟个普通游戏一样,在移动端也能运行,曾想着修改下是否以后也能在移动端上直接编辑游戏内容了,兴奋。

 

缺点:

 

1、像所有的免费开源引擎一样,大部分算法都达不到商用级别,需要魔改。

 

2、只有一个简单的编辑器,跟Unity这样工具链全面和易用性极高的商业引擎比起来差太远。

 

3、官方文档太少,社区还比较单薄,有问题可探讨的人不太多。

 

总结:

 

总的来说,在免费开源引擎里面,除了Godot,这是我目前见到的最好的引擎,各方面跟Unity的设计比较像。如果加大投入,开发出一个“开源的Unity”也不是什么问题。

 

还有个避不开的永恒的话题需要讨论,那就是使用商用引擎还是自研引擎开发游戏。没有绝对的好和坏,只有看是不是适合团队和项目。通用商用引擎的优点是实现的功能面广,工具链完整且易用,稳定性好。但是如果项目特殊需求多或者对技术水平要求苛刻,要求在某些方面深挖,就不如自研引擎灵活了。由于自研引擎有源码,且一般代码量少,所有模块都能完全掌控,只要有了方案,整合进引擎非常容易。而如果使用Unity这种没有源码的引擎,面对特殊需求只能用一些怪异的方式拼凑出来一个低效的方案,或者干脆劝说策划放弃。UE4虽然开源了,但是单单运行时就200万行,国内敢改底层的估计也就腾讯、网易这样的大厂了。概括来说就是,自研引擎是“倒吃甘蔗”,而使用商用引擎开发这个类型的项目正好相反。

 

当然,对于自研引擎来说,团队的技术实力也有一票否决权。如果引擎团队没有个有经验的负责人,或者公司舍不得投入资源,那千万不要染指自研引擎,还是乖乖地用Unity或者UE4做常规一些的项目吧。

 


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值