细细回味,从当初同样的疑惑,到现在的常识,蓦然回首,将近十年了,这里就趁着这个机会,好好回顾一下。
这个事情还得从电影说起,最开始人们发现视觉暂留效应,到制造出第一部实际意义的电影,这个中间经历了漫长的时间,而且经过长期的实践经验得出,只要不低于24帧/s人眼就几乎无法察觉出间断感。
后来当人们开发2D游戏的时候,也是用的这个原理,为了保证视觉观感的连续性,流畅性,也要求游戏呈现画面的帧率不低于24帧,当然这个由于人眼本身就是一个低通滤波器,对于过快的速度,还是能够感受出来些许变化。
后来由于游戏开发经验的积累,一些固定的品类游戏开发方案,慢慢地沉定和抽象成引擎了,刚开始主要是单线程模式,逻辑和渲染耦合还是比较大的,这个时期渲染和逻辑帧都几乎没有区分,随着渲染品质的提升,游戏体验越来越丰富,渲染和逻辑就彻底分开成不同的线程来负责了。
题主所说的逻辑帧想必不是这个意思,因为前面渲染帧(呈现画面)的速度跟实际逻辑处理相匹配(类似于电视中所说的同期声),才能保持画面和逻辑效果(如交互,逻辑,输入,网络同步,音频,物理等等)一致,不会出现多模态下的不协调,俗称手感或者观感(或者体验)吧。
引擎的逻辑帧就是将复杂的游戏运行逻辑从复杂的渲染过程中独立出来,使得视觉效果,逻辑数据等内容全部分离开,分工更加明确后,各司其职,逻辑和渲染就可以做到像流水线一样的加速或者减速。比如骨骼蒙皮动画的Pose计算,可以隔着一个渲染帧算一次,玩家的移动等操作输入,可以一秒钟处理10次,无需一秒钟执行30次,而对于高速行驶的赛车游戏,需要开启连续物理碰撞检测(CCD),物理更新的频率可能需要高于渲染帧的次数。总而言之,自从人们把逻辑和渲染区分开来后,游戏的开发方式就发生了大幅度的变化,越来越重度和专业化了,其中可能因为性能需求或者画面效果需求,抑或是表现的一致性物理模拟,不同的网络同步频率要求,玩家不同的交互体验,都可以单独分离,各自设置自身的更新频率了,这个就是引擎中逻辑帧的实际表现形式。
当然凡事都有两面性,虽然越是独立的东西,耦合性就越低,可独立性就越强,但是带来的问题也很明显,比如人们看电影时,如果声音快过于或者慢于口型,那就会太难受了(别扭),感知上出现了偏差。游戏引擎中也存在类似的问题,叫做FramePacing(长短帧),这个本质上是由于显示器的固定刷新率和不均匀的逻辑帧间隔导致(画面呈现频率固定)。
游戏引擎本身的渲染帧率信号由显示器的实际刷新率决定,如60HZ,如果一个游戏只有30FPS,咋整,就得每隔一个频率重新送显一次,这个就需要游戏引擎侦听屏幕刷新的时机点,触发引擎的渲染帧准备,而渲染帧是由逻辑帧准备好的数据结果表现,需要先等逻辑处理完成,逻辑有长有短,这就造成了引擎逻辑帧还没有准备好数据,显示器的刷新时机点已经到了,这个时候就会出现实际画面重复一帧,实际视觉上和交互感知上很容易出现割裂感,导致体验上的卡顿,这个就是逻辑帧,渲染帧,显示器刷新率和体验之间的关系,必须保持这三者在体验上具备的“同步性”,当然这个时钟同步工具是显示器发起的,离散信号,如果满足线性关系,是可以插值的,这个也是为什么有些条件下逻辑帧可以低于渲染帧的缘由。
最近还有苹果等设备上推出了Promotion技术,主要是屏幕刷新率是可变的。要想知道如何协调好逻辑帧,渲染帧,显示器刷新率和体验上的关系这个是另外的话题了,有兴趣的可以私下讨论,希望能够给题主带来些许帮助。