Unity现在已经用的很广泛啦,可是却一直没有什么美术向的教程。

  程序用方面的内容在各个论坛都有讨论,但是美术似乎很弱势啊。

  明明美术也很需要掌握引擎方面的内容嘛!

  山谷里的野百合还有春天呢 我们美术也要出教程!

  这次选了本菜鸡比较不那么菜的细分领域?unity3d  3D美术模块 来讲

  美术小伙伴们肯定是懒得看那么多字啦,所以我就写的尽量有意思一点吧……

  计划是从入门到住院全部讲完的,但是能不能讲完我也不晓得,挖坑不填什么的最开心了

  至于为什么是从入门到住院,因为学了这套东西,你就具备了在项目中跟程序撕逼的实力

  指出程序员的错误 提出有效的解决方案 拳打南山老策划 脚踢北海程序员

  (啊哈哈哈,开玩笑啦,研发组的小伙伴是要相♂亲相♀爱啊……)

  但是考虑到程序们单身多年 膂力惊人 我猜你最后的下场肯定是住院……

  OK现在我们已经做出了一套牛逼酷炫屌炸天的动画了

  接下来我们需要在引擎里面看到它,并且配置好一切让程序老爷(猿)能顺利的使用它,这是我接下来要跟大家分享的事情。

  我们需要从max中导出格式为FBX的文件供引擎使用,导出的文件通常要分成绑定的模型和动画两种,导出的方式也分为直接导出和导出选定对象两种。

  模型文件要导出mesh、 骨骼、 蒙皮信息、 材质和其他与mesh相关的部分。贴图文件不要在的导出的时候勾选,否则会在维护的时候带来不必要的麻烦,只要手动吧贴图拷贝到指定的文件夹下,在引擎中重新指定即可。需要注意的是mesh、材质的名字在引擎中修改比较容易出错,所以一定要在max中改好mesh、材质的命名再进行导出。

  下图是导出时需要注意勾选的地方,skins是蒙皮信息morphs是顶点变形动画(表情动画)embed media是贴图文件。

  动画文件要导出的主要就是动画信息,注意 动画文件的骨骼结构及命名必须跟模型文件的一致,否则会导致动画丢失。如果使用的unity的老版本是不支持link链接、prop骨骼等,所以导出的时候要勾选烘焙动画。如下图:

  导出动画之后,通常是要有一些这样的报错的,

  遇到max不开心的那几天报错会特么有好几页。。。

  在此我给大家提供一个行之有效的解决方案,那就是点它!是的 没错 直接点确定根本不要犹豫。相信我,你百分之九十的错误都与这些报错无关,剩下那百分之十,你不用看这些报错信息也会知道文件有问题!

  导出分为直接导出和导出选定对象,两者做大的区别就是

  一个是直接导出一个是导出选定对象……?

  好吧,其实我是想说,他们的区别在我来看是没有太大的实际意义。直接导出的话,在你的max中所有的东西,看得见的如mesh和看不见的如particle view统统都会被导出,你需要导出的骨骼模型和你不需导出的辅助体dummy点也都会被导出。但你不必紧张,我们进了u3d可以编辑这一切,只留下我们需要的内容,其他部分则不会被打包进入游戏占用资源。所以通常我们只要直接导出就好了,但是有时候如果遇到处女座的程序员,他们会要求资源的简洁规范,以及视觉上的整齐干净,不许存在不能♂用的东西,此时你就需要导出选定对象。导出选定对象的话,就是你选了什么就导出什么,也就是说如果一个完整的动画导出时你只选择了一根骨骼的话,则只会导出这个根骨骼的动画。但是当你进入u3d时,你会发现………………

  你什么都没发现……

  因为只有一根骨骼,没有完整的父子连接关系引擎是读不到动画信息的。

  聪明的你是不是已经想到了什么。是的 你可以跟程序开撕了

  撕逼指南:因为导出选定对象一不留神就会出错,如果资源量庞大,维护成本会非常大。仅仅是为了满足你猿的无理需求需要耗费本宝宝的多么大的精力,而且毕竟是人力维护,不可能完全不出错,一旦出错检查修改都要时间。

  既然如此为什么不用简单保险的直接导出呢?

  我估计到这一步程序就不会再说什么了,最多再问一下 那要怎么在使用的时候清除无用的资源,这个问题我们留在导入的内容里面讲。

  顺便说下如何删除上文提到的particle view,以便于万一你撕输了,文件里又出现了看不见的particle view,恩。。。 如果你从来没遇到他……13

  就当我什么都没说吧……

  附上一个导出界面的翻译和基础介绍

  好的,现在我们已经导出了一个干净或者不干净的FBX,总之他是可用的。既然导出来了我们如何在unity中使用它呢?别急,我们先看看他在哪。

  这是一个标准的unity工程,作为一个不会写代码的美术

  ,你只要关心Assets这个资源的文件夹就好了。unity比较常见的工程管理有两种,一种是资源和代码在一个工程内,一种是资源和代码分开放在两个工程下。两种方案各有优劣这里不展开说了,但无论你用的是哪一种,肯定都会有Assets,这里面要存放游戏中要用到的所有的美术资源,也就是说,游戏中用不到的资源,千万不要放在这,否则……

  Assets下会有很多文件夹,根据不同项目的分类方法各有不同,问你们的程序大爷要到动作文件的路径,然后记住它,以后这个路径下的内容就由我们来守护!

  在成为一个合格的守护之前,先来学习一下基本操作吧,下图这八个窗口一个都不能少,统统要记住是干嘛用的!

  1.Hierarchy 可以把它简单理解为max中的大纲视图也就是H键视图,你想要查看、编辑、修改一个东西的时候,通常要先把它拖放在这个视图。在这里你可以查看、编辑物体的层级关系,也可以在这里做预制体,这个视图的左上角Create下拉菜单中,可以创建很多unity内置的物件如灯光、几何体、摄像机、UI板等。

  2.Project unity引擎内的文件管理窗口,这里可以查看、编辑Assets下的所有文件。这边是一个文件管理窗口可以创建文件夹和其他unity引擎中常用的文件,类似脚本、材质、状态机之类的就是在这边创建。

  3.Animator 动画状态机的编辑窗口 在某些项目组动画状态机是由程序来编辑的,在另一些项目中则是由动画师来编辑,就是说这里的内容是跟程序的工作有大量交集的部分,后面会详细介绍这里的使用方法,这里主要功能是用来编辑动画状态机,处理分层动画,编辑动画遮罩等。

  4.Inspector 简单理解为属性编辑窗口 这个窗口主要用来编辑当前选中物体的属性,你要是问我编辑的是什么属性……我只能说什么属性都编辑……这里根据程序写的脚本、插件、编辑器不同,可编辑的内容也各不相同。这个便面用到的次数差不多是其他面板的相加总和。

  5.Scene 场景嘛简单来说就是你把一个物体拖到1.Hierarchy下,这个物体就会显示在Scene窗口中。大致功能跟max的主窗口类似。

  6.Game 游戏窗口嘛 当然是玩游戏的 点击unity界面最上方中央的play键,这个窗口就会开始运行游戏。就是我们常说的本地pc版,当你导出了新的资源或者修改了原来的资源,都可以通过这个方法查看他在游戏中的实际表现效果。

  7.Animation 就是动画窗口啦 不过用起来还是有些小复杂的。可以查看动画,也可以用来在unity中做一些简单的场景动画摄像机动画之类的。

  8.Console? 我一般就管他叫报错窗口……这里会报出来各种黄的红的错误提醒,对你来说它的最大意义,就是可以把它报的错误截图发给程序看……

  好 现在我们开始正式介绍一个模型文件的导入流程

  首先,在导出时我们根据程序提供的路径和命名导好FBX,接下来我们要在unity的Project窗口中找到它。在Inspector窗口检查它的属性

  为了节省笔墨(懒

)我就不逐条解释了,说几个常用的的。

  Scale Factor模型缩放 这里理论上都应该是1,也就是模型的原大小。但也有可能是0.1或者10之类的,跟你max的单位设置有关,无论是几都可以,只要跟其他模型是统一的就OK。

  Mesh Compression网格压缩,用来降低模型的面数,这个一般都是选择关闭的,如果你们程序说,我们模型的面数太高了,我要在这里进行压缩,揍他,然后叫做模型的同学想办法在max里降低面数。

  Import BlendShapes 导入BlendShapes ?BlendShapes是maya的说法,max中叫做Morpher也就是表情控制器。如果你在max里面做了morpher表情动画的话,勾选这个选项就能直接导入。

  Material Naming 材质名称 这里面有几个下拉选项,问你是使用贴图名字还是模型名字。因为你导入模型进来的时候会自动把材质球带进引擎(如果不想带进来就把Import Materials后面的勾去掉),这个选项决定了材质球如何命名,如果是选根据模型命名,材质球就会跟max中材质球的名字一样,如果是根据贴图命名材质球就会跟它所关联的贴图名字一样。

  好继续说下一个页签Rig,这边是设置模型用于那个动画系统以及在该动画系统下的配置。Animation Type可以下拉四个标签分别是N\L\G\H。这是个漫长的故事……我在这只说一点模型这边用得到的,后面会写专门讲动画系统的一章。

  N这个标签我们可以直接不理。

  L是4.0版本以前的动画系统,是比较老比较保险的动画系统,提供的功能比较少,但是也不会出什么错误,适合非常简单的游戏。

  G和H是在4.0版本时同时推出的两套动画系统,他们有很多共性,比如都有自带的状态机、自带动画融合、自带Avatar等。比较大的区别就是H这个动画系统是专门用来做类人型两足生物的,它提供了动画的重定向,就是说它提供了一套动画赋予给多个体型不同的模型的解决方案。听起来是不是吊炸!其实实际使用的时候限制还是很多的,后面我在慢慢说我遇到过的坑!

  G和H动画系统都有Avatar,一般来说模型文件都是使用Create From This Model,动画文件使用Copy From Other Avatar。

  G动画系统允许我们手动指定根骨骼 就是在Root node这边下拉菜单里面选

  H动画系统在这个页面没有根骨骼的指定选项,但是有个神秘的按钮,我们点一下试试吧

  忽然画风一转,这个人绿了(也可能灰了)……简单来说,这里主要是用来配置骨骼的重定向的,小绿人身上的圆点对应着下面的绿色圆点,每个点后面的框可以指定一根骨骼。

  我来试着说一下它的原理,能说清也不要小红花,说不清也别打我。这个绿人是H动画系统的角色骨骼结构,每个节点允许我们手动配置当前模型的骨骼,就是说这个模型的左手掌骨骼叫“曼玉”我们就把曼玉指定到

  这里,右手手掌骨骼叫“子怡” 我们就把子怡指定到

  这里。通过指定的骨骼我们完成了当前模型的骨骼重定向,这时候我们拿到另一个也完成了骨骼指定的模型的动画,无论他左右手是叫柏芝还是冰冰都没关系,通过这套角色骨骼结构的重定向,我们可以忽略骨骼的名字、长度、大小……直接使用动画信息了!厉不厉害!其实你偷懒套用bip的时候也是用的这个理论哟!

  说一个小技巧,

  使用max做动画的同学一定记住第二个选项,他可以根据max默认的骨骼命名一键配置好骨骼信息,省了你一根一根拖放的麻烦。

  还有这个biped pose,有时候文件会报错说当前文件不是Tpose,也是点一下就修复啦!

  现在,我们已经完美的导入了模型,接下来要讲到重头戏动画导入设置了。由于动画导入该如何设置取决于使用的是那种动画系统,所以我会把三种动画系统的导入设置分开讲,三种动画系统会有一些重合的内容,这类内容前边讲过之后后面就不会再重复了。

  好 首先是Legacy动画系统(以下简称L),Legacy动画系统过去不叫这个名字,从前他是unity动画系统的高大帅气武艺超群的独生子

  ,当时它也不叫这个名字,他就叫Animation动画系统,对应的动画脚本名字也是Animation。后面4.0版本出来了,自带了全新的Generic(以下简称G)和Humanoid(以下简称H)动画系统,unity官方就把自己的亲儿子改名叫Legacy(遗产)。

  Legacy的优势在于简洁,他仅仅提供了动画系统最基础的功能,动画切分、动画压缩以及一些基础的参数设置。功能少就意味着少出错,所以Legacy动画系统更稳定产生的bug更少,也是因为功能少,当你需要新功能的时候就需要程序来写,这就需要程序更多的工作量。而且遇到新手程序的话,可能写出来的东西,还不如官方在Humanoid和Generic动画系统里自带的

