《Honey Select2》甜心选择2解决方案
于游戏中的捏人系统, 很少有资料提到怎么做, 印象中只有《天涯明月刀》分享过. 前段时间关注了个VR资源分享的公众号, 经常推送HS的捏人作品, 所以才引发了我的好奇心, 决定一探究竟.
HS之所以能够有这么强的定制能力, 是因为第三方MOD工具的存在, 玩家可以自由导入导出游戏中的资源, 这也就为我们分析游戏的实现机制开了个后门.
上图中我们可以看到, 脸部有很多骨骼, 尝试把模型导出来, 对其进行分析:
针对鼻子上的骨骼, 进行平移/旋转/缩放, 嗯, 看起来捏脸就是这么回事了.
比如鼻翼骨骼影响这点顶点, 那我们对其调节就可以产生这样的效果:
再比如下巴
那骨骼都用来捏脸了, 面部的表情动画怎么办呢?
对模型资源的规格进行分析, 发现存在大量的morph动画. 也就是说, HS中的的头部骨骼, 全部是用于捏脸的, 表情动画使用MorphTargets驱动.
那身体总不能也用MorphTargets做动作吧?
对其模型资源进行析, 发现MorphTargets个数为0, 而骨骼数超越以往的经验值.
查看其蒙皮信息可以发现, 所有影响顶点的骨骼名字全部带有"_s_"字样, 其父骨骼都是不带"_s_"的同名骨骼. 也就是说, HS的身体骨架中, 父骨骼负责动画, 子骨骼负责蒙皮.
游戏中的女角色脸部有67项调节参数:
女角色身体共有34项调节参数, 其中2项为物理参数, 跟骨骼无关
我们来看看这些滑杆能不能跟骨骼一一对应上:
对于"鼻子整体上下"来说, 的确是只需要调节NoseBase的Y值就可以了, 我们需要做的就是根据滑杆在最大值和最小值之间进行线性插值.
对于"眉毛角度Z轴"的调节, 这时只调节一根骨骼就不对了, 需要左右对称着来. 也就是说, 有一些调节项需要同时调节左右对称的两根骨骼.
对于"眉毛左右位置", 如果在直线上两个端点之间进行插值, 很容易就跟面部三角形穿插了. 所以这里的插值路径只有最大值和最小值已经满足不了需求了, 而是需要按照曲线进行位置插值, 并且配合旋转插值贴合面部的法线方向. 也就是说, 一个调节项的插值可能是基于曲线(或多个关键帧), 而且可以同时影响骨骼Transform的多个分量.
眼睛的大小调节是最复杂的, 一共影响6根骨骼. 也就是说, 一个调节项是可以对应多根骨骼的.
我们总结一下, 脸型(或体型)调整原理就是:
本质上修改的是骨骼的Local Transform(Translation, Rotation, Scale)
一次只修改Local Transform的某个分量(或多个):Tx/Ty/Tz/Rx/Ry/Rz/Sx/Sy/Sz
使用滑杆在预设的调节范围之间进行插值
插值不一定是线性的, 可能是有多个关键帧
每个调节项可能对应不只一根骨骼
以此为指导思想, 继续结合ILSpy对HS进行逆向分析, 终于找到了骨骼的配置数据.
首先是骨骼分类表:
第1列, 类别编号: 每个编号代表UI上的一根滑杆. 重复出现的编号代表影响多根骨骼
第2列, 骨骼名
第3~11列, Transform Mask: 代表调节Bone Local Transform的哪些分量, 比如000000100代表只影响Sx, 即只缩放X轴
其次是骨骼调节关键帧表:
第1列: 骨骼名
第2~N列: 关键帧数据, 每一帧是9个float, 正好是一个Transform, 总共25帧.
可以说, I社的捏人系统, 最核心的就是这两张表格的数据了, 是他们这么多年捏人游戏的经验积累. 也正是这个原因, 他们舍不得每次新做一套骨架就重新调一版数据, 结果就是, 游戏中的骨架跟表格对不上:
游戏中的骨架, 不管是数量也好还是命名也好, 都跟表格对不上. 那这之间是怎么映射的呢?
原来是硬编码的, 真让人崩溃...好了, 那整个捏人的核心逻辑就搞清楚了:
根据骨骼分类表生成所有的调节滑杆, 并从预置的文件加载滑杆的默认值集合
如果滑杆值变了, 查分类表得到骨骼名(可能多个), 再根据骨骼名查关键帧表得到关键帧集合, 根据滑杆值插值出Local Transform
使用代码逻辑把老的Transform数据转换成新骨架能用的骨骼Transform
把骨骼Transform全部更新到模型上
尝试在UE4中使用PoseableMesh复刻了一下, 效果还不错:
PoseableMesh的问题是不兼容动画, 所以如果要修改SkeletalMesh的BoneTransforms话, 就只能在AnimationBlueprint里实现一个自定义的AnimNode了:
配上动画, 贴上材质, 效果就好多了:
(随便找了件衣服遮一遮)
最后, 顺便提一下捏人之外的东西, 因为对于角色的定制来说, 捏人起的作用还不如换一件衣服.
对衣服的资源进行分析可以发现两点值得学习的地方:
每件衣服都配有一个剔除掉被遮住的三角形的裸模, 一方面可以提升绘制性能, 一方面能避免衣服和皮肤两层三角形的穿插
裙摆/披风/长衫等都是共用同样的8条物理骨骼, 算是比较传统的布料模拟做法
挂件差不多都是StaticMesh, 最多带有物理骨骼, 直接挂在骨架挂点上, 可以跟随体型一起进行变换.
眼睛这里的Mesh有点扩张了, 分了很多层, 甚至有3个Mesh用来做眼泪的表现. 材质多了, 可以更换的样式自然也就多了:
头发分了前中后三部分, 每一部分可以单独隐藏或者替换, 配合大量的模型资源, 真正可以配出各种各样的发型, 更何况还有MOD的支持.
其它的类似皮肤/皱纹/眼影/腮红/唇彩/纹身/痣/晒痕/指甲等, 大多数都是换贴图, 没有多少技术上的复杂度, 但却是能够大大提升个性的功能:
通过GPA分析发现, 这些叠加的图层在运行时并没有独立的贴图:
所以并没有采用Decal的方式绘制, 而是跟皮肤贴图混合到了一起:
《Honey Select2》甜心选择2解决方案相关推荐
- 从甜心教主“炸”活中年男粉看企业如何让“沉睡数据醒来说话”?
"你一票,我一票,心凌80还唱跳."随着综艺某综艺的正式开播,如今已年近40的"甜心教主"用一首<爱你>,不仅让自己翻红,也让无数网友大声呼喊着&q ...
- 新酒饮赛道混战升级,果立方和RIO、贝瑞甜心有什么不同?
文|熔财经 作者| 青月 这两年的酒饮行业,新茶饮占尽了风头,可谓是资本市场的宠儿,不过酒,特别是低度酒这个赛道,与新茶饮相比毫不逊色. 据不完全的统计,从2016年至今,至少有23家低度酒品牌获得总 ...
- 甜心奶酪用英文怎么说_您组织中没有人会碰到什么奶酪,更不用说动弹了?
甜心奶酪用英文怎么说 没有人知道何时或如何,但是有一天,这种奶酪神秘地出现在了柏油路上. 没有人知道它是谁的. 没有人碰过它. 没有人扔掉它. 因此,它在那里坐着-一天变得越来越肮脏和强大.- a弱小 ...
- 《世界因你不同:李开复自传》引言:从心选择
<世界因你不同:李开复自传>引言:从心选择 图:李开复新书<世界因你不同:李开复自传>封面 CNET今晨从图书界偶然获得李开复即将出版的新书<世界因你不同:李开复自传&g ...
- 《世界因你不同:李开复自传》--引言 从心选择
n 选择的力量 2009年8月5日,美联航UA888次航班缓缓地在加利福尼亚州降落,我又一次来到了这座再熟悉不过的港口城市--旧金山. 我曾经在这里起飞.降落过无数次.现在,眼前的一切如同油画般 ...
- 【附源码】Python计算机毕业设计甜心驿站饮品信息管理
项目运行 环境配置: Pychram社区版+ python3.7.7 + Mysql5.7 + HBuilderX+list pip+Navicat11+Django+nodejs. 项目技术: dj ...
- 【附源码】计算机毕业设计SSM甜心驿站饮品信息管理
项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...
- idea配置 Tomcat Deployment添加时没有Artifact...选择的解决方案
idea配置 Tomcat Deployment添加时没有Artifact...选择的解决方案 参考文章: (1)idea配置 Tomcat Deployment添加时没有Artifact...选择的 ...
- 语法制导的翻译是如何实现的_全球化企业应该如何选择机器翻译解决方案?
当你的客户遍布全球,该如何冲破语言阻碍呢? 即便借助机器翻译实现本地化,又该如何充分降本增效呢? 今天,我们就"全球化企业应该如何选择机器翻译解决方案"这一话题进行一些探讨. 早在 ...
最新文章
- 在Linux下安装RabbitMQ
- Mindmanager 甘特图杠上Mindmanager 鱼骨图
- UVALive6428 A+B【扩展欧几里得算法+GCD】
- oracle reverse 反转函数
- java文件读写的两种方式
- mongodb,redis,mysql 简要对比
- Android 使用图片铺满某个区域
- linux中的线程函数
- 下一代微服务(service Mesh)
- cisco 华三 对接_Cisco ACS 5.6与华为,H3C设备对接操作指引
- OPPO副总裁曝光Reno十倍变焦规格 能用上的安卓机皇不超过两个
- 在CentOS下为sqlplus和rman 添加rlwrap
- JQuery:视频+实战总结
- scala求集合相邻元素差值的最小值
- 中考在即,杂乱的书房
- Java基础(静态static)
- 最短路算法c++(dijsktra,floyd,spfa)
- 争对让望对思野葛对山栀注解_《笠翁对韵》注音注释(四支)
- jsd 多线程与socket网络通信
- Gitlab本地备份与远程机备份