V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
rv54ntjwfm3ug8
V2EX  ›  问与答

为什么跨平台框架复杂 UI 都会卡顿,而跨平台游戏引擎不会呢?

  •  1
     
  •   rv54ntjwfm3ug8 · 2021-05-13 13:13:21 +08:00 via iPhone · 1736 次点击
    这是一个创建于 1072 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近用 Flutter 和 React Native 写了几个复杂的 UI Demo,发现都很卡顿,一部分动画根本无法实现,用户体验极差。大部分游戏引擎都是跨平台的,为什么没有这种情况?
    13 条回复    2021-05-14 12:45:14 +08:00
    loginbygoogle
        1
    loginbygoogle  
       2021-05-13 13:19:04 +08:00
    反思一下自己的水平是不是有问题
    wvitas
        2
    wvitas  
       2021-05-13 13:19:49 +08:00
    你是用的 Release 么,Flutter release 的话还是相对很流畅的,当然与原生比还是有些许差距
    rv54ntjwfm3ug8
        3
    rv54ntjwfm3ug8  
    OP
       2021-05-13 13:20:11 +08:00 via iPhone   ❤️ 1
    @loginbygoogle #1 iPad Pro,连官方 Demo 都有肉眼可见掉帧
    TangMonk
        4
    TangMonk  
       2021-05-13 13:22:55 +08:00 via iPhone
    Unity3d 的跨平台 UI: UIElement 真的很强大,连 swicth, xbox 都跨平台,而且很流畅
    liprais
        5
    liprais  
       2021-05-13 13:49:04 +08:00   ❤️ 1
    白嫖的能跟付费的比么....
    shanghai1998
        6
    shanghai1998  
       2021-05-13 13:55:19 +08:00
    demo 需要优化优化
    ch2
        7
    ch2  
       2021-05-13 14:00:23 +08:00 via iPhone
    游戏有各种成熟的优化办法,可以靠美工欺骗而不用实际做那么多计算
    ipwx
        8
    ipwx  
       2021-05-13 14:03:12 +08:00
    渲染的水很深啊,OpenGL 和 DirectX 不是狼得虚名
    wdhwg001
        9
    wdhwg001  
       2021-05-13 14:27:24 +08:00   ❤️ 4
    就是因为 UI 更复杂啊,UI 大部分都很不方便硬件加速。
    举个例子,你看在 UI 里几乎滥用了的高斯模糊,哪个游戏敢这么搞?分分钟卡爆的。
    还有 UI 通常来说意味着大量的矢量文字渲染,这东西,如果你搞过 Unity 的话就知道其实也挺吃力的。
    并且,UI 不像游戏,游戏的输入是简单的,WASD 转转鼠标就行了,交互的主体无非就是相机和主角,而 UI 几乎全部都需要响应输入,这使得多线程和 GPU 并行化非常难搞。现代的显卡可以很轻易地渲染粒子一类的复杂转场,但前提是输入是一次性的,因为通讯延迟很高,并且很难进行预先计算。
    而且,写游戏的时候你可以去主动干涉和调整 Shader,但是在使用 Flutter 的时候就没那么幸运了,只能靠 Flutter 翻译成 Skia 再翻译成 Shader,底层被层层封装起来了,效率自然会进一步下滑。
    wdhwg001
        10
    wdhwg001  
       2021-05-13 14:35:27 +08:00
    再举一个,比如 UI 里非常常见的圆角矩形矢量,在游戏里就意味着成堆的多边形。
    还有比如 UI 里也很常见的各种 PNG 半透明,在游戏里首先解码 PNG 就已经很沉重了(可以了解一下游戏材质是怎样压缩的,这些压缩基本都依赖显卡的硬件支持才得以实现),然后还要处理半透明排序。

    如果你是纯标量 UI,就像 Unity 那种的,以标量为主的 UI,并且交互输入就像游戏按键那样简单的化,那在进行了恰当的纹理优化的情况下确实可以直接达到不错的渲染效率,并且你也不需要那么复杂的库和框架了,Flutter 和 Skia 设计之初就是为了支持矢量的。
    murmur
        11
    murmur  
       2021-05-13 14:46:24 +08:00
    @loginbygoogle 这话从何说起,不就是因为做不起 native 才选 flutter 、rn 这种跨平台框架,如果这些东西还要 native 程序员来优化,要他何用,不如直接 native,或者 native+webview
    shpkng
        12
    shpkng  
       2021-05-13 14:48:40 +08:00
    游戏 UI 做不好照样很卡
    游戏引擎的优势在于能充分利用 GPU,并且有很多优化的奇技淫巧,而你能见到的游戏,大概都是经过很多轮优化的
    但是实际上 UI 的开销在游戏里还是非常大的,甚至会成为性能瓶颈
    loginbygoogle
        13
    loginbygoogle  
       2021-05-14 12:45:14 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   927 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:18 · PVG 04:18 · LAX 13:18 · JFK 16:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.