根据学员朋友的反馈,新增3节加餐课时,关于如何在新版SteamVR中基于Skeleton Input实现手部模型的替换。

在VR应用程序中,要呈现自制的手部模型,传统的方式是直接将模型导入,放置在手柄控制器所代表的游戏对象下面。

这类方案虽然可以实现快速替换,但是当体验者通过控制器按键进行交互时,比如按下Trigger或Grip键,手部的模型并不能够像Interaction System中的Hand一样做出相应的姿态及过程,开发者在这种情况下需要根据用户的输入编写代码调用不同的手部动画来实现,而且类似于拇指在Touchpad表面滑动这样的交互,实现起来相对困难。

新版SteamVR Unity插件(2.x)中提供了基于骨骼输入的Skeleton Input(骨骼输入)功能,借由SteamVR_Behaviour_Skeleton组件能够驱动绑定的骨骼信息,在程序运行时自动实现相应的手部“动画”。

最终效果

SteamVR会将像Valve Index这样的手柄控制器所跟踪到用户手部骨骼信息,通过Skeleton Input功能模块将这些运动数据反映到虚拟场景中的手部模型上,从而提升沉浸感体验。如下图所示,Index控制器能够获取中指、无名指、小拇指等骨骼运动数据。

Valve Index Controller

而对于像HTC VIVE这样的手柄控制器,虽然没有额外的传感器来识别用户手部的骨骼信息,但是SteamVR能够根据用户的输入,估算出大概的手部姿态,同样能够反映到场景中的手部模型上。

原理

Skeleton Input(骨骼输入)功能使用核心组件SteamVR_Behaviour_Skeleton实现,在程序运行时,动态更新手部的姿态。在该组件的源代码中,UpdateSkeletonTransforms()函数会遍历所获取到的所有骨骼节点,调整它们的位置和旋转信息,从而实现响应用户输入的机制。更多细节可参考该组件的源代码。

SteamVR_Behaviour_Skeleton部分源码

在这里需要与另外一个组件SteamVR_Skeleton_Poser区别开来,前者是在不与游戏对象接触时的手部动作,而后者是游戏对象被抓取以后呈现手部姿态。

要实现基于Skeleton Input进行手部模型替换的目的,需要进行以下两大部分的工作:

  1. 将自制的手部模型进行骨骼绑定,以符合SteamVR的标准
  2. 为模型挂载SteamVR_Behaviour_Skeleton组件并设置属性,制作Render Model所需要的预制体

对于第一步,之所以要制作符合SteamVR 的标准,如上所述,在于SteamVR_Behaviour_Skeleton组件需要获取到所有的骨骼信息,以便在程序运行时动态调节这些关节点的位置和旋转角度,而对于这些骨骼对象的引用路径,都被预定义在了一个SteamVR_Skeleton_JointIndexes静态类中,见下图:

SteamVR_Skeleton_JointIndexes静态类

所以,对于绑定到模型的骨骼,数量和组织顺序必须与类中的定义保持一致。不同的模型具有不同的骨骼绑定信息甚至没有。

模型设置

SteamVR提供了符合自己标准的骨骼绑定文件,在绑定前可以将左右手的骨骼信息分别导入到3D内容制作软件(如Blender)中进行快速绑定而不用手动创建所需要的骨骼。如下图所示。

具体的文件存放位置为:Steam安装目录\steamapps\common\SteamVR\resources\skeletons。在3D内容制作软件中,需要做的工作主要是以下三部分:

  1. 将骨骼重定位并绑定到自制模型对应的关节点上
  2. 对骨骼权重进行重新分配,俗称"刷权重",以符合更加自然的手指运动
  3. 使辅助骨骼不影响手部模型

    Blender中的骨骼绑定效果

组件设置

将模型导出并导入到Unity中以后,将其转换为预制体并挂载SteamVR_Behaviour_Skeleton组件,设置以下三个属性:

Input Source:输入来源。确定驱动骨骼的手柄控制器来自右手或左手。
Skeleton Root:骨骼根节点。该属性指定组件从何处开始取得其下所有子节点的Transform然后将其赋予到声明的bones数组中。
Only Set Rotations:确保勾选,这样在呈现自制模型时不会考虑模型缩放因素而影响模型的呈现效果。

组件设置

组件设置完毕以后,将制作的预制体指定到Hand使用的Render Model预制体的Hand Prefab属性中。

这样便实现了模型替换的功能,以上仅为一般思路。


http://www.taodudu.cc/news/show-4898965.html

相关文章:

  • 如何在SteamVR 2.x 中使用自定义手部模型
  • 王立平--poser
  • SteamVR_Skeleton_Poser的理解
  • 从Poser中输出模型与向3ds Max导入模型
  • 利用同一模型的两种表情(Poser轻松得到)制作表情动画(菜鸟版)
  • 2020年度博客之星排行榜,频繁更新中。。。
  • 中文自然语言处理入门之Hanlp介绍
  • 中文之星智能狂拼iii .3 适中版 build 060612 官网
  • 中文之星掌上狂拼手机输入法 v1.0 symbian版 绿色
  • 中文之星掌上狂拼手机输入法 网页制作软件
  • 企业管理软件使用心得独家分享
  • 养鸡场的计算机管理,养鸡场管理系统7.3 免费版
  • 如何使用手机APP进行库房的库存管理
  • 电脑装机必备的软件
  • win7ss的问题
  • git合并两个没有共同历史提交记录的分支:fatal: refusing to merge unrelated histories
  • 手残转化了动态磁盘后如何转化回基本磁盘
  • 克隆clone一个磁盘, diskgenius都做不出来,不能用,随便下载个AOMEI Partition Assistant还不错
  • AOMEI Backupper 6.5.0所有版本+引导旧版和UEFI
  • 计算机无法识别新挂硬盘,意外:如果新购买的移动硬盘计算机无法识别该怎么办...
  • wsl挂载及启动VScode异常问题总结
  • 【Linux】目录结构和硬盘分区
  • 磁盘加锁专家V2.63官方版
  • [文章更新]圣诞福利,价值$1300的正版软件领取
  • 动态磁盘导致无法进入Mac系统的解决办法
  • 删除boot
  • java创建node类型数据类型_[Java教程]DOM基本点随笔:Node类型
  • 如何迁移操作系统至SSD/HDD?
  • 无数据损失的将简单卷变回主分区
  • winPE的PXE引导,大批量维护和安装系统

