什么是垂直同步V-Sync

垂直同步是显卡提供的一个功能,目的是将游戏帧率和显示器的刷新率进行同步。当开启V-Sync后,显卡会等待显示器本轮刷新完成,在这期间,显卡不会向显示器传输任何数据,并且通过双缓冲和页翻转(page flipping)技术确保当显示器刷新完成后获得下一帧的画面。

为什么需要V-Sync呢?

首先,FPS超过刷新率并不能提高实际感受到的帧率。因为你看到画面是最终要通过显示器的刷新来变化。比如显示器的刷新率是60Hz,那么如果游戏以120FPS的帧率渲染,实际上每渲染两帧才有一次更新显示器画面的机会,那么前一帧的渲染就浪费了,你只能看到第二帧渲染后的结果。当然这不是说FPS超过刷新率就一定没意义,更高的FPS带来更精细的计算和更高精度的输入处理。实际上,更重要的原因是,如果没有垂直同步,当FPS特别高时,显示器有可能在未刷新完成当前帧时,接受到一帧新的数据,那么就有可能在一次刷新过程中,同时显示两个不同的帧,当这两帧画面差异较大时(例如快速的移动镜头),就会产生明显的画面撕裂现象,体验很不好。而使用V-Sync则可以避免这种现象产生。

  • 当帧率高于刷新率时,关闭V-Sync会产生画面撕裂

FPS低于刷新率时,V-Sync的问题

当然并不是打开V-Sync就万事大吉了。V-Sync不仅仅只是限制FPS,V-Sync做的事情是同步,即在合适的时候接受显卡发送来的画面。而当FPS低于刷新率时,有可能当显示器完成本轮刷新时,显卡还没渲染好下一帧画面。例如当前显示器刷新率为60Hz,即每次刷新之间的间隔约为16毫秒。假设当前游戏FPS为20FPS,即每50毫秒能渲染一帧。那么第16毫秒时,游戏还没有帧被渲染出来,本次同步无效(具体细节可能没那么简单),第20毫秒时第一帧被渲染出来放到帧缓冲区中,但此时没有到显示器的刷新周期,因此显卡只能等待。第32毫秒时,显示器刷新周期再次到来,帧缓冲区的内容被同步到显示器显示出来。那么实际上,一共花费了32毫秒才显示出一帧画面,实际的FPS为30。当然在第80毫秒时,渲染帧赶上了一次刷新,FPS暂时性的提高到60,但这之后又跟不上节奏,变回了30FPS。以上讨论的只是理想情况,实际情况FPS是变化的,总的来说,低帧率时往往赶不上刷新周期的车,导致实际FPS降低,且降低到刷新周期的倍数对应的FPS。这样,FPS的变化就不是平滑渐变的,而是在例如30和60FPS之间跳变,形成卡顿现象。

  • 当FPS低于显示器刷新率时会产生垂直同步卡顿(V-Sync Stutters)

自适应的垂直同步(Adaptive V-Sync)

V-Sync打开时,如果帧率低于刷新率,会导致卡顿;而V-Sync关闭时,如果帧率过高,又会导致画面撕裂。那V-Sync到底应该开还是关呢?nvidia提供了自适应V-Sync功能,可以根据帧率的高低适时的关闭和打开V-Sync。

上图中,当FPS低于60时,自动关闭V-Sync,避免帧率直接卡顿到30。而当FPS高于60时,自动打开V-Sync,避免画面撕裂。
这个功能不错,但这是显卡厂商提供的管理功能,需要用户通过显卡控制软件自己打开。其实完全可以在游戏中自行判断是否要打开或关闭V-Sync。当然必须能在程序中控制V-Sync的开关。对于OpenGL可以使用wglSwapIntervalEXT来控制,DirectX也有相应的方法。

