公司的新游戏最近要实现一个换装系统,与开发的程序讨论了一下,发现在unity下实现换装还是比较容易的。这里综合公司的代码和网上的讨论,把实现的思路简单说一下。

先是背景介绍。我们首先明确一些基本术语:

  • bone:骨骼动画中人或者物体的形体结构,动画看成是bone连接处关节的运动。
  • mesh:可以理解为物体表面,因为3D模型中表面都是由一个个小的网格(mesh)拼接。成
  • 蒙皮:将mesh顶点与bone绑定到一起,这样bone运动时,mesh才会跟着动。
  • Animator:动画编辑器。unity 5中基于的是最新的Mechanim动画系统,它具有retargeting功能,可以方便实现在多个角色间重用动画。Animator包含Animator Controller和Avatar两个元素,前者定义使用那些动画素材及如何播放,后者是Mechanim系统可识别的骨骼结构。
  • SkinnedMeshRenderer:负责蒙皮计算,在Animator每帧指定的bone位置,计算相应的mesh顶点位置,并结合材质进行渲染。它有三个关键元素:bone, material, mesh,分别是对应的骨骼、材质、网格信息。

然后结合上述概念,我们来谈换装的实现。

首先要将人物拆成不同部件,如脑袋、头发、身体,每个部件单独替换。我们先定义一个人物对象,因为它是活动的,所以有相应的Animator和Avatar。在Animator下面挂载三个SkinnedMeshRenderer,分别对应脑袋、头发、身体三个部件,从而实现对三部分分别渲染。这样,在换装时我只需替换相应SkinnedMeshRenderer的material和mesh属性即可。

对上述方案还可以做材质球合并减少draw call。我们在渲染时,可以将三个部件的material、mesh和bone都做合并,再赋给新创建的SkinnedMeshRenderer,这样只用1次draw call。对于人物众多的场景,这样可以大量减少draw call,如果有10个部件,就可以降低到原来的1/10。其中合并material就是合并texture,具体做法是:新建一个material,使用的shader与被合并的material使用的shader相同,其他属性也一致,然后将texture合并到一张大texture,赋给新建的material;合并后的mesh还需重新计算uv。

参考资料:

  • 技巧| Unity中Avatar换装实现

  • 浅谈角色换装功能–Unity简单例子实现

  • Unity中的网格与材质球合并

Unity换装系统实现相关推荐

  1. Unity换装系统(SkinnedMeshRenderer)

    [SiKi学院Unity]Unity换装系统[上] [SiKi学院Unity]Unity换装系统[中] [SiKi学院Unity]Unity换装系统[下] 课程资料.zip (71.93MB) uni ...

  2. 【Unity3d基础】Unity换装系统(1)

    引言 最近项目需要开发换装系统,做了一些前期的调研.换装系统主要应用与MMORPG游戏中,除了常规的换衣服,发型,翅膀之类的,现在一些次时代的MMORPG游戏加入了捏脸,改变五官等比较复杂的换装系统. ...

  3. Unity 换装系统

    Github:https://github.com/pinzeweifen/demo/tree/master/Unity/Replacement%20Dress 效果: 测试: using Syste ...

  4. 【Unity】siki公开Unity相关课程下载目录

    一.最新课程 Shader Forge入门 链接: https://pan.baidu.com/s/1n8324ujcUYmeMb40si30RQ 密码:uxuq 强大的UI编辑器 - FairyGU ...

  5. Unity动画系统经验谈:换装系统与骨骼调节

    这里总结一下,自己使用Unity以来的心得,大部分属于随手解决但还有印象或者觉得效果不错. 状态机与状态机设计 角色的状态机以0层作为主层,然后以待机作混合树为中心进行切换. 主层中会有一些复杂一些的 ...

  6. unity人物模型换装系统浅析

    *****最近研究了一下unity中人物模型的换装系统感觉挺有意思的!特意来分享给大家.*****首先给大家介绍一下3D人物模型的相关知识:模型一般分为静态模型和动态模型嘛!静态模型简单的来说就是不会 ...

  7. [Unity实战]换装系统的原理

    原文链接:http://blog.csdn.net/yueding521125/article/details/16873431 在unity中实现换装的方式主要有三种: 1.换材质或换贴图 2.显示 ...

  8. Unity物体骨骼换装系统

    Unity的换装系统是为了优化Unity资源,增加游戏乐趣,换装有两种,一种是增添式换装,比如给人物加个武器,装备翅膀等等,另外一种就是下面我要说的更新式换装,比如更换皮肤,更换武器,更换装备等等,换 ...

  9. Unity SkinnedMeshRenderer 动态换装系统

    说在前面 本文只是实例说明了最基础的换装思路:刷新骨骼 完整的换装系统需要涉及到:Mesh合并.刷新骨骼.材质合并 直接上效果 动态换装需要了解SkinnedMeshRenderer动画如何播放. 本 ...

  10. Unity学习笔记(7) Unity2D骨骼动画制作流程

    用骨骼动画最大的好处就是方便之后做换装系统. 无论对3Dor2D游戏都是这样的. 这篇博文记录一下2D骨骼动画的制作流程,参考b站麦扣的系列教程: https://space.bilibili.com ...

最新文章

  1. DHTML中style的display和visibility属性
  2. Java Swing控件样式设置
  3. linux系统运维面试题
  4. 网页的一般布局(标题和脚注100%,内容宽度固定宽度px)
  5. 组织应该采用集中式发电机吗?
  6. JavaScript第一天学习
  7. Android获取手机及外设存储空间
  8. 刚刚有水了一道,用递归实现进制转换
  9. 【Chrome浏览器】常用快捷键整理
  10. [KMP]一本通(http://ybt.ssoier.cn:8088) 1698:字符串匹配
  11. 阶段3 3.SpringMVC·_04.SpringMVC返回值类型及响应数据类型_2 响应之返回值是String类型...
  12. 使用echarts来显示世界地图和全国地图,并且可以下钻层级
  13. xcode 怎么调用midi开发录音_直播_个人工作室入门_1K-2k价位录音编曲声卡推荐
  14. Android 4编程入门经典
  15. ArcGIS获取点图层对应栅格图层的栅格行列号(或属性值)
  16. oppo手机硬件测试软件,OPPO怎么测试手机硬件,只需要做这一步,进入工程模式...
  17. Android获取CPU使用率的几种方式
  18. 无法使用内置管理员账户打开应用商店
  19. Python编写尼姆游戏
  20. 写过的比较难受的题目

热门文章

  1. 钉钉群机器人通知中的图片,突然不显示了
  2. html id命名规范,关于Html class id 命名规范
  3. 五年50起并购、股价持续上扬,复盘IBM的物联网进化之路
  4. Tomcat修改server.xml中的context标签后无法启动
  5. python对时间序列的DataFrame数据按时间段进行切分求和
  6. AI 之路、回顾 2021,展望 2022 :当代青年的小烦恼
  7. 周日报名截止,翼支付杯大数据建模大赛16万大奖邀你来!!
  8. struts2架构网站漏洞修复详情与利用漏洞修复方案
  9. Jscript流程控制语句
  10. 做为一个程序员必看的文章 看看你做到了吗 王森:程序设计师真情忏悔录