01 3D引擎是什麼?
聽到“引擎”兩個字,你可能首先會想到汽車引擎,為汽車提供動力的核心部件。如果沒有引擎,汽車就隻能是一個模型,它就無法跑起來。
3D模型也一樣,我們用3DMax軟體制作了一個非常逼真、精美的3D模型,還有光影和動畫效果,甚至每一根發絲都是那麼真實,但它是“死”的,不能與人互動。
而3D引擎是讓模型“活”起來。假設我們把3D應用或者3D遊戲看作一輛正在奔跑的汽車,那3D引擎就是隐藏在内部驅動它去運作的底層技術。
這就是3D引擎的能力,它為3D模型賦予了“互動方法、實體定律、劇情腳本、AI智能”,讓開發者不需要編寫很多代碼,就能讓3D模型在“體”、“相”、“用”三方面逼近現實世界真實的人和物。
而且與汽車引擎不同,汽車沒引擎不能跑,3D應用和遊戲沒引擎也可以運作,3D引擎更像“汽車工廠”,本質上是一種開發遊戲和應用的軟體。
02 實時渲染與離線渲染
講到這裡,需要給大家澄清一個概念,剛才說我們引擎是驅動3D應用和3D遊戲在不斷的運作,那有夥伴問了:電影院裡我們也經常看到一些3D渲染的非常精美畫面,那是不是也跟3D引擎有關系?
電影阿凡達2宣傳海報
實際上電影畫面大多數都是離線渲染出來的,跟我們今天聊的3D引擎不是一回事兒,3D引擎的渲染方式是實時的。
那離線渲染引擎和實時渲染引擎有什麼本質上的差別呢?
實時渲染(Real-time Rendering)從字面的意思非常容易了解,就是我們要實時看到渲染之後的3D效果。
3D應用和3D遊戲這種必須要滿足與使用者之間強互動,比如最常見的3D 遊戲《英雄聯盟》,或者是一些帶有互動的3D應用,比如智慧城市、智慧工廠等數字孿生項目,一般來說保證流暢運作至少24FPS:隻有達到或者超過1秒鐘播放24張連貫圖像,才能人眼觀看時沒有卡頓的感覺。
離線渲染(Offline Rendering)是跟實時渲染相對應的,簡單來說就是我們不需要實時的看到渲染效果的場景。最早電影每幀都要花上幾天的時間來渲染,渲染完成後輸出的一個完整的電影視訊,給到院線去放映就可以了。
即使到今天硬體發展如此迅速,現在電影渲染依然是很慢的。比如電影《阿凡達》如果說在一個普通電腦上渲染,可能還要幾百年的時間,随着雲渲染技術的愈加成熟,直接在渲染農場也能很快完成電影渲染任務。
3D引擎與內建電路很像,都是内部複雜,使用起來反而沒那麼複雜。下面這個架構圖就是實時渲染的遊戲引擎架構示例,我們可以看到裡面包括很多功能子產品,實時渲染是一部分,還有聲音子產品、渲染子產品、圖形系統、UI 系統和記憶體管理。我們常用的數字孿生引擎裡邊也有相應的一些邏輯,比如資料儲戶、孿生體互相控制,還有實體仿真等等
03 3D引擎的發展曆史
3D引擎的發展曆史是3D遊戲行業發展史的縮影。其實在三十多年前,電子遊戲出現的早期,沒有遊戲引擎也能開發遊戲,我們熟悉的瑪麗兄弟、魂鬥羅,都是程式員用簡陋的代碼編輯器,從零開始一行一行寫代碼開發出來的。
在紅白機時代,遊戲開發者如何既節省性能又增強遊戲體驗:
想必大家很熟悉超級馬裡奧這款遊戲,下方展示兩張圖,我們可以看到左側的畫面中天空有白雲,地上有草叢。大家有沒有發現,白雲和草叢長得很像,形狀完全一樣隻是顔色發生了變化。
實際上,白雲和草叢隻用了一張圖,遊戲開發者為了保持遊戲的性能節約記憶體,想盡各種辦法。再比如右側的怪物,它有一個不斷左右腳不斷向前踏步的動作,一會兒左邊腳大,一會兒右邊腳大,這樣來回翻轉來實作走動效果的。
那時,使用者的期望很低,遊戲的玩法也是很簡單,是以允許使用這種作坊式的粗糙方法。後來遊戲市場規模越來越大,使用者要求越來越高,遊戲玩法也越來越複雜,這就導緻遊戲的代碼量變得非常巨大。
開發者們發現每次做遊戲都一行行敲代碼很耗時費力,是以能不能設計一套代碼庫?把最基礎、最常用的功能都封裝好,這樣下次做新遊戲就不用重新寫代碼了。
一開始,這種想法隻是在一些遊戲公司中的一小部分程式員中做嘗試,程式員在開發某個功能時多留一個心眼,把未來可能重用的部分單獨剝離出來。這種嘗試就像荒野中微微閃現的星火,但這些零散的可重複利用的代碼塊還遠遠稱不上“引擎”。
終于,1993年一個改變時代的大神出現了,他就是約翰·卡馬克,ID Software的創始人。他設計了人類第一款3D引擎,帶領團隊在短短幾年内就創造了《DOOM》《德軍總部》《雷神之錘》《狂怒》等如雷貫耳的遊戲大作。今天,卡馬克被譽為FPS之父、3D遊戲之父。
卡馬克和其他程式員不同,他在動手開發遊戲之前就先設計了一整套基礎代碼的架構和開發規範,并将所有的基礎代碼寫好,還留下了友善調用的接口,比如圖像渲染接口、3D加速接口、軌迹控制接口等,這樣其他程式員在開發遊戲時就可以像拼樂高積木一樣,快速搭建出各種遊戲應用,也使得遊戲的規劃更合理,功能更穩定,并且遊戲開發者隻需要将精力聚焦遊戲規則本身,提升了遊戲開發效率。而這個基礎代碼庫就是最早的3D遊戲引擎。
卡馬克開發的世界上第一款3D遊戲《德軍總部3D》讓人們看到了一個全新的遊戲世界、感受到極為震撼的遊戲體驗。這款遊戲一出現,一下子引爆了大量的3D遊戲需求。後來有一家叫“烏鴉”的遊戲開發公司找到卡馬克,買下了這個遊戲引擎的授權,于是烏鴉公司就用這款引擎快速開發了不少暢銷遊戲。遊戲行業就此誕生了一個新的細分市場:3D遊戲引擎。
直到今天,3D引擎行業發展程序中,伴随網際網路時代變遷、軟硬體技術更疊,行業本身出現了不同專業領域的發展方向,逐漸進化出不同領域的專用引擎。
04 3D引擎賦能創新應用
從2021年開始,元宇宙逐漸進入人們的視野,将成為下一代網際網路的科技革命浪潮。而ChatGPT的爆火,讓元宇宙的熱度逐漸退去,人們開始冷靜下來思考,元宇宙概念變得更加真實,與之相關的數字孿生、XR等産業也展現出更為實用的商業價值。
元宇宙造就了一種全新的、身臨其境的數字世界,想要建構一個與現實世界高度貼合甚至是超越現實世界的“元宇宙”,前提需要創造一個與現實世界1:1還原的虛拟世界,關鍵核心點則是數字孿生,而數字孿生也是建構元宇宙的核心技術之一。
3D引擎所提供的渲染能力和實時互動是數字孿生所需的必要能力之一。開發數字孿生的引擎模拟現實世界自然法則越豐富越強大,就能越好地讓數字孿生體身上的資訊發揮作用,數字孿生體被3D引擎驅動,就如同現實物體被自然法則驅動。
是以3D引擎能力決定着數字孿生技術的成熟度,也決定了元宇宙在虛實映射與虛實互動中所能支撐的完整性。
可以預見到,3D引擎将成為下一代網際網路的“CAD”。