【加餐】如何在SteamVR 2 中替换手部模型相关推荐

  1. junit测试起名字规则_如何在JUnit 5中替换规则

    junit测试起名字规则 最近发布的JUnit 5(又名JUnit Lambda) alpha发行版引起了我的兴趣,在浏览文档时,我注意到规则以及运行程序和类规则都消失了. 根据文档,这些部分竞争的概 ...

  2. 如何在JUnit 5中替换规则

    最近发布的JUnit 5(又名JUnit Lambda) Alpha版本引起了我的兴趣,在浏览文档时,我注意到规则以及跑步者和阶级规则都消失了. 根据文档,这些部分竞争的概念已被单个一致的扩展模型取代 ...

  3. 如何在SOLIDWORKS工程图中替换零件或装配体

    在使用SolidWorks软件的时候,会遇到在工程图中替换零件或装配体的问题. 想要解决这个问题,通过替换工程图参考,我们可以在不删除和不重建现有视图的情况下,在工程图中完成替换零件或装配体. 工程视 ...

  4. sql查询非ascii字符_SQL替换:如何在SQL Server中替换ASCII特殊字符

    sql查询非ascii字符 One of the important steps in an ETL process involves the transformation of source dat ...

  5. mysql 空集 赋值_如何在MySQL查询中替换“空集”?

    要替换不存在的记录,请在MySQL中使用COALESCE.COALESCE将有助于替换NULL值.让我们首先创建一个表-create table DemoTable -> ( -> Cod ...

  6. python中变量替换_如何在python类中替换变量?

    在类的方法内部,您可以通过在 self 上设置属性来操作属性,就像在 __init__ 方法中一样 . 您需要做的就是在阅读后设置这些属性 . 您可能希望 read() 方法也采用文件名: def r ...

  7. java新建jframe_如何在Swing java中创建JFrame模型

    回答(11) 2 years ago 下面是一些示例代码,它将在 JDialog 中显示 JPanel panel ,它是 Frame parentFrame 的模态 . 除了构造函数之外,它遵循与打 ...

  8. 3dmax如何拆分模型_如何在3D Builder中拆分3D模型。 Windows解决方案

    如何安全找回丢失数据的方法 1. 下载并安装B计划数据恢复软件. 2. 运行恢复软件,点击"深度扫描". 深度扫描是绕过文件系统直接从硬盘.U盘.SD卡等设备底层恢复数据,因此使用 ...

  9. 如何在SteamVR 2.x 中使用自定义手部模型

    根据学员朋友的反馈,新增3节加餐课时,关于如何在新版SteamVR中基于Skeleton Input实现手部模型的替换 在VR应用程序中,要呈现自制的手部模型,传统的方式是直接将模型导入,放置在手柄控 ...

最新文章

  1. easyui 消息框按钮文字修改
  2. 十个经典Java 集合面试题!
  3. Hadoop -- ES -- CURD
  4. 年方二八,人生的路口之上
  5. 【C语言简介】C语言的前世今生
  6. Centos 7.3 搭建php7,mysql5.7,nginx1.10.1,redis
  7. SAS接口互连完全指南
  8. 矩阵分解的推荐算法入门-好好看
  9. 多玩YY瞄准在线教育
  10. Python Playsound用法_艾孜尔江撰
  11. 华为工程师猝死,36岁,22月无休:比挣钱更重要的是活着
  12. 英语不好学计算机特长,指导:英语学不好,是因为你没养成这些好习惯
  13. 个人网站、公众号申请微信个人支付接口
  14. 计算机cpu intel,intel CPU后面带F是什么意思?Intel处理器后面带“F”含义详解
  15. 拨号服务器应用场景有哪些?
  16. Bluetooth 蓝牙介绍(三):低功耗蓝牙BLE空口协议Ⅰ
  17. Loadrunner之关联——用小故事理解
  18. LinuxC语言——通讯录
  19. 计算机没有autoCAD_计算机辅助设计3D软件大全autocad2010 2014 2018
  20. 毕业设计:基于SSM框架的新生报到数据可视化系统

热门文章

  1. stm32 hal 库组织分析
  2. LeetCode之路
  3. 图书馆管理系统UML建模
  4. 压测工具:redis-benchmark与memtier_benchmark
  5. java棋盘覆盖_棋盘覆盖问题实现
  6. EasyUI-DataGrid下数据库数字替换成文本信息显示以及不同状态显示不同颜色
  7. 攻防演练中常见的8种攻击方式及应对指南
  8. 重复文件清理软件:Umbrella for mac
  9. Ontology × DoraHacks 10万美金黑客松现已启航,在WEB3的世界里添“码”行空
  10. Codeforces Round #668 (Div. 2)E. Fixed Point Removal