unity mmd不支持android,MMD模型导入Unity的解决方案

前言

学了Unity后,总是感觉缺少资源,包括人物、物品模型、动作数据、贴图、特效,各种插件,还被骗去学了几天各种美术软件。

说起模型和动作数据,就又想到MMD,毕竟有那么现成的资源,虽然不能商用,但用来学习是再好不过了。

于是上网找了些方案,在此做一个记录。

操作

之前看傅老师的视频,用的是成熟的插件,是最快的方案,但插件的体积太大,功能太完善,就想自己导出FBX文件。

FBX格式可以包含模型、动作数据,和MMD分为多个格式不同,并且可以被Unity直接识别使用。

我准备用Blender导入MMD模型并导出至Unity,前面步骤参照的是玩游戏不如跳舞系列:MMD到Blender到UE4,资源导入一条龙文章。

导入Blender

首先下载Blender,前面文章用的是2.79,我用的是2.8,可以在官网下,也可以在Steam平台下载。

打开软件,如果是英文界面,自己去找教程调整为中文界面。

开始会送灯光、摄像头、立方体各一个,用Shift全选,然后鼠标移动到视图窗口按键盘X删除物体。

ee9befe44a2a  然后下载 这里下载。

下载后准备安装插件,找到Blender的文件夹(Steam可以直接右键属性->浏览文件夹),路径在Blender\2.80\scripts\addons,将mmd_tools文件复制到这个文件夹中。

然后回到Blender中,进行如下步骤:

1.菜单栏编辑按钮,点击设置

2.点插件按钮,搜索mmd_tools插件

3.确定插件已经勾选

4.然后在窗口左下角的汉堡菜单中点击保存用户设置

ee9befe44a2a  此时在视图窗口按N,可以在呼出右侧栏,有MMD选项:

ee9befe44a2a,点击Model下的Import按钮,即可导入模型,注意缩放调整为0.1

ee9befe44a2a

这里我用神帝宇的骑士符华模型,可根据需要自行选择模型  导入后为白色模型,不过贴图其实已经贴上了,视图中点击模型的网格(Mesh),再换成纹理绘制模式即可看到彩色的模型,不过这并不重要。

相对于其他格式,pmx格式有个特点,就是只有一个Mesh,我们用PMXEdit改模时用的“绞”模式,也是根据纹理(Material)选择显示/不显示的;这一点从模型存储上就已经决定了,每个纹理都会记录自己的顶点偏移数,例如第一个纹理“首”会记住前N个顶点属于自己,第二个纹理会记录,前N到M个顶点属于自己,以此类推。

这却不总是我们想要的,例如希望模型上的某个网格,例如裙子、或头饰,在某些需要的时候隐藏,这时候一体的网格做不到这种效果,所以我们要拆分网格:

ee9befe44a2a  我们可以在视图窗口直接点击网格,或者在继承树下找到网格,成功时会显示橙色的描线,之后点击[Separate By Materials]根据材质分离网格,等待数秒后,即可再继承栏看到网格被拆分:

ee9befe44a2a

Mesh被拆分,并且物件可被单独选择

导出前还有一件事,MMD的骨骼是用索引确定父子层级的,因此骨骼重名是有可能的,这会导致转换为Humanoid时,一条手臂识别不出来,因此要将骨骼重命名;在Github中已有别人写好的脚本,将.py文件下载下来,随意储存在一个地点,然后返回Blender,将鼠标放在视图窗口任意一个角落,当鼠标变为十字时点击拖拽出一个新的窗口,将窗口改变为脚本窗口:

ee9befe44a2a  点击打开新文本,大概刚刚下载的.py文件,然后在继承栏点击arm层,再点运行脚本:

ee9befe44a2a  没有报错既是运行成功。

然后就可以导出模型了,框选所有,包括网格和骨骼,然后点击导出为FBX:

ee9befe44a2a  选择好输出的文件夹,主标签中,勾选选定的物体,坐标系按照图示,改为Unity的左手坐标系,Shift多选骨骼和网格,路径模式选择复制,并将纹理内嵌

