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做常规一些的项目吧。

 


06-24
<think>我们正在处理用户关于Urho3D的使用指南或教程的请求。根据提供的引用,我们可以整合以下信息:1.引用[1]提到UrhoSharp支持多种3D模型格式,并提供了AssetImporter和Blender加载项等工具来导入模型。2.引用[2]提供了获取Urho3D源码的方法:通过GitHub仓库下载或克隆。3.引用[3]和[5]提到一个基于Urho3D的C++体素引擎项目,并介绍了项目结构。4.引用[4]介绍了Urho3D是一个轻量级、跨平台的2D/3D游戏引擎,支持C++、AngelScript和Lua。用户需求:Urho3D使用指南或教程。回答结构:1.介绍Urho3D(基于引用[4])2.获取源码(基于引用[2])3.安装与配置(基于引用[4],并补充一般步骤)4.导入3D资产(基于引用[1])5.项目结构示例(基于引用[5])6.相关资源(教程、示例等)然后,生成相关问题。注意:引用标识要自然地添加在引用内容的末尾。</think>### Urho3D 使用指南与教程 Urho3D 是一个轻量级、跨平台的 2D/3D 游戏引擎,支持 Windows、macOS、Linux、iOS 和 Android 等平台。它主要使用 C++ 开发,同时提供 AngelScript 和 Lua 脚本支持[^4]。以下是关键使用步骤: #### 1. **获取源码与编译** - **源码下载**:访问 [Urho3D GitHub 仓库](https://github.com/urho3d/Urho3D),通过以下方式获取: ```bash git clone https://github.com/urho3d/Urho3D.git # 克隆仓库 ``` 或直接下载 ZIP 文件[^2]。 - **编译步骤**: 使用 CMake 生成构建文件: ```bash cd Urho3D mkdir build && cd build cmake .. -DURHO3D_OPENGL=ON # 启用OpenGL渲染 make -j4 # Linux/macOS编译 ``` Windows 用户可用 Visual Studio 打开生成的 `.sln` 文件编译。 #### 2. **导入 3D 资产** Urho3D 支持 FBX、OBJ、DAE、BLEND 等模型格式。推荐工具: - **AssetImporter**:命令行工具,将模型转换为 Urho3D 的二进制 `.mdl` 格式。 示例命令: ```bash AssetImporter model input.fbx output.mdl ``` - **Blender 插件**:直接通过 Blender 导出为 `.mdl` 格式[^1]。 资源网站参考:CGTrader、TurboSquid。 #### 3. **项目结构与配置** 典型项目目录(以体素引擎为例[^5]): ``` voxelengine_urho3d/ ├── Source/ # 核心代码 │ ├── Components/ # 引擎组件(物理、渲染等) │ └── Scenes/ # 场景脚本 ├── Resources/ # 资产目录 │ ├── Textures/ # 贴图 │ └── Models/ # 3D模型 ├── Scripts/ # Lua/AngelScript脚本 └── CMakeLists.txt # 构建配置文件 ``` 在 `CMakeLists.txt` 中添加项目依赖: ```cmake set(URHO3D_HOME "path/to/Urho3D") # 指定引擎路径 include_directories(${URHO3D_INCLUDE_DIRS}) ``` #### 4. **基础代码示例** 创建一个简单场景(C++): ```cpp #include <Urho3D/Engine/Application.h> using namespace Urho3D; class MyApp : public Application { public: void Start() override { // 创建场景 scene_ = new Scene(context_); // 添加摄像机 cameraNode_ = scene_->CreateChild("Camera"); cameraNode_->CreateComponent<Camera>(); // 渲染到窗口 GetSubsystem<Renderer>()->SetViewport(0, new Viewport(context_, scene_, cameraNode_->GetComponent<Camera>())); } private: SharedPtr<Scene> scene_; SharedPtr<Node> cameraNode_; }; URHO3D_DEFINE_APPLICATION_MAIN(MyApp) ``` #### 5. **学习资源推荐** - **官方文档**:[Urho3D 文档](https://urho3d.io/documentation/) - **教程案例**: - GitHub 示例项目:[voxelengine_urho3d](https://gitcode.com/gh_mirrors/voxelengine_urho3d)(体素引擎实现)[^3][^5] - 脚本教程:`Scripts/` 目录下的 Lua 示例(如 AI 控制、粒子系统)。 - **社区支持**:[Urho3D 论坛](https://discourse.urho3d.io/) ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值