说说我的理解吧,感觉下面的很多答主都没说到点子上。

先解释渲染与逻辑分离,这个方案早在上世界90年代的游戏《帝国时代》里面就有用到。当时看完论文我就有很多疑惑,由于渲染要根据逻辑数据执行,那么就算把二者拆离,只要逻辑帧不运行,渲染再多跑多少帧那下一个逻辑帧来之前不还是显示静止的画面么?比如下图第二个例子,高延迟下(1000ms)执行一个逻辑帧以及19个渲染帧,假如逻辑帧执行完算出A对象的位置为(0,0,1),那么后面19帧渲染不还是拿(0,0,1)的位置进行渲染么?

后来我思考得到结论,其实这个例子中的1000ms都属于一个逻辑帧,而不只是最前面的那一帧,但是涉及到游戏核心逻辑的计算确实只在第一帧执行。渲染与逻辑分离并不是说逻辑执行完各个端的Input逻辑后就完全不执行任何逻辑了。而是在当前逻辑帧先处理完玩家行为逻辑后,游戏还可以在所谓的“渲染帧”里面执行插值的“逻辑”来平滑对象的位置,但是后续的渲染帧里面并不会执行任何和玩家行为有关的逻辑。也就是渲染帧不会有影响到游戏玩法逻辑的计算,也不会去修改物理碰撞位置。在虚幻引擎里面(采用状态同步,不过思路一致),对象的平滑是通过胶囊体和Mesh模型计算分离而实现的,也就是说一个对象在收到服务器数据并等待下次数据前会去用Mesh模型去进行插值(类比渲染帧),而胶囊体的位置在刚收到数据后设置过一次后就不再变化过(类似逻辑帧)。

回到题主的问题:

1.我个人觉得王者荣耀这样的moba游戏一般不需要那么高精度的碰撞检测,也就是没有必要严格按照动画渲染的位置进行碰撞检测。在稳定帧率以及网络比较稳定的情况下不会向我上面图画那样逻辑位置与渲染位置差距那么大(把蓝色方块想象成一个武器),所以你把武器碰撞挂在动画骨骼上用逻辑帧去检测就可以了(渲染帧不会修改物理碰撞盒的位置)。如果想让动画与碰撞保持一致,可能需要提高逻辑帧的计算频率,像其他答主说的那样事先设置好武器的位置变化曲线我认为并不能做到完全一致。

2.为什么有“我”的概念?你如果做过网络游戏就会明白,本地玩家/本地其他玩家的同步策略一般是不同的。因为你在执行操作的时候可以立刻在本地响应并发送给服务器,如果服务器认为你的操作合法你就可以继续执行,而其他的玩家行为是通过服务器转发同步过来的,所以必定有延迟(其他客户端->服务器->本地客户端)。根据这种情况,我们会制定各种策略来优化玩家的体验(本地玩家行为立刻响应就是一种,我们一般叫预测回滚)。在虚幻引擎中,我们常常会看到这样的代码

if(GetLocalRole() == ROLE_AUTONOMOUS) //如果角色是本地玩家控制

if(GetLocalRole() == ROLE_SIMULATS)//如果角色是其他玩家控制

但是在帧同步中,我们不希望有这种区分,因为无论是本地玩家还是其他的玩家都是“收到Input->执行对应的逻辑”。所以,我们不应该假设当前的对象属于哪种玩家, 也不应该出现类似上面的判断代码并进入不同的分支。

最后一个问题,由于没有实际做MOBA的项目经验,这里就不多说了。

