前言
Unity 今年正式推出了2017的新版本,Unreal 也已发布到了4.17,Unity持续保持着极高的市场占有量的同时,也有越来越多的国内开发团队选择Unreal进行开发。传统来讲,Unity对移动平台的支持优秀,而Unreal更适合制作3A大作。但是随着引擎的几次重大更新,Unity同样支持了很多优秀效果,随着手机性能的增强,同时有很多大团队选择Unreal开发了优秀的移动平台作品。故在此尽量详细记录引擎间的对比,以帮助各位更好的选择适合自己的开发引擎。(文章中出现的特性有不了解的可以在评论里询问)
功能性
我先从功能性谈起,这部分会包括引擎实际支持的特性和功能。
图形渲染
PBR 基于物理的光照模型
两种引擎都支持。
GI全局光照
都支持
SSS材质 次表面散射
Unreal支持,Unity需要自己写Shader
延迟渲染
Unity 可选择正向或延迟,Unreal官方文档写固定为延迟渲染,未验证
GPU粒子
Unreal支持,Unity不支持,可以插件或者调用原生API实现(官方文档未发现GPU的介绍,百度到默认是不支持)
后处理特效
Unreal支持很多种,Unity可导入相机特效脚本,支持基本的,可以自己写
体积雾&体积光
Unreal在近期版本添加支持,Unity不支持,可以使用插件
阴影
Unreal做了很多阴影优化,Unity没有,但是性能较好,效果较差
HDR
都支持
总结
两个引擎对当今基本成熟的渲染技术基本上都支持,区别在Unreal仍然原生支持了很多效果拔群但是消耗同样恐怖的特性,Unity则未做原生支持,可以用插件的形式实现。但是插件的代码质量良莠不齐,好的插件正版又很昂贵,基本不会去在项目中选择。
物理引擎
Unity与Unreal底层的物理引擎都使用了Nvidia 的 Physx ,Unity是3.3版本,Unreal是3.4版本,但是Unity的Physx只集成了核心内容,下面列出其中不支持的功能:
APEX 可破坏物
Unreal支持部分APEX可破坏资源的导入,Unity完全不支持(相关插件也没找到)
Flex流体
Unreal可以通过合并Nvidia的分支支持,Unity可以购买插件
载具支持
Unreal原生支持载具制作,Unity只具备WheelCollider,需要自己拼装或使用插件
物理资源
Unreal提供PhAT的物理资源编辑器
布料模拟、射线投射、物理粒子、复杂碰撞、物理步长等
都具备
总结
在物理引擎上两个引擎相差还是比较大的,次世代游戏吸引人的高自由度破坏和真实的流体物理Unity都不支持,如果有相关需求还是建议不要重新研究算法,直接使用完整的Physx。
动画
混合动画
都支持
骨骼动画
都支持
IK反向动力学
Unreal原生支持,Unity需插件
布娃娃系统
都支持
总结
在动画模块两种引擎支持基本一致,除了IK的功能,IK在游戏开发中是个很重要的功能,但是Unity也提供了优化IK的插件
地形
Unreal的地形系统比Unity强大很多,主要表现在可支持分层材质、分层物理材质、最大精度为8192x8192的高度图、LOD插值、LOD灯光、程序化植被,可以说Unity的地形系统完全是个简单版,同时Unreal原生支持流关卡,如果想做开放世界或者大地图的话,Unreal可以比Unity少付出很多劳动力
CG制作及相机动画
Unity2017开始支持、Unreal支持
框架
多线程支持
Unity只支持非MONO类的多线程,Unreal支持。各有优势,Unreal线程不好管理,Unity有很多费时操作无法放到多线程。
模块化
都采用了ECS的模块化
使用性
这一模块集中关注开发者使用引擎的难易
开发语言
Unity使用C#(请忽略js),Unreal使用C++(同样请忽略蓝图),开发者可选择自己熟悉的语言,个人感觉C#使用时更加直观且面向对象,C++开发难度相当大
Shader
Unity使用CG语言编写Shader,Unreal多用蓝图完成Shader编写,Unity也可食用ShaderForge等插件,各有优势
编辑器使用
Unity精简,Unreal复杂但详细
说一说蓝图
这个东西可以方便策划和美术对一些行为树脚本、模型参数进行修改,如果用来写逻辑的话不好追踪也不好优化维护,请程序员拒绝他。
使用环境
选择Unreal的话请确保你的显卡、硬盘、内存、CPU都为高水准设备,且有稳定的翻墙手段
结论
与Unity相比,Unreal具备很多很酷的效果,但是使用难度同样倍增,包括教程少,问题解决经验少等等。如果没有游戏开发经验的话,建议从Unity开始学起。同样如果你的项目中不需要使用上文列举的特性的话,建议使用Unity。现在有很多团队已使用Unreal为噱头,但实际上并没有使用到Unreal优势的特性,这是舍本逐末的。另外一些团队认为Unity的插件足够支撑起更多强大的功能,这也是不正确的。首先第三方代码涉及版权问题。而且如果插件不开源的话,无法追踪代码分析和优化性能。且使用插件性能总归是不如原生代码支持的。