top of page
路況3D即時顯示

看到這個小顯示屏了嗎? 上面是3D渲染的前方道路交通實況。

這種3D路況畫面可以過濾掉不重要的道路交通資訊,只呈現對司機最重要的資訊,可以有效減輕司機的認知負擔。

v2-07f3c388732a529817bb0425a533bbf4_r.jp

AI全智能ADAS汽車防撞警示系統顯示幕展示動態3D路況。

而這個3D路況就是用Godot引擎渲染出來的。

Godot遊戲引擎在我們自製的嵌入式設備上運行成功了!

v2-8b51d1794b5a0a08ec219322873d48a3_r.jp

這個小顯示屏採用了ARM CPU和GPU,操作系統是一個高度裁剪過的Android系統。 在這樣一個小巧的系統上,要運行Unity之類的大型3D遊戲引擎是不太可能的,而自己用OpenGL ES擼一個好用的3D渲染引擎又太費時,經過充分調研和測試,我們最終選擇了Godot引擎。

v2-c1a612d2a6b0d70021caf077da7ade07_r.jp

選擇Godot引擎的主要理由是:

 

1. 寬鬆的開源協定。 Godot引擎的原始程式碼採用MIT協定發佈,這意味著我們可以在商業專案中免費使用Godot Engine,並且可以自由地修改Godot的原始程式碼,將其移植到我們自己的硬體平臺上。 這個需求用Unity之類的閉源遊戲引擎肯定是不行的。

其實我們最初的原型是用Unity開發的,後來因為無法移植而放棄了Unity,所以說還是開源軟體好。

 

2. 所見即所得的開發環境。我們也嘗試過OGRE等其他3D遊戲引擎,但是它們都沒有Godot這樣強大而好用的開發工具,你只能用代碼來構造場景,這樣效率就很低。而Godot提供了和Unity類似的開發體驗,直接把模型、光源、攝像機拖進場景,再設置參數就可以了,隨時可以看到渲染效果,搭建場景非常方便。

 

3. 自帶的GUI控制項非常好用。

Godot原本是個2D遊戲引擎,所以天然地對2D渲染有著良好的支持。它自帶了幾十種GUI控制項,直接拖到場景中去,就可以迅速構造出一個2D交互介面,對於熟悉Xcode和Qt的人來說很容易上手。

實際上Godot引擎的開發環境(Editor)就是用Godot自己的GUI控制項搭起來的,這一點是非常厲害的。相比之下,Unity的GUI工具就沒有這麼簡便了。

 

4. 一鍵匯出到目標平臺的能力。我們在電腦上開發3D遊戲,在電腦上測試OK之後,直接一鍵匯出project,然後把匯出的檔拷貝到我們的嵌入式設備上就可以使用了,渲染效果和電腦上一模一樣,省去了適配不同平臺的麻煩。

 

 

但是不得不說,Godot也有一些不足:

 

1. 渲染性能不如Unity。

當我們的模型總面數達到30萬的時候,Unity仍可以渲染60幀,而Godot只能渲染不到30幀。

經過分析,Unity主要採用Deferred rendering,並且在一次Draw Call中渲染盡可能多的物體(比如所有GUI控制項可以在一個Draw Call內渲染完),以減少Draw Call。 而Godot採用了不同的思路,它通過調整渲染順序,盡可能減少shader change。 兩種方式各有千秋,但就目前來說,Unity的渲染性能更勝一籌,希望Godot加油啊。

 

2. 對嵌入式GPU的抗鋸齒支援不太好。

在開發AI防碰儀的早期階段,當時 Godot 的最新版本為 3.1,這個版本對 MSAA 抗鋸齒的支援非常有限。 具體來說,就是不支援OpenGL ES 2.0的MSAA擴展。

而我們的Mali-400 GPU偏偏只支援OpenGL ES 2.0,這就用不了MSAA了嗎? 也不是,幸好Godot是一個比較活躍的開源軟體,在Github上有人為Godot貢獻了OpenGL ES 2.0的MSAA補丁。 我們在合併這個補丁之後又做了一些修改,就可以啟用MSAA了,渲染品質瞬間提升了一截。

 

現在Godot已經發佈了3.2版本,這個版本是支援在OpenGL ES 2.0上啟用MSAA的,大家可以放心使用。

bottom of page