,这也就是Legacy系统的弊端了。

  首先这个界面,其实我是不想讲的因为除了Store in root(New)这个选项,其他的都被打上了Deprecated(弃用)标签,这里我曾尝试过使用其它选项有什么区别,答案是没什么区别……写这段完全是给好奇宝宝和强迫症患者的福利……

  然后是这个页签下的第一部分。

  Import Animation就是字面意思啦,动画导入 不勾选的话就没有动画了(那么换言之就是说模型文件如果不小心也带了动画信息,你可以去掉这里的勾选)。

  Wrap Mode 动画循环模式 下拉的选项分别是 默认、一次、循环、乒乓循环(正播一次倒播一次反复循环)以及停留在最后一帧。

  Anim.Compression 动画压缩 这里有三个选项 分别是关闭压缩、减少关键帧、减少关键帧并压缩。后面两个主要的区别就是 第三个选项在减少关键帧的同时,还会压缩文件的大小。

  下面这三个Error参数 是压缩的阈值 他的压缩原理是,当两帧之间移动、旋转、缩放的数值小于你当前所填的0.5时,这一帧就会被删掉。这个0.5是以什么为单位我还真是不清楚……

  撕逼指南:这个值我最多开到0.8,再大的话 就会出现比较严重的失真了,动画会跟你在max里面见到的差很多。但是程序经常会要求你尽可能把这个值加大,再大,再大,大……他要求的是性能,但是我们要求的是画面。你跟他讲,真正的优化是保证画面效果的前提下优化性能,而不是一味的降低美术效果,那算个屁优化!

  常见的一些脚步晃动、物件抖动都可能是根动画压缩有关,改小压缩值通常能够解决动画的抖动问题。当然了,动画抖动是个巨坑,产生抖动的原因不计其数,有些原因甚至是无解的……如果改了压缩阈值还是没好,你可以这样解释……

  这里是动画切分,有时出于制作的和修改的方便,我们会把几个动画做在同一个动画文件里面,这样就需要在unity里面将他们切分开。点击红色框选的地方增加或删减动画片段,然后再橙色框选处重命名当前选中的动画,蓝色部分修改动画的起止帧。补充一下橙色部分相关的内容,unity标准的动画命名格式是 ?模型名@动画名 如boss1@idle ? 这样导入进来之后unity会自动给这个动画命名为idle而不是Take 001。

  这里看到了一个熟悉的名字?Wrap Mode 动画循环模式,这里的动画循环模式是针对我们切分出来的动画片段,上面那个是针对整个动画文件的。注意看这里的Wrap Mode上方有个Add Loop Frame,勾选这个选项则使用整个动画文件总体的循环模式设置,不勾选就可以单独设置循环模式。

  Mask 动画遮罩 ?Definition这部分是说使用动画本身的遮罩还是从别处获得动画遮罩,这个遮罩的用处是屏蔽一部分肢体的动画,那具体怎么用我们放到动画状态机部分来讲。下面这个Transform会列出这个动画的所有骨骼,你可以根据你的需要来勾选。如果没有特别要求应该是都要勾选上,但是会有比如bone骨骼的末端、CS骨骼的末端dummy这类是可以不勾选的。

  Import Messages 导入信息 导入的动画如果报错了,就会在这里有提示。最常见的就是骨骼链接不规范的报错……

  右下角俩按键就是还原和执行啦 你做了一堆操作设置之后千万要记得点Apply,或者你放弃这一切从头开始也可以点Revert。

  Generic?这就是unity官方用来替代Legacy的次子了,跟他大哥不同,Generic在4.0刚推出的时候各种bug,使用时候各种坑,根本无法正式在项目中使用,简直就是恶魔……

  但是随着版本的叠迭代,Generic越来越完善,越来越强大,小恶魔已经成为龙妈的国王之手了……咳咳,我是说Generic已经成为大部分项目的首选了。。。

  Avatar Definition ?Avatar模式 模型用自身的Avatar,动画用copy的Avatar之前讲过不重复了。

  Root node 这里可以指定根骨骼,这本身没什么可说的内容,只要选定你所需的根骨骼填进来就好了。但是这里要着重介绍一下None这个选项,如果你给拔根骨骼直向None,也就是空的,那么unity会自己根据重心来计算出一个根骨骼,这个根骨骼是实时运算得出来的,恩……简单来说就是,他会把你玩死……

  接下来还有个选项叫做Optimize Game Object 优化游戏对象 ? ?我查过官方自述,大意是说他会优化Avatar上的骨骼节点并优化蒙皮骨骼的提取,总的来说就是目前还没用过不是很请楚……

  Loop Time 是动画循环设置,勾选之后动画就会循环播放,这个循环是指在状态机里循环播,讲到状态机我会再说一次这个问题。

  Loop pose 可以理解为位置循环。比如动画是向前走了一米,再循环播第二次的时候,是在一米的位置播还是原点的位置播取决于这个选项。

  Cycle Offset 字面意思是循环抵消。可以理解为是播放延迟。假设一个40帧的动画,这里填0.5的话,动画就会从20帧的位置开始播。

  具体应用:我随便说你们随便听吧,这个功能估计没几个人用得到。假设一个突突突的射击游戏,有朝左跑和超朝右跑的动画,并且动画是镜像复制出来的(镜像方法下面会说),并且需要给动画做融合左跑右跑无缝切换。左跑动画的第一帧迈的是左脚,又跑是镜像过去的,那第一帧自然是迈右脚的,这样就是无缝的啦!那我们就在又跑的Cycle Offset填上0.5,OK他会从动画的中间开始播也就是先迈左脚了。

  恩 这很耐撕……

  至于后面那个loop match是检查循环是不是匹配的,用动画师的语言来说,就是首尾帧是不是一致……越绿越一致越红差别越大……

  下面三个选项是一回事 分别是旋转、Y轴位移(竖方向)、XZ轴位移(水平方向)。Bake Into Pose是指“基于什么”但是你可以简单粗暴的理解为锁定,勾选之后就会锁住旋转或者是位移,不管是动画上做的位移还是引擎计算出来的位移都会被干掉。Based Upon大概理解成初始位置、轴向吧。Body Orientation是身体朝向、Original是动画原本的样子、Center of Mass讲道理的话是质心,但是肯定不是你理解的那个质心……这里说一下,官方自述我并没有看,我上面讲这些基本是我基于使用时的表现反推的理论。如果你在别的教程里看到了跟我说的不一样的,我不管,反正是他错了……

  Mirror镜像 比如你做了一个左转跑,在动画切分哪里多加一个动画片段改名叫右转跑,然后勾选Mirror就可以得到一个右转跑啦。

  Additive Reference Pose 添加参考pose 至于是干嘛用的…… 本宝宝也不清楚……还有下面这个Curves这个曲线功能我也……从来没用过……不晓得干嘛用的……

  Events事件 这个主要是给程序用的,在动画的时间轴上加一个事件点,程序可以检查到这个事件点,然后执行某个命令。比如在攻击动画的某一帧加事件点,作为播放特效的通知。

  Mask上面讲了 Definition上面讲了Transform上面讲了 还剩个Humanoid。 这个Humanoid可以理解为是一个开关吧,手脚的IK和各部位动画的开关。默认是一个绿色的小人,如果不需要某一部位的动画,可以把它点成红色。

  Motion 指定根骨骼,是的就是这么不讲道理。明明指定过一次根骨骼了,这里又要指定。但是两边的区别到底是什么,我还没搞懂,我问了程序,程序也没搞懂,所以这个问题留给你们了。问问程序这两个地方都是干吗用的,有啥区别!快去找程序员问吧,谁家的程序答得出来记得给他一个爱的抱抱,然后来这里分享一下哟!

  Humanoid

  我发现Humanoid能讲的,前面都讲过了……这特么就尴尬了

  那这次就到这里吧~

