物理引擎
这个问题提的太好了,既是玩家们很容易察觉到的问题,而深究起来又有很深的技术原理。 这次咱们避免长篇大论,直接直观地看几种物理参数对“真实性”的影响。 1、物理帧率现实世界是连续的(只要不要深入到量子物理的世界【滑稽】),现实世界也不是由CPU、GPU模拟的;而游戏物理,全靠模拟,模拟真实性的第一个影响因素就是——物理模拟的频率。 先举一个有趣的例子:N年前跑跑卡丁车可以通过截图操作让电脑变卡、然后穿过障碍…
很难,因为真实世界是连续的(近乎连续),而物理引擎是离散的(不近乎连续)(以下是一个通俗的解释,并代表目前物理引擎的真实解决方案) 先说时间层面的离散和连续物理引擎是根据每个物体的状态一帧一帧更新每个物体的位置,当发生碰撞(碰撞盒重叠)时根据2个物体的速度大小、速度方向、材质、碰撞深度(2个碰撞盒重叠了多少)来计算这次碰撞的结果,同时更新2个物体的状态(位置、速度)或者触发某些特殊效果(破碎、变形)…
主要原因其实是,绝大部分游戏都没有采用“ 非刚体物理引擎”。非刚体物理引擎并非很难实现。最著名的一个例子就是“BeamNG”物理引擎,这本来是为《孤岛危机3》开发的物理引擎,但是最终游戏没有采用,不能不说是个遗憾。后来BeamNG引擎的开发小组将其制作成了《BeamNG.Drive》赛车游戏(或者应该叫撞车游戏)。 它的物理引擎有多逼真,可以看这个对比视频 [视频] 这个游戏引擎是2013年完成的。系统要求并不高,只需要i3的CPU,4GB内存…
【物理引擎系列】开篇
10/30 更新 : 计划整合cliblisp做控制接口,并将代码移运到qt上,用qt自带的图形绘制,实现跨平台。 [视频: 示例] [视频] 最近找到一个工程: https://github.com/wgtdkp/apollonia ,用C++做一个简易的物理引擎,并用OpenGL渲染,感觉不错。自己照猫画虎仿了一下,花了几天解决了一些bug,到底可以完美运行了。 想到先前挖的弥天大坑: 制作简单的2D物理引擎(零) - bajdcc - 博客园 ,是时候要继续启航了(其实是没啥好玩的项目可以做了,逃)。下面就是最小化项…
基于物理的角色运动系统-Unity实现
项目大概七月底EA, 人生中第一个自己从设计到程序美术开发一手包的游戏就要能发售了ヽ( ̄▽ ̄)ノ 老板不让现在宣传,忍不住自己先偷跑一点开发内容好了。 反正老板应该不知道我知乎号吧~ 这个游戏主要是物理战斗,里面用到的角色运动系统查了很多资料后终于搞的像点样子了。 目前这个项目作为验证,然后打算吧这个基于物理的角色运动系统做成通用组件,等游戏正式发售就开源出来(~ ̄▽ ̄)~ [视频: 走路的相关物理] [视频] [视频] [视频: 身体物理效果与unity的物理交互] [视频] 这个是半年前的进度。 现在游戏…
我因为毕设的关系稍微研究过一点点游戏物理引擎. 从根本原理上来说, 实现真实物理学的物理引擎计算量是无限庞大的, 所以游戏里要用真实物理是不可能的. 用经典物理的方法模拟刚体视觉效果还比较相似, 模拟弹性/布料就差得多了, 所以游戏物理引擎应该说是"魔术". 但从表现形式的"魔术"来说, 之所以觉得不像, 是因为某些具体问题的算法还是需要太大计算量所以降低了精度. 刚体物理引擎的大概原理是: 游戏物理引擎模拟物理的基本原…
从零开始手敲次世代游戏引擎(四十五)
在 从零开始手敲次世代游戏引擎(四十四) 当中,我们完成了凸包的算法。现在我们可以进入基于凸包的碰撞检测了。基于凸包的碰撞检测的著名算法是GJK(Gilbert–Johnson–Keerthi distance algorithm,参考引用1)算法。这个算法利用了闵可夫斯基差的重要特性:如果两个凸包相交,那么它们的闵可夫斯基差必然包含坐标原点。 其实这是一个很显然的事情。所谓闵可夫斯基差,就是两个集合当中所有的元素的差组成的集合。如果两个集合…
我们需要怎样的物理引擎?
物理引擎是当今游戏、电影特效、虚拟现实(VR/AR)、工业生产、以及很多科研中必不可少的工具,因为我们需要真实地模拟这个世界,从而创造出精致的作品,作出巧妙的决策。 我们大多数人认识物理,是通过中学时的一维单质点模型。它让我们了解 “力是改变物体速度的原因”,并学会求解做匀加速直线运动的物体在任意时刻的速度和位置。 [图片] 然而,这个世界的复杂程度超乎我们的想象:物体和它的运动不只有一个维度,其受力不仅在时间轴…
这个看你物理引擎的复杂度来决定: 要是引擎只能解决刚体问题,那么它适用于一般的游戏或者小学到高中教学 如果引擎解决了ccd 连续碰撞检测 那么它能用于影视界别特效 如果引擎解决了结构力学 弹性体 破碎力学部分,那么 它能用来做桥梁测试 建筑测试 如果引擎解决了空气动力学模块 它可以用来造飞机和火箭 如果引擎解决了水流力学 那么它可以拿来研究大坝 水患 以及逃生方案 如果引擎解决了压缩气体力学以及声音模拟 它能用来研…
我是做physics-based motion control的。不同于传统的passive simulation如流体模拟,软体模拟。Physics-based motion control更关注的是active simulation,即在passive simulation上加控制信号来达到我们希望的控制效果。比如如何在基于刚体仿真的小人身上设计控制器,让其完成行走跑酷等动作。这个过程可以理解成为计算机模拟中的机器人设计控制策略。 [图片] 这个领域相当小众,全世界相关的研究组也就那么几个。至于相关的学习资料…
表面上的原因是模拟仿真的三大特点。 一是难。与图形学的其他领域甚至整个计算机科学领域相比,模拟仿真所需的数学基础要求较高。整个模拟方向可以概括为数值微分方程与数值优化的融合。各种模拟技术都是这两个概念在不同案例中的算法实践。如果你读过图形学中有关计算几何的论文,会发现许多实际上就是模拟的特定实例。如果你已经学透图形学里头的模拟仿真,再去读一些计算数学、机械工程、计算力学里头关于数值方法的论文,你…
【深入浅出 Nvidia FleX】(1) Position Based Dynamics
一、 Nvidia FleX简介 FleX 是一款完全基于GPU的物理引擎,其中所有动态物体都是由粒子构成,可以很容易实现不同物体(刚体,软体,流体,布料等)之间的交互效果。如下图: [图片] [图片] 在传统的物理引擎中,基本上都是针对每一种动态物体,会有一个独立的解算器(Solver),各种Solver按照一定顺序进行计算,从而得到模拟结果,这样会带来大量冗余工作。而FleX把所有动态物体,都用同一种方式表达出来,这样一来,就只需要一个Solver便可以…
让开发引擎的 Havok 社都惊讶的引擎运用 ——您将制作一个开放世界形容得这么轻描淡写,那么开发过程中有遇到开放世界经常有的那种 bug 非常多的现象吗? 青沼:令人惊讶的是开发过程十分顺利,当然这也多亏了我们制作组对引擎进行了调整。比如说从山脚往上爬的时候耐力没了就会摔下去,但从山顶往下面滑的时候有时候会正好卡在一些地方,这样就可以回复耐力了。每当找到这样的地方,我们就会讨论‘那这样就不必在这里特意做个平…
关注我的b站号~ https://space.bilibili.com/198377617/?share_source=copy_link&share_medium=iphone&bbid=Y84C1A87238831C048E09014BFC2D3B481AF&ts=1587578403 [图片] 先放效果图。 首先简单将效果划分为三个,水上,分界线,水下。 水上便是普通的渲染,水下则是带有水下雾效的渲染。 可以近似使用 Exponentialheightfog(指数関数的高さフォグ)进行渲染,即: [公式] 或者参考 better fog 至于分界线,则需要获取水面的高度函数 [公式] 取个ViewSpace的位置: [公式] = [公式] 将ViewSpace位置转到世界空…
游戏物理引擎(一) 刚体动力学
[文章: 游戏物理引擎(二) 碰撞检测之Broad-Phase] [文章: 游戏物理引擎(三) 碰撞检测之Narrow-Phase] [文章: 游戏物理引擎(四) 约束] 开篇简单总结下游戏中物理引擎的原理. 游戏引擎里通常直接用开源的物理引擎库.比较常见的2D物理引擎有box2d,chipmunk,3D物理引擎有physx,bullet. 刚体的运动主要基于牛顿三大定律来模拟: 1.惯性 物体在不受力时,总是保持速度不变. 2.力,质量,加速度 力在物体上产生加速度,满足 [公式] …
异次元的作业
写程序的时候,侄子宏儿拿着他玩的游戏来找我:“小叔,这个游戏是怎么算出炮弹会落在哪里的?” 总算不是要我教他玩游戏了,我长舒一口气,回答道:“游戏里面有物理引擎。” “是程序吗?”他又问。 “是的。” “小叔教我写吧。” 宏儿上个月才学hello world,怎么可能会写物理引擎?为了让他知难而退,将来不像我一样做个程序员,我在网上的代码仓库里找了一段别人写的、号称是“空间物理引擎”的代码,给宏儿看。 “这么长…
我进课题室以前一直以为是做渲染的,即便那时我已听过games101,201也扫了两眼了,我还是认为图形学=渲染。开学以后发现大家做的是模拟还有可视化... 然后去找老师聊天,表明自己对这个方向十分感兴趣,愿意研究下去,导师说,我们不像那些清北浙大的,生源好,我们搞不了太难的东西,当时就感觉要被劝退了。 回去之后想了想,能做成啥样就做成啥样吧,反正做模拟能积累一点代码经验,将来找份糊口的工作也行... 然后就是在网上搜…
从零手写游戏引擎26:物理引擎的简单实现
经过前面几篇的学习,我们已经积累了很多关于物理引擎的理论知识,这一篇我们打算把这些知识都学以致用,动手实践一个非常简单的物理引擎,包含了物理引擎的各个阶段,并接入我们的引擎当中,与渲染模块一起工作,实现简单的模拟效果。 一。整体架构 [图片] 在系列的前面部分,我们已经实现了基本的数学功能,和基本的渲染功能。基于这两个基本模块,我们可以在上面构建自己的物理引擎,以及对物理模拟进行可视化。BroadPhase、NarrowPha…
2D凸多边形碰撞检测算法(一) - SAT
2D凸多边形碰撞检测算法(一) - SAT原理概述碰撞检测可分为 Broad Phase (粗略检测)与 Narrow Phase (精细检测) 两个阶段。在 Narrow Phase 中,SAT(Separating Axis Theorem,分离轴定理)碰撞检测算法直观且高效。然而,它只适用于 凸体 的碰撞检测。它的原理清晰易懂,即 若两个物体没有发生碰撞,则总会存在一条直线,能将两个物体分离 。于是,我们把这条能够隔开两个物体的线称为 分离轴 ,如下图: [图片] 我们可以很直观的…
一.UE4引擎Tick生命周期分析 二.UE4多线程GC分析 三.UE4多线程使用和分析 四.资源加载全解析&热更新 五.寻路技术分析&UE4 RecastNavmesh流程全解析 六.物理引擎全解析&UE4七.大世界LevelStreaming分析&大世界专栏 导言: 本小节会分析游戏引擎常用的物理引擎部分,对比一下目前市面上存在的物理引擎方案和基本实现原理,以及重点分析目前使用最广泛的PhysX引擎,同时结合UE4对PhysX的封装和使用来分析UE4中的物理动画相关的基础…