惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LangChain Blog
博客园 - 聂微东
大猫的无限游戏
大猫的无限游戏
The Cloudflare Blog
博客园 - 叶小钗
博客园 - 【当耐特】
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Cyberwarzone
Cyberwarzone
D
Darknet – Hacking Tools, Hacker News & Cyber Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Google Online Security Blog
Google Online Security Blog
Simon Willison's Weblog
Simon Willison's Weblog
N
News | PayPal Newsroom
IT之家
IT之家
GbyAI
GbyAI
Application and Cybersecurity Blog
Application and Cybersecurity Blog
G
GRAHAM CLULEY
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
V
Visual Studio Blog
Help Net Security
Help Net Security
博客园 - Franky
T
Threat Research - Cisco Blogs
M
MIT News - Artificial intelligence
WordPress大学
WordPress大学
L
LINUX DO - 最新话题
酷 壳 – CoolShell
酷 壳 – CoolShell
Cloudbric
Cloudbric
Vercel News
Vercel News
Y
Y Combinator Blog
T
Troy Hunt's Blog
PCI Perspectives
PCI Perspectives
Webroot Blog
Webroot Blog
C
Cisco Blogs
Engineering at Meta
Engineering at Meta
A
Arctic Wolf
V2EX - 技术
V2EX - 技术
V
Vulnerabilities – Threatpost
I
InfoQ
人人都是产品经理
人人都是产品经理
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
The GitHub Blog
The GitHub Blog
Hacker News: Ask HN
Hacker News: Ask HN
Forbes - Security
Forbes - Security
AI
AI
B
Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
F
Fortinet All Blogs
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
K
Kaspersky official blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

机核

