如何看待《绝区零》二创『楼梯上做动作,脚竟然还能匹配楼梯?』播放超百万上了热榜?这功能有多难实现?

发布时间:
2025-01-05 20:57
阅读量:
3

受不了了,这样吧,你打开Unity网址:Start Your Creative Projects and Download the Unity Hub | Unity下载一个UnityHub,打开启动器,随便注册一个账号,登录。

Unity,启动!

选择一个Unity版本进行安装。

最后选择新建一个项目,一直下一步。

这里使用2021.3.25版本,URP模板。这不重要

点击创建新项目,等一会它就自动打开了。

然后我们就可以开始愉快的IK之旅了。

首先,让我们使用Unity内置的IK功能,对IK有一个基本认知。

李恒:【Unity3d FootIK】写一个最简单的IK(1)

接着,据说Unity推出了AnimationRigging插件,但是这玩意儿纯纯鸡肋,让我们狠狠地喷一喷:

李恒:【Unity3d FootIK】 痛斥AnimationRigging(2)

接着,让我们有请Unity IK唯一真神——《Final IK》,看看它是如何定义与描述一个IK问题的。

李恒:【Unity3d FootIK】 With Final IK(3)

有了粗略的认知后,让我们深入代码,看看《Final IK》的算法细节:

李恒:【Unity3d FootIK】 Better Hybrid IK(4)

知道IK Solver了,让我们着眼于“地面/阶梯”的匹配计算。

李恒:【Unity3d FootIK】FinalIK's Grounder Algorithm(5)

“单一信源”的可信度不是那么高,让我们再来看看插件《Ju Foot Placement》的算法:

李恒:【Unity3d FootIK】Ju Foot Placement Algorithm(6)

或者我们也可以看看“理论介绍”:

爱吃菠萝不吃萝卜:【游戏开发】逆向运动学(IK)详解

再看看《刺客信条》在GDC上的解决方案介绍:

gdcvault.com/play/10230

或者你再在知乎站内搜一搜“Foot IK”,早就有各路大佬给出了各种ue的,unity的实现。

这一趟下来,看上去难吗?哪里难了?这么多年都是这个难度,不要睁着眼睛乱说,算法思想就是这么简单的。

你已经掌握了Foot IK基本原理与实现了,可以在Unity里大杀特杀了!

高能预警:下面开始输出情绪,请非作战人员撤离现场,移步至

李恒:关于《绝区零》IK问题的衍生探讨

嗨嗨嗨,输出知识写完了,接着来输出情绪咯。

说了这么多“不着边际”的玩意儿,你非常生气地问我:别特么跑题乱扯一通,zzz的实现究竟难不难?

我大可以给你一个简单粗暴的结论——基于网络上关于“FootIK”的公开资料这么多,我给出的标准是,一个“难”的问题应该具备“资料少”、“实现少”的特点,而“FootIK”不是,它在游戏中广泛使用,广泛实现,也被广泛讨论了,所以“不难”。

然后呢?拿去攻讦他人吧——“明明不难,却被一群人吹上天,真是一群***。”

攻击他人就能让你收获无上的优越感、满足感,沉溺在“赢赢赢”的高潮中哩。

哎,咱也没有义务进行赛博支教,教育你“就事论事”啥的,只能送你一句【知乎粗口】了,以表我最鄙夷的态度。

当然,“吹吹党”就万事大吉了?错哩,轮到你挨批咯!某些“溢美之词”我看着就尴尬,怎么办,我又不能骂你,只能用脚踹一踹你们的屁股,用上面的工程实践劈头盖脸地告诉你,已经有大量的从业者实现了各式各样的FootIK;用理论算法糊你一脸,IK并不是什么稀罕玩意儿,给我狠狠地对IK祛魅!别吹啦,再吹我要爆炸啦!

不装了,摊牌了,我就是人见人打的理中客,想把吹子和黑子脸狠狠地埋入“数学”与“算法”的海洋中呛一呛以解我心头之怨。那我问你!那我问你!zzz的实现究竟难不难!!!