游戏开发基础知识之垂直同步V-Sync相关推荐

  1. Unity游戏开发基础知识(新手必看)

    内容会持续更新,有错误的地方欢迎指正,谢谢! 0.Unity最大的优点 unity提供的最大优点就是跨平台. 以前项目移植很麻烦,现在只要一份代码,然后注意平台差异就好了. 1.灯光类型 平行光:Di ...

  2. Html5 Canvas核心技术(图形,动画,游戏开发)--基础知识

    基础知识 canvas 元素可以说是HTML5元素中最强大的一个,他真正的能力是通过canvas的context对象表现出来的.该环境对象可以从canvas元素身上获得. <body>&l ...

  3. 游戏开发基础知识——“庆典活动”的设计

    我们经常可以在游戏中见到各种各样的"仪式与活动",比如召唤强大的生物基本上都需要通过专属的"召唤仪式",安抚战争中阵亡将士的亡魂会有祭奠仪式,某一阵营的军队在出 ...

  4. 游戏开发基础知识——音效和音乐的作用

    成功的游戏都会追求音效和音乐的完美使用,这会让一款游戏的表现更上一个层次.无论是自然的,机械的还是静默效果,在不同场景中都会有其独特的用法.从<超级马里奥>里面经典的背景音乐和" ...

  5. 3D游戏开发基础-姜雪伟-专题视频课程

    3D游戏开发基础-23042人已学习 课程介绍         该课程从游戏开发基础知识讲解,包括向量,矩阵,以及固定流水线,可编程流水线,GPU编程等,通过该课程的学习可以让大家对游戏开发原理以及游 ...

  6. SP 短信开发-基础知识篇

    SP 短信开发-基础知识篇 很土的话题,但是最近帮朋友做这个东西,所以写点东西出来给初学者参考. 一.准备资料 SP开发资料网站上有很多,但是主要是以下几个文档: 1.MISC1.6 SP订购通知接口 ...

  7. os-cocos2d游戏开发基础-进度条-开发笔记

     os-cocos2d游戏开发基础-进度条-开发笔记(十)   ios-cocos2d游戏开发基础-游戏音效-开发笔记(九)       ios-cocos2d游戏开发基础-CCLayer和Touch ...

  8. Unity4.x 2D游戏开发基础教程第1章Unity及其组成的介绍

    Unity4.x 2D游戏开发基础教程第1章Unity及其组成的介绍 本书主要讲解的是,如何使用Unity开发2D游戏.但在开始讲解之前,最好先熟悉一下Unity这个工具.本章会首先介绍Unity的下 ...

  9. Unity 4.x 2D游戏开发基础教程大学霸第一更

    Unity 4.x 2D游戏开发基础教程 大学霸 第1章  Unity及其组成的介绍 本书主要讲解的是,如何使用Unity开发2D游戏.但在开始讲解之前,最好先熟悉一下Unity这个工具.本章会首先介 ...

最新文章

  1. 京东一面:Spring 为何需要三级缓存解决循环依赖,而不是二级缓存?我懵了。。...
  2. vue+vant使用图片预览功能ImagePreview的问题
  3. 可变参数__VA_ARGS__使用和va_list使用小结
  4. Optimize a Flex application using deferred instantiations
  5. Common Trace Format
  6. 转载:Pixhawk源码笔记一:APM代码基本结构
  7. java 8009_[转]Tomcat的8009端口AJP的利用
  8. 印象笔记不同步(EDAMSystemException: errorCode=INTERNAL_ERROR)
  9. MySQL 5.6版本二进制包多实例安装
  10. 集群语言 Python 入门 脚本工具
  11. oracle学习札记46
  12. 【云服务器安全加固】
  13. 牛人之所以牛,在于思维方式超越了…
  14. 北外和北邮计算机,北京邮电大学和北京外国语大学哪所大学比较好?大学对比介绍...
  15. jmeter-same user on each interation
  16. N-gram模型(基于词表)
  17. 东北大学秦皇岛分校计算机类排名,东北大学秦皇岛分校全国排名,2021东北大学秦皇岛分校排名榜...
  18. [附源码]Python计算机毕业设计SSM基于Internet快递柜管理系统(程序+LW)
  19. pii 400_为什么要加密所有个人身份信息(PII)
  20. 关于oracle账户被锁定的解决办法

热门文章

  1. 机器人无限火力无限e符文_LOLs9无限火力AP蒸汽机器人布里茨出装符文加点玩法推荐...
  2. 有礼 | 快来领取你的年终福利!
  3. stata学习笔记(一)stata入门与基本操作
  4. Photoshop CS2 视频教程-PS反选(转)
  5. C语言字节对齐问题详解
  6. 华为6plus流量显示无服务器,华为手机开启了数据流量却不能用/不能上网
  7. 关于数据服务器与网页服务器分开的问题
  8. 好心情:那个总爱逗我笑的朋友,得了抑郁症
  9. spring-java使用Validation参数验证-自定义校验器
  10. Pygame之接小弹珠