游戏性能旗舰最强之选,一加 Ace 6 至尊版国补到手价2999元起 6元钱自己更换电动车刹车线 《生化危机9:安魂曲》编剧Haris Orkin专访 摸金游戏?音乐游戏!暗区新赛季这把能弹的琴有何来历? 好评国产武侠SRPG《息风谷战略》免费DLC现已推出 | 机核 GCORES 碎片 《生化危机:安魂曲》将于5月实装首个免费更新内容 | 机核 GCORES 新锐东方游戏,谱写世界新章! 沉浸式恋爱视觉小说游戏《心象演算》免费试玩版现已正式上线 | 机核 GCORES 互动影游《代号三国:龙起》上线!穿越三国与曹操并肩、与佳人同行、与权谋博弈! 《老头收集梦想生活》,游戏酒桌会6,录音笔VOL.689 | 机核 GCORES 破界·共生——《白日梦:无限世界》五大核心游戏特点解析 价格已到史低,锐龙5 9600X/锐龙7 9700X正适合抄底 时间循环之旅即刻启程!《归环》一周目测试今日开启 热门在线韩游变魂游,洛奇衍生作能否打破“花瓶”魔咒? LG UltraGear evo 全新高端显示器系列:当“5K”遇见“AI”,不止强大,更懂热爱 反套路三国互动影游《代号三国:龙起》今日上线! 愿望单登记人数突破10万!备受瞩目的“女儿养成游戏” 《梦幻魔法公主》今日于Steam平台上线!限时八折优惠中 《黑神话:悟空》全球音乐会2026巡演将于4月29日12时开票 | 机核 GCORES “Snowguelike”生存肉鸽挖矿新作《蛙穿雪境》公布发售日期,5月7日正式上线 | 机核 GCORES 重塑移动办公、AI创作新境!全新华硕灵耀Air系列、ProArt 骁龙版震撼首发,创芯未来 均分88:《Saros》媒体评分汇总 | 机核 GCORES 上海烛龙公布合作遗迹探险游戏《吉时已到》首支预告片 | 机核 GCORES 首个独立游戏《萝薇日记》已上线Steam! 烛龙新IP《吉时已到》首曝,打造国内首款中式合作遗迹探险游戏 喜加一:《暗黑破坏神Ⅳ》国服现已开启限时免费领取本体活动 | 机核 GCORES 新版《生化危机》电影定于9月18日上映,官方网站现已上线 | 机核 GCORES 《冲就完事模拟器2》“星球大战”联动DLC正式宣布 | 机核 GCORES SteamController将于5月4日发售,售价99美元 | 机核 GCORES 事已至此,内存这么用也算省钱了,“2+1”非对称双通道应用实测 505游戏母公司现已收购《明末:渊虚之羽》IP | 机核 GCORES 基石 手动杂谈12|格斗游戏也能讲好故事 | 机核 GCORES I Love You Mr Snowball 我的向日葵小姐 会比GTA6先发售吗?最硬核的生存游戏《DAYZ》要推新DLC了 周记02:在2026遇到新怪谈 什么硬件,能让游戏Loading界面快速消失? | 机核 GCORES GadioSpec《百年风云世界杯》免费试听集 | 机核 GCORES 百年风云世界杯Vol.1丨足球崛起 | 机核 GCORES 100年前,一群人提前替我们经历了AI恐惧 | 机核 GCORES 《呼啸山庄》2026 ——一辆当代艺术的大卡车冲撞了我的大脑 手游《天穗之咲稻姬:日之香巡灵传》宣布将于7月27日停服 | 机核 GCORES 集结梦之队,征战世界杯,《最佳球会ONLINE》上线Steam 山水绝景随心拼 休闲建造游戏《千里山河录》Steam商店页公开 巫师帽、法袍、魔杖,为什么它们是影视、游戏里的法师必备三件套? 《无鞘信使》-第一章 复古风自动战斗肉鸽《终结之终结》Steam商店页面现已上线 电脑里有一款不破不立的MMO,录音笔VOL.688 | 机核 GCORES 《生化危机》30周年纪念周边发售,这次是真的“保护伞” 可靠耐用+AI全能,惠普战66 2025锐龙版深度体验 《时之书:无尽终章》关卡“大航海时代”全球首次公开 经典名作《乌龙派出所》改编经营模拟游戏《乌龙派出所~阿两的商店街物语~》正式宣布支持简体中文 明日开冲,解锁反套路三国互动影游《代号三国:龙起》即将上线 独立游戏《这是我的宝藏!》已发售~ 降低难度不是唯一解,无压力死亡也是好体验 Netflix官宣新片《普通人》:讲述韩国现代史上的权力风暴 《生化危机:安魂曲》全球销量现已突破700万份 《绝地鸭卫》PC版5月15日正式发售 亡妻回忆录?女性向情感叙事游戏《S-mail》现已正式发售 全新酷黑风格,酷睿Ultra 200S PLUS的高性价比搭档!七彩虹BATTLE-AX B860M-PLUS S WIFI7 V20 超级黑刃主板测评 胖狗 索尼发布了港台地区PS5产品价格调整公告,将于5月1日起实施 二次元怪猎+性感美女!《碧蓝幻想:无尽黄昏》开启Beta公测 这款怪谈类型中式恐怖游戏居然更新了?! 《百日战纪 -最终防卫学园-》改编漫画将于今年冬季开启连载 《如被附身,请致电我们》:匈牙利黑色幽默恐怖小说 《竹屿山房杂部卷五》(译文) 大树 超越引擎 摄影分享丨四月 碎片杂记vol.72 当老式FPS与老式动画技术碰撞出新时代的火花—《神探杰克鼠》 想做独游,如何避免首个项目就褒姒? 在线多人动作游戏《OCTOPinbs》将于5月12日上线Steam! 《酒鬼女神的酒诡》确定将于2026年登陆Steam 《CRYMELIGHT》将于11月5日(周四)正式发售!4月25日开始预购! 钢铁国度MKI部落Evolution,蛮兵部分 【钢铁国度】部落-Primal MK I,蛮兵部分 这是一个高中生用ai跑出来的作品,我自称他为物理神话 钢铁国度MKI部落Metamorphosis,蛮兵部分上 钢铁国度MKI部落Metamorphosis,蛮兵部分下 INDIE Live Expo于4月25日举办:首发9款新作,超200款独立游戏亮相 暗黑卡牌策略新作《魔忌:穷鼠啮狸》发布全新中文试玩版和发售预告片,4月30日正式上线在即 战锤40K长篇小说:变节者・苦难主宰(三)(全书完) 战锤40K长篇小说:变节者・苦难主宰(二) 战锤40K长篇小说:变节者・苦难主宰(一) 英语语言学习丨短语专题1:短语的特点 唯一的EVE战争 【少前同人】【M200】战术人形会梦见音乐会吗 【昏迷3】即将发售,前作主角悉数到场!“恶灵”宋老师化身可操控角色 业内人士:游戏公司“十有八九”使用生成式AI,包括卡普空 欢庆一周年:《光与影:33号远征队》全新纪念艺术图、超值折扣与免费更新同步上线 才刚刚开始呢 【抽奖】《星际卡车司机》推出免费大型更新,四折平史低折扣进行中 四人合作FPS游戏《佣兵猎手》抢先体验重大更新 1 现已上线 Raw Fury新作《深馅地牢 Deep Dish Dungeon》将于今秋加入 XGP 塔防幸存者游戏《魔怪来袭》推出首个 DLC 《饿狼传说:群狼之城》1周年纪念!新DLC“沃尔夫冈·克劳萨”今日参战 猫狗相伴 欢乐闯关 双人合作平台跳跃游戏《猫狗同行》上线Steam商店页 《同行:月球逃脱》(Together: Moon Escape)上线将于明日上线Steam
引擎技术漫游指南:物理与帧率
TirelessKoriel · 2023-09-15 · via 机核