用一个我最不喜欢的打比方来说,它可以非常不恰当地类比成“日本动画中的卷心菜”。

其实最开始写这个回答的时候,是想写如何使用Unity与插件《FinalIK》一步步实现一个类似的效果的,但是写着写着发现,对于一个小白而言,从0开始还是太困难了,所以就没写了。

让我们在Adobe家的动作库里面随便搞一个动作:

Mixamo

让我们借用一下Unity商店的《Final IK》插件:

assetstore.unity.com/pa

在场景里摆一摆,配置一下,测试能发现,这是没有使用IK的表现:

NO IK

这是使用了IK的表现。

Enable Final IK

对于有一定经验的开发者而言,确实称不上“非常困难”。

什么?你说你细看,发现人物还是在阶梯上穿模了?!那肯定的啊,题干中的zzz视频里,逐帧观看你也会发现会偶尔穿模啊。

什么?你说实现细节不如zzz,那肯定的啊,我动作随便扒的,插件配置随便配的,参数都是默认的,某些细节上确实拉胯啊。

什么?你说我的立论不成立,zzz的实现就是困难?

好好好,我退一步,把效果从0%拉倒80%不困难,只需要付出20%的精力就够了;但是zzz把效果从80%拉倒90%,需要付出剩下80%的精力,边际效益递减嘛,所以非常困难,非要这么说我也承认。

只能说下次还填“非常简单”。


Update!

总有人要喜欢掰扯“工程问题”,可以,展开讨论之前我先给我的标准,免得大家讨论都没有一个前提共识。

当我们在谈“工程实现”的难度的时候?我们在谈什么?

一种是“理论”到“实现”的沟壑。就以与游戏开发最密切的“计算机图形学”而言,每年的前沿论文一大堆,有各式各样的算法实现与理论指导。程序员的工作之一可以是“复现论文”,合入到工程项目中。

这份工作,确实是“非常困难”的——你不仅仅得把论文嚼烂,转为自己的知识;还得有工程经验,知道怎么把这功能嵌入项目中。

这种难度我当然强调了,“资料少“——就一两篇论文/博文;实现少”——没有前辈在Unity/UE中实现,或者实现了没有文章分享经验。

但是,这和题目中的“FootIK”有关系吗?【理论】我展示了,【实现】我也展示了,无论是Unity里的,还是UE里的,有大量从业者【复现】【实现】【使用】了,这种从“学术”到“产业”的最大沟壑有大量前辈帮我填补了,我只需靠着我浅薄的工程经验就能把这东西用起来,胶水工作当然有胶水工作的门槛与难度,但和前者比起来,那真是简单多了。

另外,有人说产品的“更新”与“适配”也是一个困难。这里我不得不严肃声明,一个“健康”“合理”的系统模块必定是对外部更新与变动“没有感知”的。这个系统和其他模块必须尽可能地【正交】——比如修改A系统的参数,不会影响B系统的表现。

这意味着,不是什么“新角色”“新地图”的出现,就得更新一下“IK系统”,产生“返工”操作。这无论如何都是一种“大忌”。我不排除会出现某种非常极端的边界情况(corner case),需要在系统上打补丁,开特例。也许这种补丁的实现是“”If-else",或者在当前系统中添加一个“特殊情况的参数表”。但无论如何,这都不影响系统的主要功能与运作。更新与修改产生的开销一定是非常小的,不存在所谓的什么“更新一下就要做大量的适配工作”,这是绝对不可能被接受的。

甚至,这种“更新”带来的耦合影响,反而是值得批判与杜绝的,反而是“技术力低下”的表现。

所以,我认为,持有“不同的角色,动作,地形的适配会影响工程实现,这产生了极大困难”的观点是站不住脚的。

最后,吐槽一下,有人形容我这种是“造原子弹”“造火箭”,也有人形容是“高考”。我说咱们能不能不要“偷换概念”,计算机科学/程序技术和这些有相似的地方,但不代表他们“全等”啊。你拿这些不同领域的交集部分,来覆盖整个讨论背景,那没得玩了,讨论的议题就从“这个实现是否困难”变成“高考和这个实现有多相似”了。

END