動態

詳情 返回 返回

WebGL簡易教程——結語 - 動態 詳情

1 概述

筆者在幾年前寫過一系列關於WebGL的文章《WebGL簡易教程——目錄》,前端時間將其整理了一下,增加了一個在線案例的站點以便於學習查看。這裏就順便寫一段結語吧。

WebGL簡易教程在線案例

2 觀點

2.1 建議

這個系列文章寫了十五篇,之所以不繼續寫了是因為寫到後面代碼越來越膨脹(比如《WebGL簡易教程(十四):陰影》中的實現寫了700行代碼),一些高級的圖形技術要通過WebGL這樣底層的API來實現就不是一件很容易的事情。一般來説,要較好的實現比較高級的圖形技術,最好需要經過一定的封裝(可以參考一些圖形引擎),否則代碼複雜度會非常高。

因此,如果讀者已經完成了這十五篇教程的學習,那麼接下來就建議讀者可以選一門圖形引擎來學習,研究一下比較高級的圖形技術的實現。其實如果學習時間很緊張,並且接受程度比較高,直接選擇一門圖形引擎學習也可以。當然WebGL這樣底層的接口還是值得學習的,不過就類似於基本功,會對日後的工作產生直接或間接的助力。

另外,雖然已經有了Vulkan、WebGPU以及DX12這樣的現代圖形api,但是我不覺得初學者能直接入門這些更加底層的圖像API。圖形技術的發展與軟件編程技術相反,不是越來越高級,反而越來越低級,傾向於更好地挖掘硬件的性能。沒辦法,目前硬件的發展就是跟不上圖形技術的需求,性能總是絕對的剛需。你當然可以使用更加高級的圖形引擎API,但是凡封裝必有代價,你總有遇到需要使用底層API的時候。

2.2 趨勢

筆者還記得當年學習WebGL的時候,主流瀏覽器還只支持WebGL 1.0,但是現在主流瀏覽器幾乎都已經支持WebGL 2.0,甚至包括以封閉保守著稱的Safari。也就是説,即使是Web端圖形技術的趨勢是WebGPU,但是WebGL自身也還是不斷演進中。不要覺得支持WebGL 2.0沒什麼意義,要知道WebGL 2.0對應於嵌入式端的OpenGL ES3.0,以及桌面端的OpenGL 3.3,這使得我們增加了相當多的圖形技術可以使用,比如實例化渲染、多目標渲染等等。更重要的意義是,WebGL已經是最輕量的圖形技術API了,如果瀏覽器端都不支持的設備,你就可以光明正大地跟業主説需要設備升級了。其實在信創、嵌入式等項目中,因為一些兼容性問題,還是不得不上OpenGL這樣的老傢伙;你説WebGL要被WebGPU淘汰,那估計還得等很長一段時間。

還有一個很有意思的地方,前面我説蘋果系的技術體系是很封閉保守的,在自家的設備上甚至不願意支持OpenGL;但是在Safari上卻樂於推進WebGL和WebGPU。其實原因很簡單,我們所用的WebGL API其實並不是像我們設想的那樣是直接使用顯卡驅動裏面OpenGL API,還是根據不同的平台使用這些平台上首選圖像API接口。比如在Windows操作系統Chrome瀏覽器的WebGL,後台使用的其實是DX12;而蘋果系統Safari瀏覽器的WebGL,後台使用的卻是Metal。如果你進一步深入圖形技術行業,你就知道這種圖形API相互轉義非常常見,這其實告訴我們一個道理:不同的圖形API其實是大同小異的,關鍵是要掌握圖形技術的思想。

3 教程

記得前些年WebGL最火爆的時候,很多HR會在前端行業招會WebGL的,也有很多前端程序員在詢問是不是應該要接手WebGL的工作。其實傳統意義上的前端和WebGL除了都使用JavaScript外,兩者沒有任何共同點。傳統意義上的前端解決的是事務型的,約定俗成的界面交互性問題;WebGL則關注的是如何可視化能被人眼識別接受的不同行業的場景。WebGL其實屬於圖形領域,俗稱就是“搞三維的”。讓前端從業人員去做WebGL,無異於是讓這個人換行業了,而且是換到了一個相對更加艱深的行業,多半是很難搞定的。

但是調換一下,如果一個圖形從業者來搞WebGL,多半也是會對目前的前端技術感到眼花繚亂。説真的,現在的前端還能説上手很簡單:我寫一個html+js,丟到瀏覽器裏面就能運行嗎?説實話,應該不完全行了吧?至少我想要規範的ES6模塊是不行的,至少我需要開一個HTTP服務器,將代碼放到Web域內才行;更不談後面使用構建工具,安裝依賴庫等等,這些都是隱形的入門成本。

筆者在整理以前寫的WebGL教程的時候,本來也是想將代碼修改的更加規範,符合目前的前端主流開發範式一點。但是改起來的時候就覺得,學習WebGL的重點應該是瞭解其中的圖形技術,前端技術其實不是重點,更何況來看WebGL教程的可能並不太會前端。所以筆者還是保留了之前WebGL教程的代碼:WebGLTutorial 。另外,筆者增加了一個在線案例的站點以便於學習查看,並且在線案例的項目也在Git上開源了:webgl-tutorial-online 。

具體來説,兩者有什麼區別呢?WebGLTutorial會更加原生一點,不用開啓Web服務器,直接通過瀏覽器就可以運行。主要是用到一些文件資源,會引起跨域問題;但是原生的JS其實是由文件資源操作的,通過打開指定的文件就可以避開安全策略,可以不依賴Web服務器域內訪問。筆者也是推薦使用這個代碼進行學習,畢竟學習WebGL,JS不是關鍵,關鍵是學習其中的圖形技術。當然你有前端基礎,看看webgl-tutorial-online也行,其中的代碼可能更規範一點,功能更多,所以學習成本也會高一點。

4 資源

在文章最後就列出本教程的相關資源:

  1. WebGL簡易教程——目錄
  2. WebGL簡易教程在線案例
  3. 代碼和數據地址:WebGLTutorial
  4. WebGL簡易教程在線案例項目源碼

Add a new 評論

Some HTML is okay.