Unity来实现一下绳子效果——Obi Rope插件介绍

今年年中的时候,《最后生还者2》引发了业界非常热烈的大讨论。

有关剧情、人物描绘的争议自然是最为集火的一环。可参看这里:

如何评价游戏《最后生还者2》?www.zhihu.com

而除此之外,还有众多有关游戏的细节也确实让人印象深刻。比如下面这个绳子:

image

可以看到,图中的绳子可以做到和游戏中的环境进行实时交互,拉伸,紧绷等属性都能很好的展现,而艾莉本人也有对应的各种状态下的反应动作,实在是细节无限大。

那么问题来了。不说高度还原,有没有可能比较方便地在Unity中实现相对类似的效果呢?

还真有。在Unity商店搜索“Obi”,就可以找到“Obi Rope ”这款模拟绳子的插件。这款插件是由西班牙工作室“Virtual Method ”开发,他们于2002年成立,为许多欧美游戏大厂提供过技术支持。"Obi"系列则是这家工作室为Unity制作的,可实时模拟绳索,流体,布料和软体的插件。

image

<figcaption style="margin-top: 0.66667em; padding: 0px 1em; font-size: 0.9em; line-height: 1.5; text-align: center; color: rgb(153, 153, 153);">这几款插件完全对的起它的价格</figcaption>

从商店直接下载Obi rope导入工程,可以看到官方在RopeAndRod文件夹下提供了10个案例学习,其中Crane(起重机)和Plectoneme(交缠螺旋)则是对应绳子的拉伸和旋转的使用场景,有点内味儿了。

[图片上传失败...(image-fb8329-1620436487654)]

image

<figcaption style="margin-top: 0.66667em; padding: 0px 1em; font-size: 0.9em; line-height: 1.5; text-align: center; color: rgb(153, 153, 153);">Crane</figcaption>

image

<figcaption style="margin-top: 0.66667em; padding: 0px 1em; font-size: 0.9em; line-height: 1.5; text-align: center; color: rgb(153, 153, 153);">Plectoneme</figcaption>

接下来我们可以看一看RopeAndJoint场景,这个案例比较详细的展示了Obi rope的用法。

image

首先自然是绳子,选中绳子,可以看到两条绳子都挂载到了名为Obi solver的物体下,Obi solver身上带有两个脚本“Obi Solver”和”Obi Fixed Updater”。

image

从官方文档中得知,**Obi solver **负责模拟粒子的物理属性并执行约束,这句话有些抽象,但我们只要知道怎么用就好了,其中有三点很重要:

1:Obi solver 可以添加到任意GameObject中,同一场景允许运行多个。

2:绳子必须是Obi solver子级才能实时更新运动和仿真。

3: 每个solver独立与其他solver ,所以不同的solver 下的子物体不会互相影响,只有同一solver下的绳子才会相互反应。

image

<figcaption style="margin-top: 0.66667em; padding: 0px 1em; font-size: 0.9em; line-height: 1.5; text-align: center; color: rgb(153, 153, 153);">不同solver下的的锁链不会产生交互</figcaption>

涉及Obi solver 的相关设置很多,这里不过多赘述,新建solver时选择默认的就好。

接下来看Obi Fixed Updater,顾名思义,这个组件会让solver下的子物体在FixedUpadte()期间更新。同样,你需要手动选择你希望运行的Obi solver添加到Updater中,不过obi很贴心,当你新建Obi solver时会自动添加到Updater的Solvers里。

image

<figcaption style="margin-top: 0.66667em; padding: 0px 1em; font-size: 0.9em; line-height: 1.5; text-align: center; color: rgb(153, 153, 153);">新建的solver自动添加到场景中的Obi Solver下</figcaption>

Solvers 下面的两个参数,

Substep Unity physics,勾选上之后,该solver下的绳子能够与场景中的物体进行更精准的交互,一般默认勾选。

Substeps控制绳子的模拟精度,Unity中默认的timestep为0.02,假如在这儿设置Substep=4,那每次运行程序将会计算出0.02/4=0.005s的绳子的运动轨迹。总结下来就是,Substep值越大,模拟精度越高,程序性能越低。


接下来看绳子,也就是Obi Solver下的Obi Rope。每条绳子分别挂载了“Obi Rope”,”Obi RopeExtruded Renderer”,”Obi Path Smoother”以及多个”Obi Particle Attachment”组件

image

先来看看Obi Rope组件 ,Obi Rope 中比较重要的功能就是绳子编辑器Blueprint,Obi 提供了一些不同种类的绳子资源,这里我们选择“Joint rope1”就好,之后点击Edit path ,你就可以在场景中对绳子进行编辑。

[图片上传失败...(image-e0158d-1620436487654)]

image

<figcaption style="margin-top: 0.66667em; padding: 0px 1em; font-size: 0.9em; line-height: 1.5; text-align: center; color: rgb(153, 153, 153);">非常方便,即刻上手</figcaption>

