换装基本上是每个网游都必须有的一个功能,每种网游的做法都各有不同,有些是换掉整个模型,有些则是通过可以换掉模型的一个部分完成。前者属于整体换,相对简单些;后者则是通过部分替换实现,目前用的比较多,本文主要描述后者的。

在开始描述换装前,首先要具备骨骼动画的知识,如果对骨骼动画的原理不熟悉,换装是比较难以理解的。换装的核心其实并不在换上,而是要理解为什么能换,而这些都和骨骼动画密不可分。骨骼动画是通过关键帧驱动骨骼运动,随之依次调整每块骨头的朝向和坐标,骨头再带动顶点运动(为了高效,现在很多都使用GPU加速,这样就不需要修改顶点缓冲区了),蒙皮信息就描述了了每个顶点受哪些骨头的影响,以及他们的权重,这样骨骼动画就运动起来了。其他的原理先略过,google上解释比我的好,^_^。

目前一般网游的换装都是采用替换掉模型某个部分来实现的,脸型、头发、衣服、手套、裤子、裙子、鞋子等一般都和人物肉身做在一起,可以在需要时显示或隐藏对应部分。这里一般有一个原则,如果对应部分需要支持形变,则必须和肉身做到一起,因为必需要有蒙皮信息才能实现形变。

在我这个设计中,人物分成六个部分,分别是头发,头,上身,手,腿,脚。骨骼只采用一套,男女共用,动作也分开来,每个动作都可以驱动骨架。每个部分都需要包含蒙皮信息,但不需要骨架,因为骨架可以共用,不需要保存多份,动作也一样,也只要一份就可以了,想要实现高效的换装,骨架和动作一定要支持共享。在Ogre中,骨骼和动作被合起来放到一个skeleton文件中,为了换装,自然要把这些东西分拆掉,难道天龙八部就是这个原因?(^_^,我猜的,可能是)

分成六个部分后,就可以在需要是把对应部分替换掉实现换装,刚才说了,换装的难点在于为什么能换。能换的原因是在接缝的地方,只要没有接缝,这个部分就好像被换掉了,那怎么保证没有接缝呢,那就要使接缝处的顶点受到骨头影响的权重保持一致,只要一致了,换装就可以实现了。

再说点题外话,一般手里拿的武器属于挂接物体,不属于换装范畴,挂接相对来说更简单一点,创建一个节点绑定到某块骨头就可以了,这类物体的共性是物体只有刚性变化。还有一些换装是通过换模型的贴图来完成。总之,换装如果不考虑效率和资源共享并不难,换装的原理是何骨骼动画相关的,当然这只适用于本文提到的换装方式,如果你有其他更巧妙的换装方法,请告诉我,一起分享啊,^_^。

3D游戏中人物换装解决方案的更多相关文章

  1. 【AS3 Coder】任务六:人物换装(纸娃娃)系统的制作

    使用框架:AS3(Flash Professional CS5.0及更高版本 + Flash Buider)任务描述:了解人物换装系统的制作原理难度系数:2 本章源码下载:http://www.iam ...

  2. Unity 之 人物换装

    http://www.cnblogs.com/mcwind/archive/2011/02/18/1957453.html  原理 一. SkinedMeshRender:该对象负责网格绘制.主要数据 ...

  3. 3D游戏中各种空间变换到底是怎么回事

    每一个游戏可以呈现炫丽效果的背后,需要进行一系列的复杂计算,同时也伴随着各种各样的顶点空间变换.渲染游戏的过程可以理解成是把一个个顶点经过层层处理最终转化到屏幕上的过程,本文就旨在说明,顶点是经过了哪 ...

  4. 3D游戏中的画质与效率适配

      哪里来的需求? 众所周知,由于不同的设备配置不同.导致其CPU和GPU处理能力有高有低.同样的游戏想要在所有设备上运行流畅且画面精美,是不可能的.这就需要我们针对不同的设备能力进行画质调节,以保证 ...

  5. Unity中Avatar换装实现

    http://www.cnblogs.com/herenzhiming/articles/6533162.html

  6. Blender建模与游戏换装(转载文)

    本文转载自https://my.oschina.net/huliqing/blog/880113?hmsr=toutiao.io 如果本文涉及侵权行为,请原作者联系博主邮箱,我将及时进行删除处理 博主 ...

  7. 3D 沙盒游戏之人物的点击行走移动

    前言 在 3D 游戏中,都会有一个主人公.我们可以通过点击游戏中的其他位置,使游戏主人公向点击处移动. 那当我们想要实现一个"点击地面,人物移动到点击处"的功能,需要什么前置条件, ...

  8. Unity3D教程:换装方法

    http://www.manew.com/4136.html 游戏内的角色,能够像纸娃娃换装那样子让玩家可以为自己的角色改变外观,一直是相当受欢迎的功能:一般而言,我们建好的 3D 模型,如果要将其中 ...

  9. 转载:[转]如何学好3D游戏引擎编程

      [转]如何学好3D游戏引擎编程 Albert 本帖被 gamengines 从 游戏引擎(Game Engine) 此文为转载,但是值得一看. 此篇文章献给那些为了游戏编程不怕困难的热血青年,它的 ...

随机推荐

  1. Dropout: A Simple Way to Prevent Neural Networks fromOverfitting

    https://www.cs.toronto.edu/~hinton/absps/JMLRdropout.pdf Deep neural nets with a large number of par ...

  2. Java版TicTacToe

    MainFrame.java package com.bu_ish; import java.awt.BorderLayout; import java.awt.Color; import java. ...

  3. Dynamic Web Module to 3.0 报错

    一.问题 使用maven项目创建的webapp项目Dynamic Web Module 默认是2.3. 当我们要切换到3.0的时候出现这个错误. 二.解决 1.点击进入Navigator view ( ...

  4. 一个测试基础面试题——如何测试web银行开户

    之前面试被问到过这样一个问题,自己答的都是一些UI界面上的case,看了一些大神的关于这类面试题的总结才知道自己差的不是一点半点,今天也总结下. 内管银行开户,有账号.用户名.用户证件类型.证件号三个 ...

  5. servlet从jsp到jsp实现例子

    已登录页面为例子: 1.login.jsp <%@ page language="java" contentType="text/html; charset=UTF ...

  6. bootstrap 学习笔记(3)---- 代码

    这节讲的是代码: 1.基本实例 <code></code>  <pre></pre> <kbd></kbd> 应用如下 1.Fo ...

  7. ubuntu16.04 跑Apollo Demo

    1.安装docker(参考网址:https://docs.docker.com/install/linux/docker-ce/ubuntu/) Uninstall old versions Olde ...

  8. IO多路复用模型之epoll实现机制

    设想一下如下场景:有100万个客户端同时与一个服务器进程保持着TCP连接.而每一时刻,通常只有几百上千个TCP连接是活跃的(事实上大部分场景都是这种情况).如何实现这样的高并发? 在select/po ...

  9. 洛谷 P3803 多项式乘法(FFT) —— FFT

    题目:https://www.luogu.org/problemnew/show/P3803 终于学了FFT了! 参考博客:https://www.cnblogs.com/zwfymqz/p/8244 ...

  10. Spring Boot配置多个DataSource

    使用Spring Boot时,默认情况下,配置DataSource非常容易.Spring Boot会自动为我们配置好一个DataSource. 百牛信息技术bainiu.ltd整理发布于博客园 如果在 ...