VRIK+Unity XR Interaction Toolkit 实现VR上半身的追踪(附带VRM模型导入Unity方法和手腕扭曲的解决方法)

news2024/12/28 11:47:04

文章目录

  • 📕第一步:配置 OpenXR + XR Interaction Toolkit 的开发环境
  • 📕第二步:导入人物模型
    • ⭐VRM 模型导入 Unity 的方法
  • 📕第三步:配置 VRIK
    • ⭐给模型加上 VRIK 组件
    • ⭐将模型的头部和手部的位置作为 VR 追踪目标的子物体
    • ⭐添加 VRIK 的 IK Target
  • 📕调整 IK 位置
  • 📕使用 Twist Relaxer 缓解手腕扭曲的问题

IK(反向动力学)有利于提升 VR 应用中的沉浸感,我们可以通过 IK 实现 VR 中全身模型的追踪。本篇教程将基于 Unity 的 XR Interaction Toolkit 和 Final IK 插件中的 VRIK 功能介绍如何模拟 VR 中人物上半身的运动,特别是手臂和手肘的姿态。

XR Interaction Toolkit 是 Unity 一款实用的 VR 开发工具包,具体的环境配置方法和使用方法可以参考我往期的教程。

Final IK 是 Unity 一款功能强大的 IK 插件,其中拥有适用于 VR 的 IK 功能(称为 VRIK,Asset Store 链接:https://assetstore.unity.com/packages/tools/animation/final-ik-14290)
注:这个插件是付费的,但是 VRIK 的配置方法是非常简单的。

本篇教程使用的 Unity 版本:2021.3.5
XR Interaction Toolkit 版本:2.3.0
Final IK 版本:2.2
(以上的版本其实无所谓,基本上都适用)
使用的 VR 设备:Meta Quest 2 (只要你的设备能支持 Open XR 的运行环境就行)


📕第一步:配置 OpenXR + XR Interaction Toolkit 的开发环境

这一步参考我之前的安装配置教程 Unity VR开发教程 OpenXR+XR Interaction Toolkit (一) 安装和配置

最终场景中有配置好的 XR Origin 就行:

在这里插入图片描述


📕第二步:导入人物模型

推荐 Humanoid 的模型,这样 VRIK 能够自动配置骨骼,否则需要手动配置骨骼,会比较麻烦。

⭐VRM 模型导入 Unity 的方法

有些小伙伴可能想使用 VRoid 制作的 VRM 模型。一种方法是将 VRM 模型先导入建模软件,通过插件转换成 Fbx 文件,再导入 Unity。这种方法我不怎么熟练,就不介绍了。另一种方法是通过 Unity 的插件,直接将 VRM 格式的文件转换成 Prefab,我将介绍这种方法。

使用到的插件:
UniVRM https://github.com/vrm-c/UniVRM
SimpleURPToonLitOutlineExample(这是一个 URP Shader,如果你是 URP 项目,需要配合这个插件来转换 VRM 文件,因为 UniVRM 没有 URP Shader) https://github.com/simplestargame/SimpleURPToonLitOutlineExample

首先打开 UniVRM 的 Github 页面,打开 Release 可以找到插件的包。

在这里插入图片描述

我这里选的是 VRM 1.0 的版本:

在这里插入图片描述

下载过后导入 Unity,导入成功后可以看到 Unity 上方的菜单栏多了这两个东西:

在这里插入图片描述

项目文件夹会多出这三个文件夹:

在这里插入图片描述

如果你是 URP 项目,我们需要打开 URP Shader 的网址,同样在 Releases 下载后导入 Unity。
导入成功后可以在项目文件夹找到这个文件夹:

在这里插入图片描述
找到 SimplestarGame/SimpleURPToonLitOutlineExample/Scripts/MaterialFactory.cs 这个脚本,用它来替换先前导入 UniVRM 中的 VRMShaders/GLTF/IO/Runtime/Material/Importer/MaterialFactory.cs 脚本。

现在,我们就可以将 VRM 文件复制到 Unity 项目文件夹:

在这里插入图片描述

然后在 Inspector 面板中勾选 Migrate To Vrm1,点击 Apply

在这里插入图片描述

这时候模型就转化成了 Prefab,上面附带了一些 UniVRM 的脚本。

在这里插入图片描述
在这里插入图片描述


📕第三步:配置 VRIK

⭐给模型加上 VRIK 组件

首先我们将人物模型拖至场景,给模型添加 VRIK 组件:

在这里插入图片描述

在这里插入图片描述

可以看到 VRIK 组件中的 Reference 已经自动帮我们引用好了人物的骨骼,这是因为我们的模型是 Humanoid 的。如果不是 Humanoid 就需要自己绑定了。

⭐将模型的头部和手部的位置作为 VR 追踪目标的子物体

VR 追踪目标为现实中的头显和两个 VR 手柄。在 XR Interaction Toolkit 中的 XR Origin 对应的就是 Camera Offset 下的这三个物体。

在这里插入图片描述

然后,我们回到人物模型上 VRIK 组件,锁定头部,左手,右手这三个物体:

在这里插入图片描述

这三个物体对应着 VR 追踪的三个目标:头显,左手柄,右手柄。
我们找到这三个物体在人物模型中的位置,分别复制头部,左手,右手的游戏物体:

在这里插入图片描述

复制后:

在这里插入图片描述

最后,我们先将这几个复制体的 position 设为 0,再把头部复制体,左手复制体,右手复制体分别作为 XR Origin 中的 Main Camera, LeftHand Controller 和 RightHand Controller 的子物体

在这里插入图片描述

⭐添加 VRIK 的 IK Target

接下来,我们回到 VRIK 组件,找到 Sovler 中的 Head Target, Left Arm Target 和 Right Arm Target,把刚刚复制的头部,左手,右手复制体拖过去:

在这里插入图片描述

在这里插入图片描述

这三个 Target 作为 IK Target,用于解算人物上半身的姿态。
现在,我们已经成功配置好了 VRIK。
理论上,其他的 VR SDK 也是类似的配置方法,需要将头部,双手的复制体作为该 SDK 中 头部,双手追踪位置的子物体。


📕调整 IK 位置

这个时候如果运行程序,会发现双手的位置可能并不是我们想要的,而且可能摄像机的位置会被模型的脸或者头发挡住。这时候我们就需要调整刚刚复制的头部,左手,右手的 IK Target,使上半身的 IK 达到我们想要的效果。我们可以在游戏运行的时候动态调整这三个 Target 的 position 和 rotation,达到满意的效果后复制 Component, 退出运行模式后再粘贴复制的 Component Values

在这里插入图片描述

在这里插入图片描述

VRIK 上其实也有很多参数可以微调,大家可以自行尝试,调整出自己满意的 IK 效果,每个参数是什么意思可以参考这篇博客:
https://blog.csdn.net/love_c_s/article/details/123351153?spm=1001.2014.3001.5501


📕使用 Twist Relaxer 缓解手腕扭曲的问题

配置好 VRIK 后,大家可能会遇到这个问题:手腕的转动无法带动前臂的转动,手腕和前臂有点断层的样子,于是手腕稍微转过一定角度后(比如将手腕面向自己),前臂基本不转,导致手腕处的模型扭曲得很厉害。

在这里插入图片描述
在这里插入图片描述

这个时候,我们可以用 Final IK 中的 Twist Relaxer 组件来缓解这个问题。

首先找到人物模型中前臂的位置:

在这里插入图片描述

在前臂物体上添加 Twist Relaxer 组件,并且像下图所示赋好值,将 VRIK 组件赋给 IK,前臂物体赋给 Transform 和 Parent,手的物体赋给 Children:

在这里插入图片描述
在这里插入图片描述

现在运行程序,手腕严重扭曲的问题可以得到一定缓解:

在这里插入图片描述

虽然手腕转过很大角度后还是会有一点扭曲现象,但是相比添加前已经缓解了许多,我们也可以微调下图中的这三个参数,达到自己满意的效果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/425338.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何用ChatGPT做设计?激发设计师们的灵感

伴随着人工智能技术的迅猛发展,AI 工具在设计领域中的应用也越来越广泛。 当前,诸如ChatGPT等 AI 工具不仅可以进行自然语言处理,还可以应用于图像、视频等多种媒体领域,为设计师们提供了丰富的应用场景。 使用Chatgpt&#xff1…

开源了,我做了一个基于GPT的桌宠聊天系统:Pet-GPT!

前言 最近chatgpt的热度高居不下。作为一个深度成谜者,发现大部分开发者在调用GPT的时候要不就是基于Tauri做本地窗口外接网页,要不就是web直接展示。在沉思苦想一段时间后,才发现好像没啥什么人用pyqt做啊?特别是没人用桌面宠物…

浏览器:好用的浏览器插件,亲测好用

插件一、CSDN,推荐指数五颗星,强烈推荐 说明:超级好用的浏览器桌面,功能强大,操作简单,效率神器 插件二、AIX智能下载器 说明: 就这么简单的拖放即可实现保存图片,即使观看中的视频…

凌恩生物美文分享|好看又实用,多组学联合分析项目大揭秘!

基因层面的功能潜能有没有真的实现表达,表达量是高是低?下游合成的蛋白质行使了什么样得功能,代谢产物通过体循环到达靶器官,又是如何影响靶器官的工作运行的? 一个完整的生物学故事,中心法则贯穿始终&…

2023十大连锁店进销存软件排名(真实测评)

目前市面上很多连锁店进销存软件的排名都比较主观,结合自己实际工作过程中接触过的软件和在进销存软件多年的经验,给大家整理下2023十大连锁店进销存软件,希望能帮到正在选择连锁店进销存软件的老板! 第一名:秦丝连锁联…

机器学习 | 实验三:逻辑回归和牛顿法

⭐ 对应笔记:牛顿法 📚描述 在本练习中,我们将使用牛顿法对分类问题实现逻辑回归。 📚数据 在本练习中,假设一所高中有一个数据集,该数据集表示40名被大学录取的学生和40名未被录取的学生。 每个(x(i),y…

pandas笔记:offset.DateOffset

进行date的偏移 class pandas.tseries.offsets.DateOffset 1 参数说明 n 偏移量表示的时间段数。 如果没有指定时间模式,则默认为n天。 normalize是否将DateOffset偏移的结果向下舍入到前一天午夜**kwds 添加到偏移量的时间参数 年(years&#xff09…

软考软件设计师 数据库知识点笔记

概念数据模型 了解即可 结构数据模型 数据库的三级模式结构 外模式对应视图 概念模式对应的是数据库管理系统里面的基本表 内模式对应的是数据库里的一些存储文件 上图可直接背下面概念 两级映像 有内模式跟物理独立性相关,有外模式跟逻辑独立性相关 两级映像其…

MySQL主从复制原理剖析与应用实践

vivo 互联网服务器团队- Shang Yongxing MySQL Replication(主从复制)是指数据变化可以从一个MySQL Server被复制到另一个或多个MySQL Server上,通过复制的功能,可以在单点服务的基础上扩充数据库的高可用性、可扩展性等。 一、背…

人工智能AI简史

AI人工智能简史 最近学习AI,顺便整理了一份AI人工智能简史,大家参考: 1951年 第一台神经网络机,称为SNARC;1956年 达特茅斯学院会议,正式确立了人工智能的研究领域;1966年 MIT发明ELIZA人机心…

【Java|golang】2409. 统计共同度过的日子数

Alice 和 Bob 计划分别去罗马开会。 给你四个字符串 arriveAlice ,leaveAlice ,arriveBob 和 leaveBob 。Alice 会在日期 arriveAlice 到 leaveAlice 之间在城市里(日期为闭区间),而 Bob 在日期 arriveBob 到 leaveBo…

数字孪生灌区信息化-灌区现代化建设

平台概述 柳林数字孪生灌区信息化平台以物理灌区为单元、时空数据为底座、数学模型为核心、水利知识为驱动,对物理灌区全要素和建设运行全过程进行数字映射、智能模拟、前瞻预演,与物理灌区同步仿真运行、虚实交互、迭代优化,实现对物理灌区…

企业不会用、不敢用AIGC+ 服务怎么办,不妨试一下它?

自从去年ChatGPT上线后,国内外与AIGC相关的话题就一直备受关注。AIGC是指人工智能通用语言模型(Artificial General Language Model),是一种具有极高自然语言理解能力的人工智能模型,其通过大规模语料库训练,能够像人类一样自然地理解和生成语言。ChatGPT正是基于AIGC技术开发的…

数据挖掘(3.1)--频繁项集挖掘方法

目录 1.Apriori算法 Apriori性质 伪代码 apriori算法 apriori-gen(Lk-1)【候选集产生】 has_infrequent_subset(c,Lx-1)【判断候选集元素】 例题 求频繁项集: 对于频繁项集L{B,C,E},可以得到哪些关联规则: 2.FP-growth算法 FP-tre…

sealos部署k8s集群

使用sealos部署kubernetes集群并实现集群管理 1. 初始环境 官方参考:https://www.sealyun.com/zh-Hans/docs/ 1.1 主机准备 都是静态ip,可上网 主机名主机IP服务器配置k8s-master01192.168.200.1002c4g 40Gk8s-node01192.168.200.1012c4g 40Gk8s-no…

Pytorch实现R-CNN系列目标检测网络

在PyTorch提供的已经训练好的图像目标检测中,均是R-CNN系列的网络,并且针对目标检测和人体关键点检测分别提供了容易调用的方法。针对目标检测的网络,输入图像均要求使用相同的预处理方式,即先将每张图像的像素值预处理到0 ~1之间…

Flink 优化 (一) --------- 资源配置调优

目录一、内存设置1. TaskManager 内存模型2. 生产资源配置示例二、合理利用 cpu 资源1. 使用 DefaultResourceCalculator 策略2. 使用 DominantResourceCalculator 策略3 使用 DominantResourceCalculator 策略并指定容器 vcore 数三、并行度设置1. 全局并行度计算2. Source 端…

和猿辅导国奖选手的妈妈聊聊:数学新生代的成长之路

2023年第64届IMO中国国家队名单公布,来自猿辅导的学员王淳稷、孙启傲在此次国家队选拔赛中总成绩排名分列第一、第二,将于今年7月代表中国奔赴日本参加IMO竞赛。 值得一提的是,孙启傲同学继入选2022年IMO国家集训队、获阿里巴巴全球数学竞赛…

ubuntu(20.04)-shell脚本(2)echo-date-awk-sed-iptables-shell变量数组

1.echo 语法:echo [-ne][字符串]补充说明: 1、echo会将输入的字符串送往标准输出。 2、输出的字符串间以空白字符隔开,并在最后加上换行号。OPTIONS: -n 不要在最后自动换行 -e 若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文…

【学习时序论文】

目录【2021 NeurIPS】Autoformer: Decomposition Transformers with Auto-Correlation for Long-Term Series Forecasting【2022 ICML】FEDformer: Frequency Enhanced Decomposed Transformer for Long-term Series Forecasting【2023 ICLR】TIMESNET: TEMPORAL 2D-VARIATION …