高性能跨平台渲染引擎系列一: 跨平台渲染引擎简介

引言:

      一直工作比较忙,很久就想写点东西做个备忘,拖延至今。本系列也期望督促自己坚持记录分享,文中如有笔误或者理解偏差,欢迎各位指正交流。也期望未来基于该系列文章的相关代码同步到git上,最终完成一款高性能跨平台3D渲染引擎;

     何为3D渲染引擎,借用百度百科的解释吧:

       3D引擎作为一个名词已经存在了很多年,但即使是一些专业的引擎设计师,也很难就它的定义达成一个共识。通常来说,3D引擎作为一种底层工具支持着高层的图形软件开发。你可以把它看成是对3D API的封装,对一些图形通用算法的封装,对一些底层工具的封装。我无法准确的定义3D引擎的含义和作用,因为针对不同的用户和开发项目,3D引擎完成的功能可能都有不同。因此,我将从功能的角度来定义3D引擎,这种定义法也许能更确切的表达出一个3D引擎的真实含义。

功能具备:数据管理、渲染器、交互能力。

      本文作为高性能跨平台渲染引擎第一节,主要跟大家一起分享一下现有渲染引擎(主要支持跨平台的也就是底层是C++或C语言实现),大家可以通过给出的链接下载尝试使用学习一下,再接下来章节主要分享OpenGL|ES渲染管线、3D高性能渲染引擎架构、vulkan渲染管线、GPU、基于GPU的camera数据处理等相关知识点。

免费引擎:

      免费3D渲染引擎有上百款,大家可自行查阅到或者看以前分享的https://mp.csdn.net/postedit/50904465 ,这里仅仅列举几款比较常用的,在文档以及使用方面比较广泛的几款供学习。

引擎名称 特性 链接
OGRE

MIT许可

证;面向对象,插件扩展、文档丰富;支持脚本、物理碰撞检测等特性比较全面,稳定性较好,但是上手有点难度;

https://www.ogre3d.org/
Irrlicht zlib/libpng许可证,面向对象、文档丰富以及可以找到一些相关编辑器,特性比较全面,稳定性较好,比较容易上手; http://irrlicht.sourceforge.net/

Godot

MIT许可证,具有灵活编辑器、可用于开发2D、3D、支持脚本、可以一键部署到多个平台,有着比较完整的文档支持; https://github.com/godotengine/godot
Horde3D/Urho3D MIT许可证,Urho3D基于Ogre跟horde3d,支持2D、3D,代码质量较高、架构清晰易懂包含PBR等特性,有简单场景编辑器 https://urho3d.github.io/
GamePlay Apache2.0许可协议;由黑莓推出,代码也具有比较好的借鉴参考意义; http://www.gameplay3d.io/

商业引擎:

引擎 特性 网站
Unity

手游的第一选择,有很多的教程和文档(特别对于入门级开发者);

使用C#和JavaScript编码(C++可以在特定领域使用,但并不推荐);

比较友好,可用插件较多,开发效率高;

简易且直观的UI界面及易上手学习设置;

适用用低配置的硬件。


UE

入门级的开发者可以在网上找到很多教程和文档;

有专用的设计资源和优化公司,打造高端和沉浸式VR;

使用蓝图(可视化编程)。拖拽节点和定制C++代码。然而,并非听起来这么容易,蓝图有自身的学习曲线;

免费;

可预先构建框架,快速创建环境和粒子系统,百万级渲染;

更好的画质,材质编辑器较好;

引擎的源代码可以从Github开源社区下载,意味着开发者实质上可以修改任何任何东西,包括物理引擎、渲染和图形用户界面。

 

游戏以及使用的引擎

引擎 游戏 公司
Nebula Device 3 黑暗之眼 Radon Labs
GoldSrc 半条命 Valve
SAGE 引擎 命令与征服
命令与征服3:泰伯利亚战争
魔戒:中土大战II
EA
Source引擎 半条命2
Sin Episodes
魔法门之黑暗弥赛亚
Valve;
Ritual Entertainment;
Arkane Studios
CryENGINE 孤岛惊魂 Crytek
CryENGINE2 孤岛危机 Crytek
Essence 引擎 英雄连
英雄连:对立前线
Relic Entertainment
Scimitar 刺客信条 育碧公司
Alamo 星球大战:帝国战争
星球大战:帝国战争-堕落之军
宇宙战争:地球突击战
Petroglyph
Unreal Engine 3 虚幻竞技场3 Epic Games
Doom 3 引擎 毁灭战士3
雷神之锤4
深入敌后:雷神战争
Id Software
Neon 引擎 闪点行动2极速房车赛 Codemasters
GFX3D 复活 (游戏)天骄 目标软件公司

总结

      对渲染感兴趣的,可以针对以上1-2款渲染引擎进行分析学习,相信很快就可以上手了。不过可能会存在疑问,市面上这么多开源渲染引擎了,为啥还需要自己再写一套?是否有必要?

     其实这个问题在于如何看待,对于是否开发一款自研引擎,主要通过如下几方面做权衡吧:

     (1)收益

        也就是你在一个项目中用到3D渲染的时候,首先需要评估现有的引擎是否能够满足项目需求,比如有的项目要求渲染引擎高效、精悍,编译后只有几百K或者2M以内,那这样很多开源引擎就满足不了了;

     (2)意义

       因为开发一款3D引擎需要比较大的人力与精力,而且需要大量的工具链做支持,这些都得作为考虑,因为一款灭有工具链(比如编辑器)支持的引擎,很难比较高的提高开发效率,毕竟引擎是为了提升开发效率,同时也会有非RD使用,所以比较友好的工具链是必须的。

      再就是自研引擎并不能带来长期的技术储备,这点不如有大量学习资料的商业引擎,掌握后可以在不同企业之间运用,但是你是本着做平台的情怀的话,自研引擎还是很有优势的,你的影响力足够大,可以吸引很多人在你的平台制作case。

     (3)如何实现

      这就是需要根据对引擎的定位,设计可行的架构,其实首要的还是实现,先实现再谈架构,因为实现之前比较难想清楚具体的架构,花费很多精力做一个自以为完美的架构设计,后来可能会因为性能或者算法实现推翻你的架构,当然对于多次写过3D引擎的,一开始的架构规划可能就直接决定引擎的性能了。


     接下来章节主要介绍渲染引擎常用的基本模块功能,以及我目前认为还可以的架构。当然选择跨平台,就以为的底层需要基于C/C++实现,OpenGLES作为渲染管线,当然后期可以基于不同平台自动支持其他高效渲染管线,比如X86下的DX、Android的下的Vulkan以及mac ios下的metal等。

     后期也会对OpenGL、vulkan等进行简单介绍、以及基于GPU的视频特效以及视觉算法的处理。通过本系列分享可以对基本的3D渲染有比较好的了解。

      

猜你喜欢

转载自blog.csdn.net/jaccen/article/details/81000657