Unreal和基于DOTS的Unity相比哪个更快?Unreal中是否有与DOTS等价的系统或技术?
Unreal和基于DOTS的Unity相比哪个更快?Unreal中是否有与DOTS等价的系统或技术? UE没有类DOTS的方案,虽然编辑器也有组件概念,但那仅是一个逻辑层面的概念,并不是ECS,引擎数据结构还是传统OO继承结构。 UE近些年的方向在朝着把pipeline,gpu driven化,并且进一步的做到跨平台gpu driven化,近些年更新的feature一步步支持了 gpu scene、virtual texture,大量的cpu逻辑计算转移到compute shader等,这些都是gpu driven的前置工作,现阶段要想把管线gpu driven化已经完全具备前置条件了,当然很多人一定会质疑工程量的繁琐程度,请不要跟风一些诸如“改不动ue就是你菜”之类的幼稚言论,作为开发者我们应该能够清楚的看到ue近些年的飞速成长,gpu driven化的技术方向是非常清晰明确的,但现阶段也确实遗留了非常多的细节问题待解决,例如:gpu scene buffer已经很臃肿了,但还不够,还要继续塞indirect buffer + instance + lod等信息;culling要想也搬到compute shader上需要干掉custumed culling的功能,等等。相信这些都会在不久未来有一些阉割取舍的解决方案的。说完ue的gpu driven方向,再来说说dots,dots可以优秀的解决cache miss、多线程、数据逻辑分离等问题,但这仅是cpu层面的,把unity dots和ue gpu driven方向放在一起比较,本质上其实是冲突的,一个是解决cpu层面的问题,一个是利用 gpu 层面高度并行化。dots更适合解决逻辑层性能瓶颈,而ue这些年一直专注在pipeline层的性能方向上。这个问题理解起来,就好比让你写一个 pipeline,如果你决定把它gpu driven化,你应该把逻辑大量的转移到compute shader上才对,基本不会用上ecs的相关技术栈,起码ecs并不是必备的基础结构框架。我倒是觉得dots其实可以拓展到gpu框架设计上,在umd设备上共享内存,而不必upload cpu memory to gpu,实现gpu端的ecs,专注在异构设备并行计算上,未来会有非常大的潜力。 UE4可以做,至少ECS肯定是能做的,我之前尝试搞过,本身原生就有script struct可以拿来当component,搭配FChunkArray可以造出来类似unityECS的Archetype内存结构,TaskGraph也比UnityECS的多线程更强大一些,反正ECS该有的底层设施都有了,就缺一个把这些设施整合起来的模块。另外引擎里也有很多实现用到了类似思想,推荐看看引擎粒子系统代码,内部内存和管理方式就是一个高度类似ECS的架构 去年和某大佬讨论过这个问题,有一个比较简单的结论。
1、做了DOTS的GameObjects迭代一定很快。
2、但是Unreal没傻到所有东西都扔到Actor(GameObjects)粒度去迭代,逐类型逐数学计算进行Bacth优化目前还没有看到瓶颈(我们通常说的传统优化方式)。
页:
[1]