Python與星球大戰背后的工業光魔
提起Python語言,很多人會想起系統運維、Web開發等工作。很少有人會知道Python也能夠用于電影視覺特效的制作,其中就包括了《星球大戰》某些電影特效的制作。
星戰之父喬治·盧卡斯于1975年創建了工業光魔(全稱:Industrial Light and Magic),從第一部《星球大戰》起便參與了電影的特效制作。據Python官網介紹,工業光魔從1996年起開始使用Python語言,取代了此前的Unix shell腳本。工業光魔做出這個決定的原因,在于Python的學習難度低,開發速度快。當時,Python還只是1.4版本。
電影特效行業競爭十分激烈,制作公司會不斷地尋找更加優秀的編程語言,提高工作效率。工業光魔也是一直在評估Python語言的使用,但是近20年以來,還沒有找到一個更好的替代品。
工業光魔的資深技術總監Tommy Burnette曾經這樣評價道:
- Python在我們的生產流程中扮演了至關重要的作用。如果沒有它,像《星球大戰》第二部這樣的大項目就很難完成。從集體渲染到批量處理再到影片合成,Python將所有步驟都緊密的粘合在了一起。
由此可見Python的強大。
Star Wars API
你知道《星球大戰》系列大戰中出現了多少個種族,多少種飛船嗎?這些答案都可以在Star Wars API中找到。
據開發者介紹,Star Wars API是全球首個量化的、可供編程使用的星戰數據集。開發者經過漫長的搜集和整理,匯總了星戰系列電影中的人物、種族、星球、飛船等詳細數據。目前,這個API中已經收錄了《原力覺醒》中的新數據。API的作者還用Python開發了一個helper庫。
我們來看看可以用這個庫做些什么。
將所有星球按大小排列:
1
2
3
|
import swapi for planet in swapi.get_all( "planets" ).order_by( "diameter" ): print (planet.name) |
查看哪些人開過1艘以上的飛船:
1
2
3
4
|
import swapi for people in swapi.get_all( "people" ). iter (): if len (people.starships) > 1 : print (people.name) |
檢索Jar Jar Binks是否在電影中出現:
1
2
3
4
5
6
|
import swapi pm = swapi.get_film( 4 ) jj = swapi.get_person( 36 ) for c in pm.get_characters(). iter (): if c.name = = jj.name: print ( "Why George, why." ) |
Python編寫的Star Wars小游戲
最后,再與大家分享一個國外開發者用Python開發的星戰相關游戲,希望大家喜歡。
這個游戲類似現在的跑酷,通過上下左右方向鍵控制。
是不是很酷!很贊!很期待!