Unity 动画知识之一的更多相关文章

  1. Unity动画知识之二:Animator动画状态机

    上次我们讲过Unity游戏动画从入门到住院,今天我们来讲一下动画状态机. 好了,现在我们已经成功的导入了动画.接下来要玩的东西就很装13啦.因为大部分动画师是用不到这家伙的,需要掌握这个技能的,至少也 ...

  2. Unity动画机制 Animator与Animator Controller教程

    Unity动画机制Animator 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...

  3. Unity 动画系统目录 之 Animation

    返回 Unity 动画系统目录 官方文档 Animation:https://docs.unity3d.com/ScriptReference/Animation.html Animator:http ...

  4. Unity动画优化

    Unity动画优化 https://blog.csdn.net/TracyZly/article/details/79991593 Unity中Animator做UI动画的一些细节 https://b ...

  5. Unity基础知识学习笔记二

    1,object Instantiate(object original,Vector3 position,Quaternion rotation)       克隆原始物体,并返回克隆物体.     ...

  6. Unity基础知识学习笔记一

      1,Unity 4.5.4这个版本,在打包ios应用程序的时候.会生成一个xcode工程,但是这个工程无法在xcode6上变异,无法生成ios8上发布.所以unity在ios8发布3天内就发了4. ...

  7. iOS关于CoreAnimation动画知识总结

    一:UIKit动画 在介绍CoreAnimation动画前先简单介绍一下UIKit动画,大部分简单的动画都可以使用UIKit动画实现,如果想实现更复杂的效果,则需要使用Core Animation了: ...

  8. Unity 动画

    Unity 并没有自带建模工具. 3D建模工具 maya, 3dmax, blender Skinned Mesh Renderer Mesh Renderer Mesh Filter Modelli ...

  9. Unity动画

    Unity 并没有自带建模工具. 3D建模工具 maya, 3dmax, blender Skinned Mesh Renderer Mesh Renderer Mesh Filter Modelli ...

