gpt4 book ai didi

python - 如何在 shady 引擎上设置自定义 FPS 限制

转载 作者:行者123 更新时间:2023-12-04 08:29:47 24 4
gpt4 key购买 nike

我目前在 144 HZ 显示器上使用 shady,我试图将 shady 世界刷新率限制为 90 Hz。根据我的理解,降低 FPS 的唯一方法是使用“SetSwapInterval”将帧率降低一半或三分之一。有没有其他方法可以通过调用 shady 来降低 FPS,而不使用 time.sleep() 或其他一些基于 python 的计时来实现这种效果?

最佳答案

首先,理解这一点很重要:如果您以不是显示器物理刷新周期整数倍的间隔更新屏幕内容,您一定会得到一种或另一种类型的时间伪影。如果避免时间伪影很重要,唯一好的解决方案是不要以 144Hz 驱动显示器——而是进入“显示”控制面板并告诉您的操作系统实际以 90Hz 驱动它。如果您的硬件/驱动程序不支持这一点,那么这将是“选择您的毒药”的情况。
毒药 A 是让帧更新代码每 1/90 秒即时运行一次,无论屏幕是否物理准备就绪。在这种情况下,您将花费额外的时间来执行渲染(绘制更多/更大的刺激)但是,无论您是否需要额外的时间,您都将不可避免地获得视觉“撕裂”伪影,因为屏幕与显存。
毒药 B 是抖动帧的调度,以便更新有时间隔一个物理帧(1/144 秒),有时间隔两个物理帧(2/144 秒),平均为 1/90。在这种情况下,您不会撕裂,但动画可能会生涩且看起来不规则。此外,在持续时间较短的帧中,您没有任何额外的渲染时间,这可能会达不到目的。
在几乎所有为 Shady 设想的用例中,这两者都是不可取的,因此 Shady 不提供任何预先打包的解决方案来执行此操作。下面是完成任一解决方案的列表,具体取决于您是否使用 --allowTearing 运行它。或不。我将默认设置为 --fps=40 ,小于 60 的任意目标,以便我可以在 60Hz 设置上对其进行测试;显然你想用 --fps=90 运行.
两种解决方案都涉及 sleep()在 Python 中(在较低级别进行更精确的攻击是没有意义的: sleep 是所有这些问题中最不可怕的问题)。它们之间的区别只是w.SetSwapInterval(0) ,其效果是使渲染代码尽可能快地运行,而根本不关心物理屏幕时间(注意:此设置实际上可能会在某些图形驱动程序上被忽略,在这种情况下,您会被毒药 B 卡住) .

import Shady, time

cmdline = Shady.WorldConstructorCommandLine()

allowTearing = cmdline.Option( 'allowTearing', False, type=bool )
fps = cmdline.Option( 'fps', 40, type=float )

cmdline.Help().Finalize()

w = Shady.World( **cmdline.opts )
Shady.TearingTest(w).z = 0
Shady.FrameIntervalGauge(w)

if allowTearing:
w.SetSwapInterval( 0 )
else:
w.SetSwapInterval( 1 )

w.awkwardFrameRate = fps # change w.awkwardFrameRate on-the-fly if you want

@w.AnimationCallback
def Blah( self, t ):
try:
t0, n0, framesPerSecond = self._awkward
except AttributeError:
framesPerSecond = None
if framesPerSecond != self.awkwardFrameRate:
t0, n0, framesPerSecond = self._awkward = [ Shady.Timing.Seconds(), self.framesCompleted, self.awkwardFrameRate ]
print( self._awkward )
deadline = t0 + ( self.framesCompleted - n0 ) / framesPerSecond

while Shady.Timing.Seconds() < deadline:
time.sleep(0.001)

Shady.AutoFinish( w )

关于python - 如何在 shady 引擎上设置自定义 FPS 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65080474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com