天天看點

Python開發3D遊戲技術探索

前端時間導師安排開發一個3D的強化學習環境,其實也就等于開發一個特定場景的遊戲。經過一段時間的調研與實踐,在這裡分享下自己的經驗,希望能對你有所幫助。

其實最開始的時候,導師問,能做成3D的麼,要是不行的話,2D的也行。TM,當時就是嘴賤,否則也不至于後面幾個月愁的頭發直掉😹。

Python開發3D遊戲技術探索

廢話不多說,下面開始正文部分。

1.Python能否開發遊戲

目前Python語言還是非常流行的,加上做機器學習,基本上也沒有别的開發語言的選擇,是以在語言的選型上是沒有糾結的空間的。

那Python能開發遊戲麼,答案是肯定的,并且python在開發遊戲上,也有不少優秀的遊戲的遊戲引擎可以使用。首先就是PyGame,老牌的遊戲引擎,開發文檔齊全,網上教程多,許多python遊戲開發書籍都是以PyGame為主體的。還有就是cocos-2d,一款非常好用的遊戲引擎,部落客以前使用過JS版本的開發過一個遊戲,使用其提供的IDE,非常友善,沒想到也提供了Python版本。當然還有其他比較流行的引擎,就不在一一贅述了。

​ 我也找到了一個大佬使用python開發的遊戲,大家可以參考下,​​github位址​​.

哎,上面兩款好用的引擎都是開發2D遊戲的,心塞,隻能繼續探索。

Python開發3D遊戲技術探索

2.Python3D遊戲引擎

經過調研,主要把目光發在了以下三款引擎上,OpenGL、Pyglet、Panda3D。

2.1 OpenGL

OpenGL(Open Graphics Library),意為“開放式圖形庫”,是一個編寫2D和3D應用程式的跨平台API。OpenGL 不是一個獨立的平台,是以,它需要借助于一種程式設計語言才能被使用。C / C++ / Python / Java 都可以很好支援 OpengGL。Python版本的OpenGl子產品名為PyOpenGL

聽着是不是很厲害,也确實很厲害。但是太難了,學習成本過于高了。。在看了幾篇介紹文檔後,我就放棄了。

參考資料如下,有興趣的可以看下。

​ ​​萬字長文詳解如何用Python玩轉OpenGL​​

2.2 PyGlet

Pyglet 是一個易于使用但功能強大的庫,用于在 Windows、Mac OS 和 Linux 上開發視覺豐富的 GUI 應用程式,如遊戲、多媒體等。這個庫完全是用 Python 建立的,它支援許多功能,如視窗、使用者界面事件處理、操縱杆、OpenGL 圖形、加載圖像和視訊以及播放聲音和音樂。

在剛一接觸PyGlet,就感覺很棒,很易用,當時也跟着文檔做了一個小行星遊戲,頁面如下:

Python開發3D遊戲技術探索

并且将這個小遊戲和Gym進行了整合。

還嘗試了加載3D模型,展示如下,當時一度覺得就是他了,可以是後面還是遇到了一些很難解決的問題。

Python開發3D遊戲技術探索
  1. 跨平台效果不好:我在我自己的電腦、Mac上執行,效果還可以,沒有什麼不一樣的,當我到實驗室的電腦上執行相同的代碼時,出現了很大的偏差,顯示效果很差。
  2. 一些配套項目停止維護:比如其官方文檔上推薦的3D圖形渲染引擎RatCave,已經停止了維護了,也沒有找到很好地替代的渲染引擎。在開發過程中,Pyglet加載找到的obj模型檔案,報錯問題始終無法解決(可能是我技術問題),隻能加載其提供的一些模型。。。
  3. 文檔過少:在開發過程中,遇到問題,很難找到解決方案,百度搜尋的結果基本全是Pyglet入門介紹。簡直要崩潰到大哭。

​ 參考文檔:​​PyGlet官方文檔​​。

2.3 Panda3D

當時被Pyglet折磨了一段時間後,便動了換路線的想法。網上看了Panda3D的入門介紹(類似于程式設計學習中的HelleWorld😹),哦,這有點意思哦。跟着教程,十幾分鐘做了簡單的場景,截圖如下:

Python開發3D遊戲技術探索

感覺很不錯,模型的加載、渲染、動畫的執行都很便捷,便進行了更深入的了解,開發了一個小Demo,當時心裡就大呼:是他是他就是他。。。

在使用Panda3D的過程中,也遇到了相關内容過少的問題。Panda3D雖然技術很強,可以實作很多功能,但是其被設計給有豐富相關經驗的人使用的,對于剛入門的小白不是很友好,加上國内的使用者實在是少,是以相關的解決方案基本上也是很難找到。還好其開發文檔比較全(全英文😭),根據文檔,可以解決入門時的陣痛。

想去BiliBili上找找視訊教程,隻找了一個部落客從Yutubu上下載下傳下來上傳的視訊,好難啊,英語聽力是在是不過關,最後也隻能放棄。

不過Panda3D還是很強大的,至少可以解決我所有的需求,雖然過程很痛苦。

​ 參考文檔:​​Panda3D官方文檔​​。

2.4 Unity 3D

​ 沒想到吧,還有第四個選擇。這個是我在檢索資訊的時候看到的,Unity 3D開放對Python的支援,并且官方提供了一組用于強化學習的3D環境,​​Github位址​​。

Python開發3D遊戲技術探索

3.總結