1. 程式人生 > >Unity 動畫知識之一

Unity 動畫知識之一

相同 gen 不重復 開關 新的 春天 當我 events 創建文件

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 動畫知識之一