随机推荐

  1. OCR识别-python3.5版

    刚接触,啥子都不会,按着教程走 需求:识别图片中的文字信息环境:windows系统 开发语言:python3.5 使用工具类:1.pyocr 2.PIL 3.tesseract-ocr 步骤: 1.p ...

  2. MySQL一问一答

    一.问:如果有一张表,里面有个字段为id的自增主键,当已经向表里面插入了10条数据之后,删除了id为8,9,10的数据,再把mysql重启,之后再插入一条数据,那么这条数据的id值应该是多少,是8,还 ...

  3. IdentityServer4使用EFCore生成MySql时的小bug

    EFCore生成PersistedGrantDbContextModelSnapshot的时候发现 b.Property<string>("Data") .IsRequ ...

  4. CentOS 7 通过 yum 安装 nodejs 和 npm

    curl --silent --location https://rpm.nodesource.com/setup_6.x | bash - yum install -y nodejs

  5. 【LOJ】#2278. 「HAOI2017」字符串

    题解 好神仙的题啊 感觉转二维平面能想到,算重复情况的方法真想不到啊 通过扒stdcall代码获得的题解QAQQQQ 我们先把\(p_i\)正串反串建出一个AC自动机来 然后我们把s串放在上面跑匹配, ...

  6. 记录一下SparkStreaming中因为使用redis做数据验证而导致数据结果不对的问题

    业务背景: 需要通过redis判断当前用户是否是新用户.当出现新用户后,会将该用户放入到redis中,以标明该用户已不是新用户啦. 出现问题: 发现入库时,并没有新用户入库,但我看了数据了,确实应该是 ...

  7. spring中注册bean(通过代码动态注册)

    看公司的源代码,在一个类中使用到了BeanDefinitionBuilder这个类,在学习之后才知道在项目中可能没有注册bean,在使用的时候才会进行注册,就涉及到了动态bean的注册,所以,在文章中 ...

  8. s3fs挂s3作为本地盘制作ftp使用

    一. 安装s3fs 安装s3fs-fuserhttps://github.com/s3fs-fuse/s3fs-fuse 二. 安装vsftpd #查看当前系统版本cat /etc/redhat-re ...

  9. Linux usb 驱动程序范例

                     linxu_usb驱动之框架 USB骨架程序可以被看做一个最简单的USB设备驱动的实例. 首先看看USB骨架程序的usb_driver的定义 [cpp] view p ...

  10. Maven 项目不打包 *.hbm.xml 映射文件

    使用 Maven 部署 Java Web 项目时,Hibernate 的映射文件 *.hbm.xml 没有被打包部署到目标目录下,解决方法:在 pom.xml 文件中 <build> 节点 ...