帧同步分离逻辑层和渲染层_帧同步如何分离逻辑和渲染?相关推荐

  1. vue数据改变渲染问题_解决Vue中页面成功渲染数据undefined的问题

    前言 这个标题不太好取. 本文需要下面的知识:https://zhuanlan.zhihu.com/p/260811233​zhuanlan.zhihu.com 问题描述 我最近的一个功能需求是通过a ...

  2. 怎么看vray渲染进度_【3dmax疑难问题】渲染有进度条但渲染窗口不见了

    渲染的时候进度条出来了,但是没有渲染窗口,这种情况怎么处理呢? 下面来分析下出现这个问题的几个可能. 一.渲染帧窗口选项没有勾选,这种情况只要把它勾选上就可以了. 二.渲染窗口在屏幕以外(这种情况要分 ...

  3. 帧同步分离逻辑层和渲染层_帧同步的一些坑

    一. 简述 我们用最精简的模型来描述一下帧同步. 客户端检测服务器的逻辑帧 -> 拿到逻辑帧 -> 进行处理 -> 处理出结果 -> 完成本次逻辑帧处理 -> 表现层将处 ...

  4. div自动滚动_从手机滚动丢帧问题,学习浏览器合成与渲染层优化

    一个 CSS 属性引发的血案 Web 页面性能是前端开发特别需要关注的重点,评判前端 Web 页面性能的指标有很多,页面的流畅度是其中的一种,如何让页面变得 "柔顺丝滑",要讨论起 ...

  5. 小型三维引擎设计实现-渲染层的设计总结

    1 设计目标: 1.1: 易于开发,对渲染API做抽象,向上层提供更容易使用的接口, 另外还可以扩充渲染API功能,比如增加自定义GLSL常量, GLSL结构体,GLSL公用函数,自定义GLSL un ...

  6. 一个项目中说系统分为表现层、控制层、逻辑层、DAO层和最终数据库五层架构...

    表现层就是看到的东西,比如你现在看到的当前页面控制层就将你的请求从页面传到后台代码逻辑层就是处理你的请求的代码DAO层就是将数据存到数据库中的代码数据库就是数据库了,存东西用的DAO层就是将访问数据库 ...

  7. java系统项目分为哪五大层次?控制层_业务_一个项目中说系统分为表现层、控制层、逻辑层、DAO层和最终数据库五层架构-转...

    表现层就是看到的东西,比如你现在看到的当前页面 控制层就将你的请求从页面传到后台代码 逻辑层就是处理你的请求的代码 DAO层就是将数据存到数据库中的代码 数据库就是数据库了,存东西用的 ,DAO层就是 ...

  8. 多线程操作数据库时为了防止数据的增删改的混乱该在数据库层还是程序层面上进行同步?

    多线程操作数据库时为了防止数据的增删改的混乱该在数据库层还是程序层面上进行同步? [问题点数:60分,结帖人jiao_zg] 不显示删除回复 显示所有回复 显示星级回复 显示得分回复 只显示楼主 收藏 ...

  9. android ui层 交互层 业务逻辑层 服务层,表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)...

    三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI).业务逻辑层(BLL).数据访问层(DAL).区分层次的目的即为了"高内聚,低耦 ...

  10. 三层架构:表示层-业务逻辑层-数据访问层

    三层架构和MVC是两个东西. 非要相关的话: 三层架构中"表现层"的aspx页面对应MVC中的View(继承的类不一样) 三层架构中"表现层"的aspx.cs页 ...

最新文章

  1. AjaxControlToolKit之DragPanelExtender用法
  2. 企业项目开发--分布式缓存memcached(3)
  3. 2021年零基础带你走进nacos的世界之云服务器下载安装nacos-小白教程,详细到爆了!
  4. 未能加载文件或程序集 请移除注册表值 [HKLM/Software/Microsoft/Fusion!EnableLog] 解决方法
  5. java 对数取反_如何理解「对数」?
  6. 【Esri联邦大会】看点13: “NOAA National Hurricane Center”:应急应用
  7. STM32之WiFi模块的功能、选型及使用
  8. 国内电视台播出的日本动画大盘点
  9. ubuntu升级22.04无法启动--ACPI BIOS Error
  10. 医保是不是只有住院才能在单位报销 什么样的病才能报销
  11. 数字货币智能合约的概念与演变
  12. Tracup Talk:如何制作项目管理的甘特图?
  13. MacBook电池使用策略
  14. linux的各种自带库-lz -lrt -lm -lc都是什么库
  15. 主数据方法论之数据分发与共享
  16. 郭天祥嵌入式开发教程
  17. 回归预测 | MATLAB实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆神经网络多输入单输出回归预测
  18. JAVA的类来实现银行账户基本操作
  19. 如何搭建消费金融风控体系
  20. android访问win10共享,android访问win10共享文件怎么操作

热门文章

  1. 基于深度学习的单目图像深度估计
  2. 论文阅读-语义分割(2021)-BiSeNetV3:重新思考用于实时语义分割的BiSeNet模型
  3. 微信公号“架构师之路”学习笔记(三)-MQ消息可达性_幂等性_延时性架构设计(应用场景、可靠投递、流量冲击)
  4. JOptionPane总结
  5. opencv 写视频时找不到编码器问题解决方法
  6. Tensorflow 2.x代码中如何控制随机性以保证结果可重复性
  7. LeetCode之有效的字母异位词
  8. LeetCode之翻转字符串里的单词
  9. EF的注解Annotation和Fluent API
  10. [招聘]期待您的加盟,与博客园一起成长