在实现《乱纪元大冒险》(见: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中使用注意事项的更多相关文章

  1. Maya导入Unity的教程

    原地址:http://www.cocoachina.com/gamedev/gameengine/2010/0601/1586.html 昨天已经发布了1Vr.Cn翻译的多维材质模型烘培入Unity  ...

  2. Unity 3D中ToLua-UGUI使用说明、导入Unity流程、制作登陆界面

    ToLua制作登录界面 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 请支持大神开发者:骏擎CP,蒙哥等奔 ...

  3. BMFont中文字体图集制作的方法~(for unity ngui)

    BMFont中文字体图集制作的方法~(for unity ngui) 好吧~似乎这个问题困扰了很多人,游戏开始中文化是个不错的事儿啊,这里我就做下说明,如何制作中文字体图集~ 这里的字库图集的制作更多 ...

  4. 3D max模型导入unity 3D中注意事项

    一.单位,比例统一   在建模型前先设置好单位,在同一场景中会用到的模型的单位设置必须一样,模型与模型之间的比例要正确,和程序的导入单位一致,即便到程序需要缩放也可以统一调整缩放比例.统一单位为米. ...

  5. 记录 Spine骨骼动画导入unity 步骤[unity3d 4.6.6版本 2d动画]

    1:准备好unity使用Spine所需要的运行库,可到如下地址 https://github.com/EsotericSoftware/spine-runtimes/tree/master/spine ...

  6. 【Unity3D基础教程】给初学者看的Unity教程(四):通过制作Flappy Bird了解Native 2D中的RigidBody2D和Collider2D

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 在第一篇文章[Unity3D基础教程] ...

  7. 3ds Max光照纹理导入Unity的教程.

    原地址:http://www.cocoachina.com/gamedev/gameengine/2010/0531/1581.html 相信这个3ds Max光照纹理导入Unity的教程对游戏设计师 ...

  8. 导入Unity插件时出现Failed to import package with error: Couldn't decompress package

    导入Unity插件时出现Failed to import package with error: Couldn't decompress package 一开始以为压缩包本身有问题,坏了 后来发现在父 ...

  9. 【Unity】4.2 提升开发效率的捷径--导入 Unity 5.3.4 自带的资源包

    分类:Unity.C#.VS2015 创建日期:2016-04-06 一.简介 Unity自带的资源包也称为标准资源包.换言之,Unity自带的所有标准资源包导入到Unity项目中以后,都会放在Pro ...

随机推荐

  1. Android——多线程之Handler

    Why? 因为在Android系统中UI操作并不是线程安全的,如果多个线程并发的去操作同一个组件,可能导致线程安全问题.为了解决这一个问题, android制定了一条规则:只允许UI线程来修改UI组件 ...

  2. 【mybatis】mybatis多表联查,存在一对多关系的,实体中使用List作为字段接收查询结果的写法

    实体如下: IntegralGoods  积分商品 IntegralGoodsImg 积分商品图片 ShelfLog 积分商品自动上架记录 IntegralGoods :IntegralGoodsIm ...

  3. ATL7窗口类详细剖析

    前言: ATL是微软继MFC之后提供的一套C++模板类库,小巧.精妙.效率极高.它的主要作用是为我们编写COM/DOM/COM+程序提供了丰富的支持.但是ATL只能写COM么?我以前只是MFC程序员的 ...

  4. NPD南京炮苑电子技术研究所----NPD治疗仪

    NPD南京炮苑电子技术研究所有限公司:    http://www.npd365.com/ 研发药物离子导入和中医定向透药技术.   南京炮苑玉古康2号NPD系列专用中医定向透药治疗仪腰颈椎疼痛贴 N ...

  5. OpenCV平面物体检测

    平面物体检测 这个教程的目标是学习如何使用 features2d 和 calib3d 模块来检测场景中的已知平面物体. 测试数据: 数据图像文件,比如 “box.png”或者“box_in_scene ...

  6. JQuery when

    jQuery.when(deferreds) 参数deferreds,一个或多个延时对象或JS对象,我们初略的认为它就是一个或多个异步请求. 例如: $.when($.ajax("page1 ...

  7. Wishbone接口通用RAM

    /* ************************************************************************************************ ...

  8. delphi 调用 java

    1.设置JVM路径 FJavaVM := TJavaVM.Create(JNI_VERSION_1_6,     'C:\Program Files\Java\jre6\bin\server\jvm. ...

  9. python 机器学习中的数据处理学习记录

    在机器学习中,选择合适的算法固然重要,但是数据的处理也同样重要.通过对数据的处理,能提高计算效率,提高预测识别精确度等等 以下记录下一些数据处理的方法 一.处理缺失值 对于数据集中有缺失值的,粗暴的方 ...

  10. nginx搭建前端项目web服务器以及利用反向代理调试远程后台接口

    前端同学用nginx搭建自己的web服务器,后台程序专门部署在一台服务器上(我们之前公司就有三套环境,开发/测试/生产),这样做的好处是 1.前端代码基本都是静态文件,重启一次很快,也就几秒钟时间. ...