3D游戏中人物换装解决方案
换装基本上是每个网游都必须有的一个功能,每种网游的做法都各有不同,有些是换掉整个模型,有些则是通过可以换掉模型的一个部分完成。前者属于整体换,相对简单些;后者则是通过部分替换实现,目前用的比较多,本文主要描述后者的。
在开始描述换装前,首先要具备骨骼动画的知识,如果对骨骼动画的原理不熟悉,换装是比较难以理解的。换装的核心其实并不在换上,而是要理解为什么能换,而这些都和骨骼动画密不可分。骨骼动画是通过关键帧驱动骨骼运动,随之依次调整每块骨头的朝向和坐标,骨头再带动顶点运动(为了高效,现在很多都使用GPU加速,这样就不需要修改顶点缓冲区了),蒙皮信息就描述了了每个顶点受哪些骨头的影响,以及他们的权重,这样骨骼动画就运动起来了。其他的原理先略过,google上解释比我的好,^_^。
目前一般网游的换装都是采用替换掉模型某个部分来实现的,脸型、头发、衣服、手套、裤子、裙子、鞋子等一般都和人物肉身做在一起,可以在需要时显示或隐藏对应部分。这里一般有一个原则,如果对应部分需要支持形变,则必须和肉身做到一起,因为必需要有蒙皮信息才能实现形变。
在我这个设计中,人物分成六个部分,分别是头发,头,上身,手,腿,脚。骨骼只采用一套,男女共用,动作也分开来,每个动作都可以驱动骨架。每个部分都需要包含蒙皮信息,但不需要骨架,因为骨架可以共用,不需要保存多份,动作也一样,也只要一份就可以了,想要实现高效的换装,骨架和动作一定要支持共享。在Ogre中,骨骼和动作被合起来放到一个skeleton文件中,为了换装,自然要把这些东西分拆掉,难道天龙八部就是这个原因?(^_^,我猜的,可能是)
分成六个部分后,就可以在需要是把对应部分替换掉实现换装,刚才说了,换装的难点在于为什么能换。能换的原因是在接缝的地方,只要没有接缝,这个部分就好像被换掉了,那怎么保证没有接缝呢,那就要使接缝处的顶点受到骨头影响的权重保持一致,只要一致了,换装就可以实现了。
再说点题外话,一般手里拿的武器属于挂接物体,不属于换装范畴,挂接相对来说更简单一点,创建一个节点绑定到某块骨头就可以了,这类物体的共性是物体只有刚性变化。还有一些换装是通过换模型的贴图来完成。总之,换装如果不考虑效率和资源共享并不难,换装的原理是何骨骼动画相关的,当然这只适用于本文提到的换装方式,如果你有其他更巧妙的换装方法,请告诉我,一起分享啊,^_^。
3D游戏中人物换装解决方案的更多相关文章
- 【AS3 Coder】任务六:人物换装(纸娃娃)系统的制作
使用框架:AS3(Flash Professional CS5.0及更高版本 + Flash Buider)任务描述:了解人物换装系统的制作原理难度系数:2 本章源码下载:http://www.iam ...
- Unity 之 人物换装
http://www.cnblogs.com/mcwind/archive/2011/02/18/1957453.html 原理 一. SkinedMeshRender:该对象负责网格绘制.主要数据 ...
- 3D游戏中各种空间变换到底是怎么回事
每一个游戏可以呈现炫丽效果的背后,需要进行一系列的复杂计算,同时也伴随着各种各样的顶点空间变换.渲染游戏的过程可以理解成是把一个个顶点经过层层处理最终转化到屏幕上的过程,本文就旨在说明,顶点是经过了哪 ...
- 3D游戏中的画质与效率适配
哪里来的需求? 众所周知,由于不同的设备配置不同.导致其CPU和GPU处理能力有高有低.同样的游戏想要在所有设备上运行流畅且画面精美,是不可能的.这就需要我们针对不同的设备能力进行画质调节,以保证 ...
- Unity中Avatar换装实现
http://www.cnblogs.com/herenzhiming/articles/6533162.html
- Blender建模与游戏换装(转载文)
本文转载自https://my.oschina.net/huliqing/blog/880113?hmsr=toutiao.io 如果本文涉及侵权行为,请原作者联系博主邮箱,我将及时进行删除处理 博主 ...
- 3D 沙盒游戏之人物的点击行走移动
前言 在 3D 游戏中,都会有一个主人公.我们可以通过点击游戏中的其他位置,使游戏主人公向点击处移动. 那当我们想要实现一个"点击地面,人物移动到点击处"的功能,需要什么前置条件, ...
- Unity3D教程:换装方法
http://www.manew.com/4136.html 游戏内的角色,能够像纸娃娃换装那样子让玩家可以为自己的角色改变外观,一直是相当受欢迎的功能:一般而言,我们建好的 3D 模型,如果要将其中 ...
- 转载:[转]如何学好3D游戏引擎编程
[转]如何学好3D游戏引擎编程 Albert 本帖被 gamengines 从 游戏引擎(Game Engine) 此文为转载,但是值得一看. 此篇文章献给那些为了游戏编程不怕困难的热血青年,它的 ...
随机推荐
- UITableView基础入门
新建一个Single View Application 添加一个空类如下: using System; using UIKit; using Foundation; namespace BasicTa ...
- C#基础系列:反射笔记
前言:使用反射也有几年了,但是一直觉得,反这个概念很抽象,今天有时间就来总结下这个知识点. 1.为什么需要反射: 最初使用反射的时候,作为小菜总是不理解,既然可以通过new 一个对象的方式得到对象,然 ...
- Linux 如何搭建Lamp的服务环境
在介绍虚拟机的安装使用之前,我们先认识一下LINUX中LAMP是什么的缩写 L--Linux A--Apache M--Mysql P--PHP 虚拟机的安装百度有详细的介绍,非常简单的,这 ...
- Elasticsearch + Logstash + Kibana 搭建教程
# ELK:Elasticsearch + Logstash + Kibana 搭建教程 Shipper:日志收集者.负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来,输出到Redis暂存 ...
- Java类加载器( 死磕7)
[正文]Java类加载器( CLassLoader )死磕7: 基于加密的自定义网络加载器 本小节目录 7.1. 加密传输Server端的源码 7.2. 加密传输Client端的源码 7.3. 使 ...
- Routine Subroutine Coroutine 子程序 协程
https://en.wikipedia.org/wiki/Subroutine In computer programming, a subroutine is a sequence of prog ...
- struts2的核心和工作原理 (转)
转自--------http://blog.csdn.net/laner0515/article/details/27692673 在学习struts2之前,首先我们要明白使用struts2的目的是什 ...
- github多用户提交错误Permission to repo denied to
背景:同一台电脑的public key同时添加到了github的两个账户,导致user1的仓库没法正常提交. 解决办法:为两个账户分别配置ssh key,配置~/.ssh/config文件(windo ...
- windows与mac共享文件
实际操作环境是win10实体机与mac10.10虚拟机共享文件. 需要两步操作: 在win10中设置一个共享文件夹: 在mac中点击Finder——窗口左侧的列表——共享的——共享屏幕——输入用户名密 ...
- 剑指Offer:树的子结构【26】
剑指Offer:树的子结构[26] 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 解题思路 分为两步: 第一步:在树A中找到和树B的根节点的值一 ...