» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


发新话题
打印

[专题讨论] 谈一谈个人对fast sync和延迟的见解

LZ,我感觉你最好重新理解什么是三重缓冲,尤其是
"显示器刷新周期4,C帧没有处理完,继续刷新B帧图像。(C:0.7  ;  D:0.4)"
"三重缓冲D帧比C帧先完成也会抛弃C帧"
这两个想法

然后你就会开始理解fast sync本质是解除了多重(不局限于三重)缓冲中的一个问题,这个问题在显卡机能爆表到帧渲染频率远高于显示器刷新频率能力时才会发生。


[ 本帖最后由 SONIC3D 于 2016-8-11 16:11 编辑 ]


TOP

附件: 您所在的用户组无法下载或查看附件



TOP

引用:
原帖由 samusialan 于 2016-8-11 17:44 发表
1.......是指我理解的“三重缓冲会弃帧“这点吗?
2.比如wiki那张图的第5个B的处理时间如果是图中的3倍,然后C已经完成了,那么第三次刷新周期是怎么运作的?
3.而常见比较容易理解的fast sync和三重缓冲最重要的区别描述是,fast sync会拾取最接近实际时间点的一帧输出
1.你Windows上应用里或驱动里启用三重缓冲时,当渲染结果占用了显示buffer以外的2个buffer后,如果vsync还没有发生,那么就阻塞了,不再进行下一个周期的渲染。(但是严格来说3dfx的三缓冲不是这样做,而是像你说的这那样干的,这个看下面第3点)


2.B和C根本不会同时开始,是顺序进行,也就是我蓝字里帮你划出来的,具体也可以参考我上面的附图。

3.Fast sync就是3dfx的三缓冲机制的再包装,与现在的三缓冲的本质区别就是当渲染速度极快、所有后备缓冲都被填充完之后,也不会被阻塞住,游戏可以继续往后备缓冲中填充渲染结果,而当显示器vsync发生时,只会从"最后渲染完毕"的那个缓冲中复制画面到显示缓冲。也就是极端高速渲染的情况下,会出现你说的"弃贞"。这样的机制,最大的优势就是在"v-sync等待"开关关闭的状态下也能取得不横向撕裂的画面,而且是尽可能接近最新渲染结果的画面。

[ 本帖最后由 SONIC3D 于 2016-8-11 20:41 编辑 ]


TOP

引用:
原帖由 sig1b 于 2016-8-11 14:41 发表
太棒了!这么说用这个技术的模拟器可以比原真实街机提前发招(16ms)?以前玩街机总觉得对手(ai)都后发先至。
我以前也有这种感觉,然后发觉是我用了重拳,电脑用了轻拳。

TOP

引用:
原帖由 clarkh 于 2016-8-11 23:40 发表

所以简单来说,显卡只能同时渲染一帧,只不过可以多放几个缓冲区用来交换,那么理论上如果显卡足够快,十重缓冲都是可以的咯……
是的,DirectX里就有这个
https://msdn.microsoft.com/en-us/library/windows/desktop/bb174347(v=vs.85).aspx
DX9最多允许20个,DX10-12我记得最多16个,具体这个队列值是多大,可以通过上面这个api设置。

但这依然是个队列,队列中的任何一片缓冲,都不会被抛弃,会依次复制到显示缓冲显示到屏幕上。并且假设真有一块显卡渲染特别快,在2个VSync之间就把最多20个的队列都填满了,那么也依然会阻塞住,等待有新的队列位置空出来,所以依然会造成"延迟"。并且可以这样说,你这个队列越长,只能在一定条件下使整个渲染过程的平均渲染间隔时间趋于稳定(开VSync等待的情况下),但队列的拖长也造成了画面渲染后,被延迟了较长时间才显示到屏幕上。

这和3dfx的三重缓冲和fast sync的只取最后完整渲染的一帧的做法所产生的结果是完全不一样的。

TOP

发新话题
     
官方公众号及微博