零、效果展示

先来两张图

在线演示地址: https://showcase.ukylin.net/avatar/


3D换装有两种情况,一种是身体各部件(如头发、上衣、裤子、手套、鞋子等身体各部分),另一种是挂接件 (如耳环、武器等等)

一、换装原理

1、部件换装

3D的换装原理比2D简单多了。只需要满足三个原则就行。

1、使用同一套骨骼进行蒙皮。

2、每套模型在蒙皮的时候,骨骼的TPOSE要一致。

3、各部件接缝处要自然,一般是皮肤处接缝或者衣物遮挡处设计接缝。

我们在网上找到的支持换装的模型,都是符合上面的原则的。之所以把这三点列出来,仅仅是为了科普一下。

2、挂接件换装

挂接件换装其实就是在人的骨骼上找一个节点,挂上去就行。比如拿大剑的人物,我们就在其右手上找一个节点,将大剑挂在上面就行。

挂大剑的节点的一般制作方法:

由美术在3DMAX里面找一个适合的骨骼节点,然后在下面新建一个Dummy结点,调节Dummy节点的旋转、绽放、位移,使大剑能够以合理的姿势出现在人物手上。

这个方法最好的好处就是制作大剑动画的美术,可以将大剑挂到角色手上进行动画制作,这样制作出来的动画会非常到位。

二、换装实现

本DEMO框架采用《麒麟子惯用的框架》 可以先行了解。

1、资源

主要模型资源在assets/resources/Prefabs下面,assets/resources/Textures下面是对应的贴图。

2、Avatar

麒麟子在场景上留了一个Avatar节点,并挂接了Avatar.ts脚本。Avatar.ts脚本会顺应换装消息,并加载对应的模型信息。

其中最关键的代码为Avatar:changeBodypart函数,此函数主要做几件事情:

  • 根据传递过来的部件ID和套装ID,加载对应的模型prefab。
  • 加载成功后,实例化并挂接到Avatar节点上
  • 由于这个资源的模型导入的时候,材质是不带纹理的,因此我们需要加载对应的纹理并赋值给材质。代码:meshNode.getComponent(SkinningModelComponent).material.setProperty('albedoMap', tex._texture)就是关键所在。