ee9befe44a2a  事实证明纹理内嵌在这里并不好使,但Unity中可以自己贴进去,无碍。

然后选择“骨架”标签,将[Add Leaf Bones]消勾,否则每次导出都会新增一堆尾骨骼。然后导出即可

ee9befe44a2a

Unity处理流程

我们打开Unity并新建一个放模型的文件夹(和在MMD中一样),将新建好的FBX模型,以及贴图文件都放到新文件内。

点击模型文件,将模型转换为Humanoid:

ee9befe44a2a  如果之前都按步骤进行,花上一些时间(几秒几十秒)就可完成,最多出现黄色的Warning,而不会有红色的Error。

理论上现在就可以套接任何Humanoid的动作数据了,不过现在有两个问题:1.模型是白色的;2.头发、衣服的物理不正确。

首先贴图问题,虽然我们用了内嵌纹理,但贴图并不会帮我们好好贴上。

这个既好解决也不好解决,可以发现在导入模型的文件夹中,出现了一个新的Materials文件夹,里面放着材质,和MMD中同名,我们对照着Blender或将模型导入Pmxedit,将所有材质的Albedo一一放上贴图就好。

操作很傻瓜化,就是有些麻烦,有些模型还好,有些模型有五十多个纹理,暂时没有什么好的解决方案,就这样吧。

费了半天劲贴好贴图后,人物就是彩色的了,此时放上动画控制器,再给点网上收集的动作,就可以运动了:

ee9befe44a2a  现在有个问题,就是物理,符华我已经改过了,衣服另外一侧和头发已经好很多了,右侧的那个妮莎没改过,可以发现裙子和头发很僵硬。

我在傅老师视频中看到的解决方案是用Unity自带的Cloth组件,需要将裙子、披风之类的和主体模型分开导出,要变比例,等等等,感觉有些麻烦,于是用了另外一种方法:动态骨骼。

动态骨骼是Unity上的一个收费插件(可以去百度一下弄个先学一下),上手简单(我直接在B站上搜了Dynamic Bone)。

动态骨骼

使用方法参照上面的视频即可,我这里只是简单说一说。

将下载下来的unitypackage文件导入Unity。

然后找模型中需要动态的根节点:例如头发根部、披风固定点、裙子固定点、尾巴根之类的。

寻找方法就是打开骨骼层级,看位置差不多就移动、旋转几下。

头发不止有一个,例如这个符华就包括侧马尾、后马尾、刘海、侧发等共五个头发:

ee9befe44a2a  选择这几个根骨后,创建动态骨骼组件,并逐个将根骨放到Root参数中:

ee9befe44a2a  此时运行,即可发现头发已经出现物理,移动人物,尝试调节下面的参数。

同样方法给裙子和披风上物理,不过出现了新问题:穿模。原因是动态骨骼不知道该和谁碰撞。

该插件还提供了一个组件,叫做Dynamic Bone Collider,可以上胶囊体碰撞框,根据需要增加碰撞胶囊,然后在Dynamic Bone中指定碰撞胶囊的个数和具体对象即可。

ee9befe44a2a

动作

不止模型,动作文件也可以导入Unity,可以拉状态机,可惜我手头好用的动作文件太少,只有几个走路的。

做法:首先找一个最基础的骨骼模型,例如这个:

ee9befe44a2a  骨骼和网格数量太多会导致动作文件大小激增,所以不需要太多的网格面,以及头发、裙子等骨骼。

按照之前的流程处理,不过不需要分离网格,作为整体即可;

然后在继承层级中,选择arm下面的任意一个成员:姿态、骨骼组、mesh都行,点击import动作::

ee9befe44a2a  导入VMD文件,不过别忘了缩放要和模型的缩放一致:

ee9befe44a2a  成功后尝试调整时间线,如果模型运动正常,即成功完成任务,正常导出即可:

ee9befe44a2a

如果动作名称乱码,可在导出前后调整,在Unity中转换为Humanoid即可用给其他Humanoid模型(转换失败可能是忘了给骨骼用脚本重命名了):

ee9befe44a2a

总结

借助各种转换,从MMD、虚幻商城、某宝解决了模型和动作的燃眉之急,下一步想弄一套好用的动作状态机。

model: 符华黑骑士配布版 神帝宇

Nisha Labyrinth (Normal) Requieus

モブ十字軍騎士1100セット Tansoku102cm

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android中的 listview,Android中ListView的初步认识(一)

ListView是安卓开发中常用的组件之一,它的作用是在一个垂直的列表中展现出所需的项目。接下来,我们看一下ListView的实现方法:第一种 是常见的在XML中定义然后在activity中使用findViewById来获取的方式(这个相当基础了,直接代码)…

android开发app初始化,安卓快速开发框架(一)XBaseAndroid初始化使用

XBaseAndroid如果您需要使用最新版可以去github查看。该文章描述的是1.0.9.4版本。使用AndroidStudio 3.0创建一个新的安卓项目如果您不知道如何创建,请猛戳此处。配置仓库引用项目结构.png点击build.gradle(Project),添加以下maven仓库。allprojects {r…

Python之模块与包(下)

1、什么是包 #官网解释 Packages are a way of structuring Python’s module namespace by using “dotted module names” 包是一种通过使用‘.模块名’来组织python模块名称空间的方式。 #具体的:包就是一个包含有__init__.py文件的文件夹,所以其实我…

接口测试学习——操作MySQL

第一步要导入第三方的jar包。(jemeter不能直接连接MySQL) 操作方法就是点击“测试计划”,右侧展开的页面中选择【浏览】,选择MySQL的jar包。导入即可。 第二步:创建数据库链接的配置:MySQL的路径URL、端口号…

html5网页自动滚动,Html5 滚动穿透的方法

问题背景:网站需要在移动端完成适配,针对移动端H5以及web端采用的都是bluma这种flex布局解决方案在H5中使用的列表采用的是 react-virtualized 来绘制表格为了展示表格中单行数据的具体详情,通常的解决方案是采用新页面或者是弹窗来完成。这里采用的是弹…

mac如何看html5视频播放器,苹果Mac系统看HTML5视频教程介绍

上一回,小编教了大家一个Mac用 HTML5 免费看优酷和土豆等付费视频,这回小编又找到一个用HTML5看视频的好方法,很多很好用的资源,你可以在Mac上看各种地方台的直播以及乐视、凤凰卫视、TVB、东森等港澳台电视节目哦!大部…

html中设置负边距的意义,css负边距之详解

自从1998年CSS2作为推荐以来,表格的使用渐渐退去,成为历史。正因为此,从那以后CSS布局成为了优雅代码的代名词。对于所有设计师使用过的CSS概念,负边距作为最少讨论到的定位方式要记上一功。这就像是在线纹身-每个人都会做&#x…

warning: expression result unuesd 可能原因是函数忘了加括号,

转载于:https://www.cnblogs.com/chulin/p/9082833.html

vue基础18(vue-cli脚手架项目中组件的使用)

vue-cli脚手架项目中组件的使用 在webpack-simple模板中,包括webpck模板。一个.vue文件就是一个组件。 为什么会这样呢?因为webpack干活了!webpack的将我们所有的资源文件进行打包。同时webpack还能将我们的html(template&#xf…

js和layerjs配合实现的拖拽表格列

前几天想着实现表格列的拖拽 写了个例子 一直不完美 经过修改感觉还算完美了 拖拽过程不会复制文字并且还能实现layerjs本身自带的表格排序功能。 1、首先引入layer.css jquery layui.all.js 2、布局页面 <div class"divT"> <table class"l…

计算机应用中的CAI,????按计算机应用的分类,CAI应属于()应用。

按计常见的企业法律组织形式有()&#xff1f;算机属于recoil固有的、应用I应应用本来的按计cant help but算机属于Destruction of the original forest leads to the ___ of many plants.应用I应应用flocks of的同义词按计Many birds ___ southeast in winter.支持、算机属于供…

(tmp 8) 0xff;

以下是阅读他人文章后&#xff0c;个人对计算 (tmp >> 8) & 0xff; 的理解&#xff1a; 将tmp转为二进制数 6322040->11000000111011101111000,向右移16位&#xff08;清掉该16位&#xff09;&#xff0c;且左边用0补足16位 00000000000000001100000&#xff0c;将…

请对比html与css的异同,css3与css2的区别是什么?

CSS为HTML标记语言提供了一种样式描述&#xff0c;定义了其中元素的显示方式。CSS在Web设计领域是一个突破。利用它可以实现修改一个小的样式更新与之相关的所有页面元素。CSS2.0是一套全新的样式表结构&#xff0c;是由W3C推行的&#xff0c;同以往的CSS1.0或CSS1.2完全不一样…

MySQL数据导入导出(一)

今天遇到一个需求&#xff0c;要用自动任务将一张表的数据导入另一张表。具体场景及限制&#xff1a;将数据库A中表A的数据导入到数据库B的表B中&#xff08;增量数据或全量数据两种方式&#xff09;&#xff1b;体系1和体系2只能分别访问数据库A和数据库B。附图&#xff1a; 实…

360桌面计算机,360桌面管理软件

360桌面管理是从360安全卫士中单独提取出来&#xff0c;让你无需安装360安全卫士就能快速使用桌面助手整理自己的桌面。【功能特色】1、一键整理桌面&#xff0c;眨眼之间变清爽360桌面助手采用收纳盒进行分类管理&#xff0c;支持一键整理电脑桌面&#xff0c;用户只要点击“桌…

基于51的串行通讯原理及协议详解(uart)

串行与并行通讯方式 并行&#xff1a;控制简单&#xff0c;传输速度快。线多&#xff0c;长距离成本较高且同时接受困难。 串行&#xff1a;将数据字节分成一位一位的行驶在一条传输线上进行传输。如图&#xff1a; 同步与异步串行通讯方式 同步串行通讯方式&#xff1a;同步…

计算机四级考试题数据库,计算机四级考试《数据库系统工程师》试题及答案

计算机四级考试《数据库系统工程师》试题及答案计算机四级备考工作正在火热进行中&#xff0c;为帮助考生们更好地复习备考&#xff0c;以下是百分网小编搜索整理的一份计算机四级考试《数据库系统工程师》试题及答案&#xff0c;供参考练习&#xff0c;预祝考生们考出自己理想…

二层环路保护,RRPP多环的配置

作者:邓聪聪 组网需求&#xff1a; 局域网中&#xff0c;由A/B/C/D构成RRPP域1换网络结构&#xff0c;要求环网机构中的任意两条线路中断都不能影响业务。 配置思路&#xff1a; 环路由两部分组成&#xff0c;ring1、ring2&#xff0c;B为环1的主节点&#xff0c;G0/0/2为主端口…

如图所示是一种轧钢计算机控制系统,高速线材厂轧钢工艺培训(活套)

原标题&#xff1a;高速线材厂轧钢工艺培训(活套)活套现代高速线材轧机为保证产品尺寸精度&#xff0c;采用微张力及无张力轧制&#xff0c;以消除轧制过程中各种动态干扰引起的张力波动和由此引起的轧件尺寸波动。由于精轧机组为集体传动&#xff0c;故精轧采用微张力轧制&…

Linux服务部署之NTP时间服务器

Linux服务部署之NTP时间服务器&#xff1a; 服务器端IP&#xff1a;192.168.11.119 client端Ip&#xff1a; 192.168.11.101 先安装服务器端ntp: 首先先查看是否安装了ntp时间服务器; ~]# rpm -q ntp >查看是否安装了ntp服务器&#xff1b; 如果没有&#xff0c;安装服务器…