《星球大戰》與Python之間的那些事

pythontab發表於2016-01-10

闊別十年時光,全球矚目的第七部星球大戰電影《原力覺醒》將於2016年1月9日在國內上映。它將重新燃起那段神祕的太空歲月與具有原力的宇宙時光。但是,星球大戰和Python程式語言又有什麼關係呢?

《星球大戰》與Python之間的那些事

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庫。

我們來看看可以用這個庫做些什麼。

將所有星球按大小排列:

import swapi
for planet in swapi.get_all("planets").order_by("diameter"):
    print(planet.name)

檢視哪些人開過1艘以上的飛船:

import swapi
for people in swapi.get_all("people").iter():
    if len(people.starships) > 1:
        print(people.name)

檢索Jar Jar Binks是否在電影中出現:

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.")


相關文章