changeBodypart(part: number, suitId: string) {let oldPart = this.bodyparts[part];if (oldPart) {oldPart.removeFromParent();oldPart.destroy();this.bodyparts[part] = null;}let partName = '';if (part == AvatarBodyparts.WEAPON) {partName = 'ch_we_hou_' + suitId;}else {partName = 'ch_pc_hou_' + suitId + '_' + AvatarBodyparts.getPartName(part);}loader.loadRes('Prefabs/' + partName, Prefab, (err, prefab) => {let node = instantiate(prefab);if (part == AvatarBodyparts.WEAPON) {//this._weaponPointR.addChild(node);}else {this.node.addChild(node);}this.bodyparts[part] = node;let meshNode = find('RootNode/' + partName, node);let albedoMapName = AvatarBodyparts.getNameOfBodypart(part, suitId) + '_d';loader.loadRes('Textures/' + albedoMapName, ImageAsset, (err, tex: ImageAsset) => {if (tex) {meshNode.getComponent(SkinningModelComponent).material.setProperty('albedoMap', tex._texture);}});});
}

3、HUD界面

assets/resources/HUD.prefab 是本DEMO的HUD层,所有按钮都在里面。

点击对应部位的按钮,HUD.ts会通过事件向Avatar.ts传递换装消息,Avatar.ts响应后会做出改变

4、MyInfo界面

点击右上角的?图标,会出现个人信息界面。此界面用于演示惯用框架的弹窗界面设计和留作者信息。

三、总结

1、麒麟子下载的FBX模型导入后,没有找到动画,挺奇怪。所以目前是静态的,武器挂接也无法实现。本DEMO只实现了部件换装。

2、后面麒麟子找到了带骨骼动画的FBX换装模型后,会再补一篇贴子。

3、本教程源码使用Cocos Creator 3D 1.1.1编写,若用其他版本打开,可能产生兼容问题

4、源码地址:https://gitee.com/qilinzi/creator3ddemos/avatar/

5、想第一时间想阅读到本文的朋友,可以关注我

麒麟子Cocos Creator 3D研究笔记三:角色换装(无动画)相关推荐

  1. 麒麟子Cocos Creator 3D研究笔记四:天空盒动态更换与IBL效果

    麒麟子Cocos Creator 3D研究笔记之材质IBL与天空盒动态切换 在线演示地址: https://showcase.ukylin.net/skybox/ 天空盒对于3D渲染场景来说,有着不个 ...

  2. 开始写一个新的专栏《麒麟子Cocos Creator 3D研究笔记》

    如题 麒麟子在2016年的时候,开启了自己的Cocos Creator之门,并发展出了自己的公司. 在Cocos Creator 3D来临之际,麒麟子再一次选择了提前跟进. 凭借着微弱的商业嗅觉,麒麟 ...

  3. 麒麟子Cocos Creator 3D研究笔记十:【qfw】开源的Extension Pack for Cocos Creator 3D

    零.写在前面 愿你活得烈马青葱,不为他人的目光所累 ---嗯! 阿子也不知道这个句子的原始出处,但就想把它分享给大家.专心写好自己的BUG,让别人说去吧! 在进入今天的正文之前,阿子想给大家聊聊最近使 ...

  4. 麒麟子Cocos Creator 3D研究笔记五:模型骨骼动画查看器

    负一.​先说两句 本文索引是负一开头,那是因为这一小节是​最后加上来的.为了不牵一发动全身,就这样最好了. 写文章每次要自称的时候,麒麟子三个字打着太费劲,以后文章中,我就叫自己阿子吧​. 大家从今天 ...

  5. 麒麟子Cocos Creator 3D研究笔记九:初尝Shader并实现边缘光(RimLight)

    零.先看一些图 图1:边缘光因子检查 图2:黄色,一般用于霸体效果 图3:红色,一般用于特殊技能特效 图4:白色,一般用于受击效果 图5:绿色,一般用于人物,NPC选中时高亮 看着群里的小伙伴们都很热 ...

  6. 麒麟子Cocos Creator 3D研究笔记零:从零开始入门并发布微信小游戏

    编辑器状态截图 不要在意名字,我临时借用的小游戏APPID 一.前言 Cocos Creator,我回来了. 2016年6月,大家都觉得Cocos Creator 2D不够成熟的时候,我就开始商用了. ...

  7. 麒麟子Cocos Creator 3D研究笔记七:骨骼动画上的挂接点

    注意手中的大棒 每个人心中有一个属于自己的游戏世界,麒麟子也不例外.拿到Cocos Creator 3D第一时间,就想撸点人物角色相关的.像换装.角色控制.血条.武器挂接之类的. 然而当我按照套路把角 ...

  8. 麒麟子Cocos Creator 3D研究笔记十一:实用Shader之单张纹理实现武器动态发光

    零.别看广告,看疗效 虽然标题叫武器发光,其实它还能实现魔法护盾.动态光柱等效果.别说话,看图! 阿子最近沉迷于学英语和写代码,可HIGH了. 一看时间,竟然已经十天没发稿了. 但这不能怪阿子,要怪就 ...

  9. 麒麟子Cocos Creator 3D研究笔记一:图片资源类型和加载

    图片资源在Cocos Creator 3D里面,有两种状态,一种用于3D纹理,另一种用于2D界面.如下图所示,sprite-frame用于2D,其余都用于3D. 如果你试图把一个标记为texture的 ...

最新文章

  1. ajax走error的条件,Ajax进入ERROR的部分条件总结
  2. 基于MEGA8的声音CLICK模块
  3. matlab求系统稳定时k的范围,Matlab大作业
  4. MATLAB观察日志(part1)--求极限
  5. 在 Windows 中,当一个应用程序窗口被关闭,该应用程序将会保留在哪里?
  6. 无服务器-构建现代应用程序的新方法
  7. “云原生全家桶“KubeSphere 如何让企业从容迈进云原生时代?
  8. iOS即时通讯输入框随字数自适应高度
  9. 记一次mysql中文字符乱码的问题排查
  10. mysql怎么换行_MySql的主从复制、主主复制
  11. 为什么从PhoneGap中逃离
  12. 微服务架构实战(五):选择微服务部署策略
  13. 学校计算机总帐和明细帐的表格,5教学仪器设备总账和明细账填写模板.doc
  14. 三菱plcfx5u指令手册_三菱PLC应用指令三菱FX5U-64MR/ES比较指令怎么写
  15. 1.Android系统源代码目录与系统目录
  16. 查询包含关系的SQL
  17. AI 智能皮影机器人
  18. 理解ZBrush中的笔触
  19. 美国移民局宣布H-1b签证新规 高学历申请者受益
  20. 什么是哈希冲突?如何解决?

热门文章

  1. 基于支持向量机SVM的脑部肿瘤识别,脑电波样本熵提取
  2. 解决华硕主板使用机箱前侧面板无声音问题
  3. 欢迎报名Rust China Hackathon 2022 达坦科技组
  4. java微信端html_H5微信网页授权java后端SpringBoot实现
  5. Java小例子——角谷猜想
  6. android 中间件开发
  7. 最短路径问题之Dijkstra算法趣解
  8. 序列检测器(moore、mealy、独热码三种写法)
  9. 编译udhcpc for ARM_linux
  10. 铁道部12306后台技术框架 完整异常栈信息以及技术缺点和漏洞