在实现《乱纪元大冒险》(见: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. MYSQL复习笔记3-用户和安全

    Date: 20140115Auth: Jin参考:http://dev.mysql.com/doc/refman/5.1/en/security.html 一.权限系统实现方式相关权限信息存储在几个 ...

  2. Word中公式从单栏排版变为双栏排版后公式和编号错开了

    如上图公式(2),把自己做的共识从通栏复制到期刊的双栏里就变成这样了(先复制过来参考文献,再复制正文,那么参考文献没事),原来一直搞不懂,今天把它显示所有标记发现多了个制表符(我原来以为是行标记),鼠 ...

  3. 定时任务框架-quartz 时间配置

    quartz定时任务时间设置: 这些星号由左到右按顺序代表 : * * * * * * * 格式: [秒] [分] [小时] [日] [月] [周] [年] * 表示所有值. 例如:在分的字段上设置 ...

  4. 【spring】【spring mvc】【spring boot】获取spring cloud项目中所有spring mvc的请求资源

    实现的方法: 1.在父级项目中 或者 每个微服务都引用的项目中添加实体类Resource 2.在父级项目中 或者 每个为服务都引用的项目中写一个工具类,作用是用来获取请求资源 3.在每一个微服务的启动 ...

  5. 区块链 -- Merkle Tree

    我们地球上大部分人应该连它的名字都没有听过,而且说实话它也是个比较传统的概念了.Merkle Tree 是由计算机科学家 Ralph Merkle 在很多年前提出的,并以他本人的名字来命名.不过,Me ...

  6. easyui combobox可编辑的情况下,只能首字母开始过滤的问题选项

    esayui中的combobox下拉列表在可编辑的情况下可以输入内容来过滤下拉框的选项,而1.4.2版本只能在从首字母开始过滤例如其中一个选项是"test", 只能输入" ...

  7. 扩展 jQuery datebox控件按钮

    功能需求: 自定义扩展,将原先的datebox控件按钮进行自定义的扩展: 1.问题: 对原先的时间按钮控件进行更改扩展,新增 “一刻钟” “半小时” “一小时” 选项. 获取原先的 datebox 对 ...

  8. time_t和SYSTEMTIME之间的相互转换 【转】

    time_t和SYSTEMTIME之间的相互转换 #include <ctime> /* **time_t转SYSTEMTIME */ SYSTEMTIME TimetToSystemTi ...

  9. Spark Streaming updateStateByKey和mapWithState源码解密

    本篇从二个方面进行源码分析: 一.updateStateByKey解密 二.mapWithState解密 通过对Spark研究角度来研究jvm.分布式.图计算.架构设计.软件工程思想,可以学到很多东西 ...

  10. 删除其他硬盘的Windows文件夹

    删除其他硬盘的Windows文件夹 学习了:https://blog.csdn.net/drbing/article/details/50881461 有效果,必须先改文件夹的所属,然后才能修改权限: ...