我们先从一个简单的问题入手。

如图,横坐标 t 是时间,纵坐标 v 是速度,图中图像表示为 v = 2 ,意义为以恒定速度 2 (这里省略了单位)前进 2 秒。那么这 2 秒内,移动的距离是多少呢?

很简单,我们可以直接得到 2 x 2 = 4,稍作观察我们就会发现下图:

路程的值就是 v = 2 与 t 轴组成的矩形的面积。

我们再看下一个。

有了前面的例子,这个图像理解起来就更简单了:路程的值为图像中红色阴影部分的面积,即 2 x 2 / 2 = 2。

上述两个例子中,我们所要求得的路程的值,均为规整图形的面积,那么如果 v 值随着 t 而做非匀速变化呢?如下图:

这次并不能简单的求得阴影部分面积了。但是我们可以用一种取巧的方法:

我们将阴影部分分割为一个一个的矩形,从图像上可以看出,我们只要把所有矩形的面积求出并相加,就能得到一个近似值,也就是我们要求得的路程值。此求值过程,就是所谓的积分过程。

上述三个例子均是极其简单的运动问题,同时也是一个简单的积分过程。在游戏引擎物理相关的模拟中,大多也是如此。

比如,给某物体施加一个恒定的力,随着时间变化,这个力会推动物体行进多少距离?

再比如,给某物体施加一个扭矩,随着时间变化,这个物体会旋转多少度?

这个值的精确度取决于矩形的宽,即 t 值的间隔大小:

结合图5、6 来看我们不难发现,如果矩形的宽度越小,分割出的矩形越多,我们得到的值就越精确。带入具体的坐标含义来说就是,如果我们计算的时间间隔(矩形的宽)越小,那么我们得到的最终路程值就越精确。

同理我们不难得出一个重要结论:在游戏引擎的物理计算中,如果我们能保证每次计算的时间间隔足够小,那么物理计算的精确性也就越高

物理引擎的计算结果决定了最终的渲染结果。例如一个在某个力的作用下运动的球,在经过两秒的运动后,此时它在游戏场景的位置,就决定了渲染结果中这个球所在画面中的位置。

游戏引擎会以某种帧率来渲染画面,这貌似可以用来驱动物理引擎的运作。但是问题的关键在于,我们无法保证渲染帧率的稳定性。这一秒渲染帧率可能还是 60fps,下一秒可能就因为场景的复杂度提高而降低至30fps。如果我们的项目需要物理引擎保持 50fps 的计算频率,那 30fps 的渲染帧率就无法驱动物理引擎做出正确的模拟了,自然渲染结果也会变得不正常。

那么如何保证物理引擎能够不受渲染帧率影响,同时能以一个足够精确的时间间隔持续运行呢?

通常有我们有两种解决方案可供选择,其一为 ue 所采用的半固定物理帧(semi-fixed),其二为 unity 采用的固定物理帧(fixed)。

半固定物理帧(semi-fixed)

半固定物理帧有两个关键的参数,如下图所示:

其中,Max Substeop Delta Time 最好理解,它代表着我们希望物理引擎以哪种帧率运行,如图上数值 0.016667 即代表着为我们希望物理引擎能以每秒 60 帧的速度运行(1 / 0.016 = 60),从而保证在游戏中的物理计算能够符合我们对物理模拟精度的要求。当然,这个值也可以是 0.033 ,即 30FPS,这个值的选取就是看我们对游戏中物理计算的精度有何种要求。Max substeps 我们放到最后解释。

接下我们进行一次演绎推理,来看看半固定物理帧到底是怎么运行的。

如上图所示:

1. 我们先设定两个关键属性的值,其中 max substep delta time = 0.016 (后简称 MDST),max substeps = 6

2. 我们假设 frame 0 耗时为 0.016 ,这与我们设定的 MDST 值相等,所以 frame 1 我们的物理计算只需一次

