遊戲和CG裡的人物,都是怎麼動起來的呢?
大家好,許久不見,今天我來寫一期科普文章,主要是為接下來的一篇關於動畫的文章做鋪墊。好,我們直接開始講。
三維模型的原理
要理解三維動畫的原理,就要先理解三維模型的原理。如下圖,一個最簡化的三維的立方體就是由八個頂點組成的。
而想要讓這個模型發生一點形變,修改其中一個頂點的位置即可了。也就是說,構成三維模型的基本資訊,就是點、線、面。
最基本的三維動畫
在一個三維的空間裡,一個物體所能做到的所有的動作,其實,無外乎也是三種:移動,旋轉,縮放。如果我們不考慮改變顏色之類的情況,最基本的三維動畫確實都是由前面提到的三者構成的。
建模軟體C4D裡的移動、縮放、和旋轉的圖示
這三者可以作用於物體本身,讓整個物體移動、旋轉、縮放。也可以作用於點、線、面中的任意一個或多個,使得物體產生形變。比如這樣:
這便是最基本的動畫了,這種動畫也可以稱為頂點動畫,也就是逐個頂點的進行修改的動畫。單獨修改邊或者修改面的動畫也被視為頂點動畫,因為修改邊和麵,本質上就是在修改點。這裡需要注意的是,一般對於頂點進行旋轉和縮放是無意義的,因為頂點和頂點之間的連線一般不受頂點當前朝向角度的影響,而頂點本身是沒有空間大小的,因此對於其的縮放也不會產生任何的變化。
三維人物動畫的進階
雖然依靠著對物體、點、線、面的移動、旋轉、縮放,已經可以從理論上幫助我們實現任何現實的三維世界中可能或者不可能出現的動畫了。但是,當我們開始製作人物動畫的時候,就會很快的遇到麻煩。一個人體的模型,通常有數千個,數萬個,甚至百萬個頂點。
比如下圖的這個怪物模型:
這個模型算是一個低模。搭配上精細的貼圖,放在《DOTA》或者《LOL》等俯視角的端遊,或是高畫質的手遊裡是沒有什麼問題的了。
而他的頂點數有5851個,面數有6994個。如果我們想要手動調整這麼多的頂點,已經是個噩夢了,更別說3A遊戲或者是電影裡的模型了。而且,沒有堅硬外皮的生物,在運動的時候,表皮會經常出現各種各樣的拉伸和形變,這也給為生物製作頂點動畫帶來了極大的阻礙。
於是,人們想出了一個妙招,人的皮膚和肌肉等這些頂點很多的柔軟組織,實際上都是依附在骨骼上的,而骨骼本身是不會產生多大的形變的,所以我們參考現實中的這種現像,讓這些具有柔軟表面的生物的模型也依附在骨骼上,不就完成了嗎?
因此,骨骼的概念應運而生,人們不需要去移動那麼多的頂點,而是去移動和旋轉這個虛擬的骨骼,就可以讓模型進行合理的形變,使其看起來就像是在運動的一樣。
不過,我們好像忽略重要的一步,我們有了模型有了骨骼,但是怎麼告訴電腦,骨骼該如何去影響模型呢?這時候我們就有了一個叫做蒙皮(繫結,Rigging)的工作,也就是,我們先需要告訴電腦,每一個骨骼都會影響哪些頂點,以及多大程度的影響這些頂點。這一步,通常可以先交給電腦先進行粗略的自動蒙皮,然後再手動進行精細的調整。
上圖就是,當我們完成了蒙皮這項工作之後,我們可以看到一個骨骼都影響了那些節點,以及其影響的程度。上圖中我們選擇了盆骨的骨骼,可以看到,顏色越接近亮紅,則代表盆骨骨骼對其影響越強,越接近純黑,則代表盆骨骨骼對其影響越弱。
Tips:盆骨骨骼一般是人形生物的根骨骼,所謂根骨骼,就是所有其他的骨骼都是在這個根骨骼的基礎上長出來的。移動根骨骼,會帶著所有其他骨骼一起動。
如果我們給不同骨骼的影響力用不同的顏色代表的話,那麼我們就可以得到如下圖所示的所有骨骼的影響力分佈圖:
然後,我們給骨架上個動畫,效果就出來了。
這樣我們就可以很輕鬆的完成動畫了。而且,相比起記錄諸多頂點的頂點動畫,只記錄骨骼的資訊可以大副的減小動畫檔案的大小。
在實際的動畫製作過程中,單純調整這些骨骼依然不算是最快的方法,還有許多的方法來加速使用骨骼的過程,諸如控制器,約束等。不過這些都是後話了,就不在今天範疇裡了。
接下來,很快會更新一期關於利用三維模型製作2D畫素動畫的文章,再之後就是之前的卡通水特效了,先給各位預覽一下效果:
單純製作這段動畫只用了不到20分鐘的時間,效率還是非常高的。(這裡說的是不包括建模,綁骨骼,和製作渲染器的過程,而只包括三維和二維動畫的製作)
最後是帶貨時間,講一下我做的對話臺詞編輯器上架Unity Asset Store了,這是讓你通過視覺化的方式,來編寫多分支多選項的臺詞的工具。支援任何語言的本地化。並且不需要你編寫一行程式碼就可以使用大量的對話特效。目前在商店獲得五星好評。這裡分享一下開發經過和完整的使用教程。 各位大哥要是覺得好用別忘了在Asset Store上留下個好評啊。
點此跳轉到Unity商店。
作者:深空愛吃肉包兒
來源:機核
地址:https://www.gcores.com/articles/133211
相關文章
- 遊戲和CG裡的人物,都是怎麼動起來的(#2)遊戲
- hadoop,spark,Zookeeper,,, 這些名字都是怎麼來的呢?HadoopSpark
- 現階段的熱門遊戲都是怎麼來的?遊戲
- 小城市裡的小人物,舊時代下的窮玩家,電子遊戲從來都是奢飾品遊戲
- 使用js實現圖畫人物動起來的方法JS
- 讓人物在地圖上動起來地圖
- 為什麼遊戲裡的閃避都是用“滾”的?遊戲
- GitHub 是怎麼火起來的Github
- 什麼型別是未來的方向呢?從梳理遊戲新分類談起型別遊戲
- 通用的 Java 介面白盒測試,大家都是怎麼進行的呢?Java
- 遊戲中的角色是如何“動”起來的?遊戲
- 如何判斷LInux程式完全啟動起來的呢Linux
- “S級>ABC級”是怎麼在遊戲動漫中興起的?遊戲
- 你來講講AQS是什麼吧?都是怎麼用的?AQS
- 抖音百萬點選的“渣男”動態桌布,喜歡的小姐姐怎麼動起來?
- 批次複製新浪微博相簿圖片及影片,你都是怎麼操作的呢?
- 未來的瀏覽器會怎麼發展呢?瀏覽器
- 用 Pygame 使你的遊戲角色移動起來GAM遊戲
- 怎麼原始碼下不動呢原始碼
- 已知一個圖片的URL,怎麼在程式裡把它取出來??為什麼有時不行呢??
- 滾動的字幕怎麼批次新增到影片呢?
- JS/TS專案裡的Module都是什麼?JS
- python3.13 有人使用了嗎?多併發使用起來怎麼樣呢?Python
- Java的日期類都是怎麼用的Java
- HIBERNATE裡面怎麼繼承一對多的關係呢繼承
- 視覺享受和象徵意義,遊戲皮膚是怎麼興起的?視覺遊戲
- BAT的人都是怎麼學習的BAT
- iPhone賣不動,轉型服務的蘋果未來能在哪裡呢?iPhone蘋果
- 我應該怎麼樣來推薦我們製作的這款RPG遊戲呢?遊戲
- 是什麼讓你做的小遊戲聽起來怪怪的?遊戲
- 今天下來個Lucene 怎麼執行都是錯。
- HttpRunner3的用例是怎麼執行起來的HTTP
- 大廠都是怎麼SQL調優的?SQL
- 我怎麼看元宇宙和遊戲行業的未來(上)元宇宙遊戲行業
- 我怎麼看元宇宙和遊戲行業的未來(下)元宇宙遊戲行業
- 同樣都是使用介面,JAVA 和 Go 差距咋就這麼大呢?JavaGo
- CLR裡的MethodTable,MethodDescChunk,MethodDesc,FixUpPreCode都是什麼意思
- 華為這21條,都是在炮火中打出來的經驗,刻在心裡,落在行動