unity, 3dmax制作的morph(blendshape)导入unity中使用注意事项
在实现《乱纪元大冒险》(见:http://www.cnblogs.com/wantnon/p/4857072.html)中由于质子展开失败形成的变形几何体和眼睛。几何体经过一系列形变最后变成眼睛。这个显然是应该用morph(blendshape)来做了,恰好unity5是支持blendshape的。

例如上图中 正四面体 通过progressive morph依次变形为立方体、球体、眼球。
我的建模过程,首先创建那个 4段x4段x4段 的立方体,然后复制成三份,依次修改为 正四面体、球体 和 眼球。
将立方体修改为球体最容易,直接使用spherify(球化)修改器 即可,但要注意还需要修改一下平滑组,使球体法线变成完全圆滑的。
将球体修改为眼球的方法是先将眼球压细,然后再对各截面进行单独压缩。
将立方体修改为正四面体是最麻烦的,需要建两个正三角形面片,架设成如下样子:

其中一个水平放置,另一个与它成arccos(1/3)=70.5287793度角放置。
用上面这个支架比着,在线框模式下对立方体各截面进行缩放。最后得到重心正好与世界原点对其的正四面体。
另外注意当立方体一条边缩成正四面体一个顶点时,不要缩得太过火,真的把它缩成一个点就不好了,只要缩成一个远看像个点,但近看又是一条边就好了。
最后检查:
1,正四面体的Move值是否是(0,0,0)。
2,正四面体、立方体、球体、眼球 的Scale值是否全为(100,100,100),Rotate值是否全为(0,0,0)。
假如一个物体不满足scale值为(100,100,100),比如是(50,50,50),那一定要改成(100,100,100),但是改完之后发现物体变大了一倍,那怎么办?办法是进入顶点层级,选中所有顶点并进行scale,使缩小一倍。同理,Move和Rotate也都是这么搞。总之就是记住一点,永远不要在模型级别使用旋转、平移 和 缩放,而要在顶点级别去使用。为啥呢?因为morph只按顶点局部坐标进行混合,不会理采模型级别的整体变换。
为正四面体添加morpher修改器,可以看到许多变形通道,由于我现在只需要一个变形过程,即 正四面体->立方体->球体->眼球,所以只使用一个通道就够了。我们在通道0中依次把 立方体、球体、眼球 添加进去,它们会出现在下面的Progressive Morph的Target List中。然后调整通道0的值,就可以观察到变形过程:当值为0时是正四面体,当值为100/3时是立方体,当值为100/3*2时是球体,当值为100时为眼球。
由于我在unity里想用程序去控制morph进程,所以这里只是创建了morph,没有K动画。在unity里gameObject.GetComponent<SkinnedMeshRenderer> ().SetBlendShapeWeight (通道ID, blendShapeWeight)就可以对变形进度进行设置了,这里的通道ID和blendShapeWeight跟3dmax中的通道ID和通道值是完全对应的。
法线问题:
将带morph的模型通过fbx导入到unity之后,在默认设置下,变形过程中法线是不更新的。这会导致形状变对了但是光照效果不对。
解决办法如下:
(引自:http://docs.unity3d.com/Manual/class-Mesh.html)
There are two ways to import BlendShapes with normals:
1 Set Normals import mode to Calculate, this way same logic will be used for calculating normals on a mesh and BlendShapes.
2 Export smoothing groups information to the source file. This way, Unity will calculate normals from smoothing groups for mesh and BlendShapes.
If you want tangents on your BlendShapes then set Tangents import mode to Calculate.
我只试了第一种方法,即在unity的Import Settings中将Normals改成Calculate,这样可能性能会有所影响,而且未必能忠实地做到与3dmax中的法线效果一致,但对于我目前这个需求来说已经够了,所以就没再试第二种方法。
unity, 3dmax制作的morph(blendshape)导入unity中使用注意事项的更多相关文章
- Maya导入Unity的教程
原地址:http://www.cocoachina.com/gamedev/gameengine/2010/0601/1586.html 昨天已经发布了1Vr.Cn翻译的多维材质模型烘培入Unity ...
- Unity 3D中ToLua-UGUI使用说明、导入Unity流程、制作登陆界面
ToLua制作登录界面 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 请支持大神开发者:骏擎CP,蒙哥等奔 ...
- BMFont中文字体图集制作的方法~(for unity ngui)
BMFont中文字体图集制作的方法~(for unity ngui) 好吧~似乎这个问题困扰了很多人,游戏开始中文化是个不错的事儿啊,这里我就做下说明,如何制作中文字体图集~ 这里的字库图集的制作更多 ...
- 3D max模型导入unity 3D中注意事项
一.单位,比例统一 在建模型前先设置好单位,在同一场景中会用到的模型的单位设置必须一样,模型与模型之间的比例要正确,和程序的导入单位一致,即便到程序需要缩放也可以统一调整缩放比例.统一单位为米. ...
- 记录 Spine骨骼动画导入unity 步骤[unity3d 4.6.6版本 2d动画]
1:准备好unity使用Spine所需要的运行库,可到如下地址 https://github.com/EsotericSoftware/spine-runtimes/tree/master/spine ...
- 【Unity3D基础教程】给初学者看的Unity教程(四):通过制作Flappy Bird了解Native 2D中的RigidBody2D和Collider2D
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 在第一篇文章[Unity3D基础教程] ...
- 3ds Max光照纹理导入Unity的教程.
原地址:http://www.cocoachina.com/gamedev/gameengine/2010/0531/1581.html 相信这个3ds Max光照纹理导入Unity的教程对游戏设计师 ...
- 导入Unity插件时出现Failed to import package with error: Couldn't decompress package
导入Unity插件时出现Failed to import package with error: Couldn't decompress package 一开始以为压缩包本身有问题,坏了 后来发现在父 ...
- 【Unity】4.2 提升开发效率的捷径--导入 Unity 5.3.4 自带的资源包
分类:Unity.C#.VS2015 创建日期:2016-04-06 一.简介 Unity自带的资源包也称为标准资源包.换言之,Unity自带的所有标准资源包导入到Unity项目中以后,都会放在Pro ...
随机推荐
- centos yum命令报错
Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile Could not retriev ...
- Inno Setup入门(十六)——Inno Setup类参考(2)
Inno Setup入门(十六)——Inno Setup类参考(2) http://379910987.blog.163.com/blog/static/33523797201112755641236 ...
- 通过dbf文件恢复oracle
可能有些人会由于各种原因经常重装系统,但是系统里面总是有一些比较重要的软件在重装后就不能用了.比如oracle数据库,众所周知数据库如果通过dmp导入导出麻烦不说,还很耗时,特别是像笔者一个数据库就有 ...
- 【spring cloud】spring cloud分布式服务eureka启动时报错:java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder.<init>([Ljava/lang/Object;)V
spring cloud分布式服务eureka启动时报错:java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApp ...
- this和$(this)的关系
环境关键字this引用的是DOM元素 $(this)是jQuery对象 下面点击按钮分别alert一下 alert(this); alert($(this)); 获取DOM对象的属性id,可以 $(t ...
- BOOST 实用手册(摘录自校友博客)
1. 序言 现在学的东西很容易忘记,写这篇文章的目的是能让我在需要时快速找回当时的感觉. Let's BOOST THE WORLD . 2. 编译:VC2005注意 在 属性->C/C++- ...
- iview2.x版本升级3.x版本icon修改清单
当前公司使用有一个旧项目的前端组件库是iview2.x,入职以来维护该项目过程中碰到2.x版本无数的坑. 最近需求不多,闲来无事把2.x升级到3.x版本了. 新版本除了网上轻易可查到的button组件 ...
- 修复CentOS文件系统
CentOS经常出现一些像 Cannot mkdir: Structure needs cleaning 的文件系统错误,而且在正常模式下无法umount来进行修复.很多时候只能在rescue模式下进 ...
- iOS:转载:同步、异步、并行、串行的详解
理解 iOS 开发中 GCD 相关的同步(synchronization)\ 异步(asynchronization),串行(serial)\ 并行(concurrency)概念 2014年11月21 ...
- 在笛卡尔坐标系上描绘函数2*x+Math.sqrt(5-x*x)及其共轭函数2*x-Math.sqrt(5-x*x)曲线
代码如下: <!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Ty ...