3. 要理解第三步推理,我们还是要强调上文中提到过的一个最基本的原则,渲染帧率有可能随着画面变动而变动,但是,不论是半固定还是固定物理帧,都是为了保证物理引擎的运算频率不受渲染帧率的影响。在此基础上我们可以从图中观察第三步的推理。假设 frame 1 耗时 0.033,而我们期望的物理帧运算间隔为 MDST = 0.016,即每秒60帧的物理计算频率(1 / 0.016 = 60),也就是说,为了满足这个要求,我们需要弥补第 1 帧所耽误的时间,第 2 帧的物理帧就要运行 0.033 / MDST = 2 次。并且物理帧运算时将得到 0.033 / 2 = 0.0165 的时间间隔值,作为物理计算的必要参数。

4. 跳出每帧计算的细节,我们可以从更高的角度来观察。如果我们设定 MDST = 0.016,也就是说我们要求物理计算频率为 60fps。观察图中第四步,我们不难发现,前一帧多消耗的时间,会在后一帧补以多次物理计算的形式补回来,这个算法的确能保证物理计算的评率符合我们的设定频率。

下面是这个算法的具体代码,可以与上图中的推理过程相互印证:

从代码中可以看到,在计算 substeps 时,采取了向上取整的方法,这是为了保证我们的物理帧尽可能的多,而不是少。同时我们也可以从代码中看出 Max Substeps 参数的含义,即如果系统运行的速度低过一定的阈值,并且我们无限制的增加物理帧运算,就会导致整个系统的恶性循环。所以一旦系统运行的速度降低到一定程度,半固定物理帧策略就会做出适当的取舍,放弃弥补物理计算的不足。

固定物理帧(Fixed)

下图所示是 unity 中关于固定物理帧的参数设置:

此策略的关键参数为 Fixed Timestep,如图所示 Fixed Timestep 值为 0.02,即我们要求物理计算以 50 fps (1 / 0.02 = 50) 的频率进行。

如上图所示:

1. 假设在第 1 帧时我们消耗的时间为 0.024,这比我们设置的 Fixed Timestep 的值大了 0.008

2. 第 2 帧时我们消耗的时间同样为 0.024, 与 Fixed Timestep 的值相比还是大了 0.008

3. 这两帧耗多消耗的时间总和为 0.016,正好与我们的 Fixed Timestep 值相等,即第 2 帧我们可以多做一次物理计算,以弥补我们多消耗的时间带来的物理模拟的延迟

下面是这个算法的具体代码,可以与上图中的所示过程相互印证:

最后还要多补充的几点是,当我们在引擎中做物理相关的方法调用时,通常都被要求放在关于物理的帧回掉中,例如 unity 物理帧回调位 fixedupdate,ue 则为 substep 回调并需要写特定的代码进行绑定。这个要求其实过于笼统。准确的说,只有我们需要进行某种“恒定的物理作用”时,才需要遵守这里条原则,例如以一个恒定的力持续推进一个物体。

原因是为了保证我们前文一直强调的物理计算的准确性,物理引擎在模拟计算时,一直在物理帧中进行。如果我们在代码中进行的物理相关操作,没有放到物理帧中,这就会导致游戏中有两种物理计算,一种是精确地在物理帧中的,一种是不精确的在非物理帧中的。如果这两个物理操作均在非物理帧中,那么最起码也还保证了一致性,不会因为处在不同类型帧中从而导致的调用次数不一致(例如 unity 的updata 方法回调频率可能是 200fps,fixedupdate 仅为 50fps,物理引擎内部模拟一个力只在 50fps 下,而用户在 update 中手动调用施加力的方法则 1 秒钟会调用 200次,这显然会出现不协调的物理结果)。但是现实状况是引擎内部的物理模拟本就在物理帧,用户没有其他选择,如果我们的调用不在物理帧,那连一致性都无法保证了,就更别提准确性了。

对于那些一次性的物理操作,并且不涉及的时间间隔相关的物理值计算,例如在某帧施加一个冲击力,则可以再非物理帧中调用。

两种物理帧的策略都有其优劣。

非固定物理帧的参数设置不当,可能会导致游戏帧率陷入恶性循环,永远无法跳出低帧率状态。

而固定物理帧则会由于前一帧的耗时和 Fixed Timestep 相差不多,导致累积结果漫长,从而导致画面延迟。

关于 ue 为和决定选择使用非固定物理帧,官方论坛上有如下回答:

We actually had a debate about these two techniques [fixed and semi-fixed timestep] and eventually decided on semi-fixed, and here’s why: If you use [fixed timestep] you have to use a timebank. If you want to tick physics at 60fps and you have a frame that took a little bit more than 1/60 you will need to have some left over time. Then you will tick the physics engine with the perfect 1/60 delta time, leaving the remainder for the next frame. The problem is that the rest of the engine still uses the original delta time. This means that things like blueprint will be given a delta time of 1/60 + a bit.

引用: