~炭炭~
发表于 2020-11-25 12:21
并不是大牛,第一次回答这种高端问题。
总觉得题主有点死抠细节。
写这篇回答的时候,我也并没有滚去看Unreal的源码查证。而且我自己也没见过Unity的源码并且对Unity完全不了解。
我觉得题主举的第一个例子中,如果Unreal通篇总共没几个地方用到FVector的operator[]重载的话,那这种写法也无伤大雅吧。只能说Unity的写法更优雅【然而对UE来说也许并没什么卵用。
谈架构不是谈代码是否“优雅”吧。其实题主抛弃Unreal4的渲染质量谈“架构”也算作弊吧。Unity不是也有材质系统么?造出跟Unreal类似的效果也不难?但是去看看同等效果下的效率啊。我猜肯定是Unreal完胜。
删答案了,没什么卵用。
可心
发表于 2020-11-25 12:21
也可能UE4是印度阿三代工的,Unity是北美程序员完成的!
charles00ok
发表于 2020-11-25 12:22
我个人觉得UE4源码更好一些咯
理由比较简单,
1.UE的架构是以高端设备和高端表现力为主,现在的高端手机跑UE还是不错的,等一年左右,按照现在硬件发展速度,移动平台性能也上来了。
2. 可拓展性,手上拿到了源代码至少安心啊,不会碰到有坑,还没发跳出来。
霸气的昵称
发表于 2020-11-25 12:23
连ue4都能被喷,题主要是看了cryengine那不是更得喷这是一坨什么狗屎了。
不要轻易否认比你强大得太多的人写出来的代码。
maaabc
发表于 2020-11-25 12:23
ltskr
发表于 2020-11-25 12:24
当然是Messiah好! Messiah 天下第一!
哦不对,好像比较范围我没看清楚,不好意思刚才条件反射了,重新来过。
当然是Unity好 ! Unity 天下第一 !
天之星
发表于 2020-11-25 12:24
个人觉得UE这么写肯定是有道理的,我觉得性能好的代码看起来总是丑陋的。比如他用三个浮点变量加分支,和数组比,不见得性能会差,要知道树组的寻址也是要进行一次加法运算的。因为很久没接触C++了,连一个Date.now()都不知道怎么实现,所以用node.js试了一下,毕竟是V8引擎,应该差距不大吧,下面是我测试的截图和代码,结论是数组确实比if分支慢:
cs6182890
发表于 2020-11-25 12:25
内存对齐了解下?
如果数组在非内存对齐位开始 下标访问需要几次内存操作?
事实上对vector这种小对象if else并不会造成内存性能问题
提这个问题说明你压根不知道性能瓶颈在哪,如果性能差异只在于指令数量上,那可能所有引擎性能都没有差别了,就目前的用途,多几倍的时钟周期对人类根本没有差别
zhaib577118
发表于 2020-11-25 12:25
FVector还有更nb的swizzle支持写法,有什么用了,UB。(https://github.com/leohawke/LeoEngine/blob/1.4/LBase/lmathtype.hpp)
const float& operator[] (int i)const { DebugAssertIf (i < 0 || i > 2); return (&x); } 尽管这个写法也有争议,但是应该比union这种写法的争议更少。
201256851
发表于 2020-11-25 12:26
同是c++写的,unity的更容易读一些。