你也可以按住shift,同时选择多个节点进行操作,Path Editor的其他参数解释中,tangent mode 三种模式同样很好理解,如下图:

image

Thickness控制绳索在该点的粗细,mass控制粒子的质量,phase是个很重要的属性,可以后面结合Obi Collider一起说。

第二个组件是Obi path Smoother ,这个组件决定绳子的渲染

image

第一个参数Decimation ,官方文档用了一张图进行解释,你可以在Unity场景中选择Wireframe模式进行观察,会发现Decimation 值越大,绳子的面片越少,性能自然也会得到提升。

[图片上传失败...(image-a5aaed-1620436487654)]

第二个参数Smoothing,值越大绳子越滑。

[图片上传失败...(image-da36af-1620436487654)]

第三个参数Twist,决定每个绳索链结部分的扭曲度数,如下图。

[图片上传失败...(image-c57841-1620436487654)]

第三个组件是 Obi RopeExtruded Renderer,Obi一共提供了四种渲染器,该渲染器是创建新的Obi Rope 时默认的。此处也不展开说(好麻烦哈哈),有兴趣的可以查阅文档自己探索。(文档地址文末)

image

最后一个组件是Obi Particle Attachment,这个组件用于将绳子的一端粘合到另外一个对象上,使用方法也很简单,选择绳子的的一个粒子组,并给这个粒子组指定对应的粘合物体,绳子的这个粒子组所在的位置就会粘合在这个物体上并跟随运动。

image

<figcaption style="margin-top: 0.66667em; padding: 0px 1em; font-size: 0.9em; line-height: 1.5; text-align: center; color: rgb(153, 153, 153);">打开粒子编辑器,可以看到绑定的particle group的名字</figcaption>

Particle Attachment有两种Type " Dynamic"和"static",此场景中的该组件都选择的是”Dynamic“,官方文档中也对这两种模式进行了详细说明:

先来看static模式,官方的解释是static type 下,组件会完全取消激活被选中的粒子的动力学。实际上就是粒子的运动的惯性对其绑定的物体不会有任何影响,此时该粒子的运动完全由绑定物体决定。

再来看Dynamic模式就好理解了,选择Dynamic后组件会和粒子的运动惯性互相影响,选择了Dynamic 后会多出两个参数,"Compliance"决定连接点的牢固性,Compliance =0,连接点会非常牢固,Compliance值越大,连接点越灵活;"Break threshold”=连接点可以不被扯断的最大的力。

最后让我们看下两种模式下的GIF图,来体会其中的不同:

image

<figcaption style="margin-top: 0.66667em; padding: 0px 1em; font-size: 0.9em; line-height: 1.5; text-align: center; color: rgb(153, 153, 153);">将连接球体的两个粒子调为static,下方粒子组不对球体产生作用力,直接被拉到地上</figcaption>

image

<figcaption style="margin-top: 0.66667em; padding: 0px 1em; font-size: 0.9em; line-height: 1.5; text-align: center; color: rgb(153, 153, 153);">再改回dymatic ,绳子也对球体产生作用力</figcaption>

需要注意的是:Target的物体需要带有Obi collider组件。


在案例中,绳子和场景中的地板墙壁都添加了 Obi Collider和Obi Rigidbody, Obi Collider的作用就是让绳子能与其他元素发生碰撞。除了Polygon Collider2D, Obi支持几乎所有的Unity 碰撞器。

如果你希望能忽略一些特定的碰撞体,就可以用到Phase(碰撞阶段),每个obi Collider都具有phase属性,而Obi Rope也同样具有phase 通道,当Obi collider的 phase 和Obi rope的值相同时,他们将彼此忽略。默认情况下,Obi Collider 的phase=0,Obi rope的phase = 1

[图片上传失败...(image-772ca5-1620436487653)]

需要注意的是,在不同Obi solver 下创建的Obi 物体,就算phase值相同也不会产生交互效果。

Obi Rigidbody仅包含一个参数,选中"Kinematic For Paticle"后,物体不会被绳子影响,但绳子还是能感受到物体的存在(老二刺螈了)。

文章的最后,用Unity娘来稍微致敬下(拿着锁链似乎某种属性觉醒了的感觉):

image

Obi 官方文档:

Obi Physics for Unityobi.virtualmethodstudio.com

Obi 工作室博客:

Virtual Method's Blog - News and articles from our studioblog.virtualmethodstudio.com[图片上传失败...(image-78987b-1620436487652)]


PS :可能有朋友觉得Obi系列插件太贵,只是想学习一下,Unity商店有另外一套模拟流体、弹性布料的插件Flex,由英伟达制作,效果同样很爆炸,而且是免费的,不多说直接上图:

image
image

感兴趣的同学可以戳下面的视频,非常详细的介绍了这个插件:

【萌新图形学】简单看看新一代的物理引擎——FLeX简介_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com

(本文作者
@对马骑马使用炎拳
转载于:https://zhuanlan.zhihu.com/p/307684671

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容