我的訂單|我的收藏|我的商城|幫助中心|返回首頁
搜維爾科技[www.skcmold.com]>服務>系統(tǒng)維保 升級改造>數(shù)字媒體>數(shù)字技術

Unity 2018.2正式支持WebAssembly

文章來源:Unity 作者:frank 發(fā)布時間:2018年08月21日 點擊數(shù): 字號:

2015年我們宣布計劃將Unity WebGL構建目標的導出文件改為WebAssembly,即Wasm。現(xiàn)在Unity 2018.2已經(jīng)支持這項改動。本篇文章我們將介紹它是如何實現(xiàn),以及對使用Unity制作交互式Web內(nèi)容的開發(fā)者的意義所在。

Wasm的發(fā)展

我們在Unity 5.6中曾對WebAssembly支持作為實驗性功能發(fā)布,WebAssembly剛開始就得到四大主流桌面端瀏覽器的支持。從此時起,Unity和瀏覽器就開始加入不少相關的改進內(nèi)容和錯誤修復。

從此WebAssembly的用戶使用量也在增長,我們得到了許多積極的反饋。所以下一步計劃是正式支持它:Unity 2018.1標志著對WebAssembly支持的實驗階段結束,同時我們也實現(xiàn)了制作Wasm-only版本的可能。

Unity 2018.2,Wasm最終取代了asm.js,成為了默認鏈接目標(Linker Target)。這意味著,當開發(fā)者發(fā)布Unity WebGL構建目標時,Unity 2018 LTS將默認使用Wasm。

  

這是一個非常重要的里程碑,我們一直在為實現(xiàn)這個目標而努力。我們的要求是:確保Unity的實現(xiàn)和瀏覽器支持是穩(wěn)定的,并且需要覆蓋Wasm的內(nèi)部測試,這其中包括升級Emscripten和修復代碼中的一些問題。

如今我們擁有了所有測試套件的Wasm變體,任何將要合并到程序主線的改動都會針對WebAssembly進行測試。

  

請注意:我們?nèi)匀痪S護和運行asm.js套件,但現(xiàn)在所有要合并到主線的改動都是針對Wasm進行測試。

WebAssembly與asm.js

下面詳細介紹一下WebAssembly,并探討與asm.js之間的區(qū)別。

Wasm比asm.js速度更快、容量更小且內(nèi)存使用率更高,這些都是Unity WebGL導出的痛點。Wasm也許不能解決所有的問題,但它能改善所有領域的平臺。需要注意,性能可能會因瀏覽器實現(xiàn)而異。但所有瀏覽器廠商都將致力于支持和改進WebAssembly。

打開Wasm文件時,你會立即注意到它是一個二進制文件,而asm.js是個文本文件。這種發(fā)布代碼的方法比較緊湊,但是也造成開發(fā)者無法在調(diào)試的時候而閱讀或修改代碼。

Wasm有自己的指令集,而asm.js則是“高度可優(yōu)化”的Javascript子集。在開發(fā)構建中,WebAssembly給算術運算加入了更為精確的錯誤檢測功能,它能在特定情況拋出異常,例如:除以零、將大浮點數(shù)舍為整數(shù)等。在非開發(fā)版本中,這類算術錯誤的檢測將被屏蔽,所以不會影響用戶體驗。

1、代碼大小

為了生成WebAssembly,我們有一套基于IL2CPP、emscripten和binaryen復雜的工具鏈,它會將C/C++和C#代碼轉換為WebAssembly。這會產(chǎn)生二進制文件<build name>.wasm.code.Unityweb,從而實現(xiàn)比asm.js更小的版本。

此外,WebAssembly開發(fā)版本的代碼大小要比asm.js小數(shù)十MB,而非開發(fā)版本的大小會小幾百KB。為了讓你了解衡量基線,WebAssembly空項目的代碼大小約比asm.js的小12%,如果包含3D物理則會小18%。

  

請注意:上圖的測試結果在測量時不包含任何非必要資源包,也不包含內(nèi)置著色器,使用Brotli作為壓縮格式。對于任意改進內(nèi)容,例如:性能、內(nèi)存、載入時間,得到的改進效果會根據(jù)項目而異。

2、內(nèi)存

限定Unity堆的大小是asm.js的限制之一,即Unity堆的大小必須在構建時指定,后面無法進行更改。WebAssembly能讓Unity堆的大小在運行時增長,從而使Unity內(nèi)容的內(nèi)存使用超過啟動時指定的初始堆大小。

這意味著開發(fā)者可以讓內(nèi)容從例如32MB這樣的小型堆開始,并讓它根據(jù)需要增長,這在之前是無法實現(xiàn)的。

  

將Memory Size值視為內(nèi)容一開始的初始大小,這是Unity 2018.2中的功能,所以可以立即使用此功能。但是如果構建目標是asm.js,則無法使用此方法,因為無法調(diào)整堆的大小。

如果堆增長得過多,瀏覽器可能會耗盡內(nèi)存,是否過多取決于瀏覽器。為了使各瀏覽器獲得一致的行為,請設置Unity堆的最大值。你可以通過在編輯器腳本中設置emscripten參數(shù) “-s WASM_MEM_MAX=<value>” 來實現(xiàn)。

例如:PlayerSettings.WebGL.emscriptenArgs = "-s WASM_MEM_MAX=512MB";

請注意:內(nèi)存最大值為2032,任何大于此數(shù)值都將導致瀏覽器中的運行時錯誤。

Wasm在載入時能更高效地使用內(nèi)存。因此它能減少用戶在使用asm.js時遇到的內(nèi)存不足問題,尤其是在32位瀏覽器上。更多關于Unity WebGL中的內(nèi)存處理方式,請閱讀:Unity WebGL內(nèi)存詳解。

3、性能

Wasm和asm.js之間的性能差異取決于瀏覽器。Wasm作為二進制文件擁有比解析為JavaScript文本文件的asm.js更快的載入速度。已經(jīng)被編譯的Wasm代碼模塊會存儲在IndexedDB緩存中,從而在重載相同內(nèi)容時實現(xiàn)快速的啟動過程。為了利用Wasm緩存功能,只要確保啟用Data Caching選項即可。

啟動后,在針對asm.js代碼樣式優(yōu)化其JavaScript引擎的瀏覽器中,Assembly的執(zhí)行速度將和asm.js旗鼓相當。如果在之前無法識別asm.js的瀏覽器上運行Wasm,那么Wasm的速度明顯會更快。

根據(jù)代碼的不同,一些指令在Wasm的速度會更快,例如:64位整數(shù)算術,它在asm.js沒有相應的特定指令。

4、多線程

WebAssembly多線程支持或許是最受期待的功能,也是最能提高性能的功能。該功能本來應該于今年早些時候在瀏覽器中推出,但是由于Spectre和Meltdown的安全問題,必須禁用SharedArrayBuffer支持,而這是實現(xiàn)該功能的重要組成部分。

好消息是,在最近多個瀏覽器加入了很多安全措施,以便重新啟用SharedArrayBuffer,我們也已經(jīng)看到多個跡象表明這些瀏覽器將要在即將推出的版本中發(fā)布該功能。

Unity方面,我們打算為該功能的發(fā)布做好準備,所以我們正積極地開發(fā)Wasm多線程支持,它將在接下來數(shù)月作為實驗功能發(fā)布,該支持僅限于本地內(nèi)部線程,例如:目前沒有C#線程。這里的內(nèi)部指的是用于蒙皮,動畫,剔除,AI尋路和其它子系統(tǒng)的作業(yè)線程。一開始它們可能不會被全部啟用,但我們的長期目標是盡可能利用多線程功能。

調(diào)試

調(diào)試對asm.js來說一直是個挑戰(zhàn)。但是WebAssembly中的調(diào)試還沒有變得更好。雖然瀏覽器開始在開發(fā)套件中提供WebAssembly調(diào)試,但是這些調(diào)試工具尚未很好地擴展到Unity3D的內(nèi)容大小。

Wasm的設計初衷是“開放和可調(diào)試”,所以可以期待瀏覽器在未來將提供實現(xiàn)該目標的更好的工具。與此同時,開發(fā)者可以使用其它調(diào)試方法:

通常Unity WebGL版本中的問題出現(xiàn)在已構建游戲與瀏覽器API交互層中。該交互層位于UnityLoader.js和<build name>.asm/wasm.framework.Unityweb中,它包含易于讀取的JavaScript代碼,便于通過瀏覽器內(nèi)置開發(fā)工具進行調(diào)試。

對于調(diào)試C#代碼,Debug.Log()通常是唯一選項,因此建議盡可能在其它平臺上進行調(diào)試。

對于高級調(diào)試功能,請嘗試導出為asm.js,從而能夠使用console.log().來注釋所生成的asm.js內(nèi)容。

值得一提的是,Unity 2018.2中加入了IL2CPP的托管代碼調(diào)試支持,在實現(xiàn)WebAssembly多線程支持后,我們會立即開始做調(diào)試實驗。

未來展望

各瀏覽器廠商會致力繼續(xù)改進WebAssembly支持,他們一直在開發(fā)新功能和優(yōu)化內(nèi)容,用于改進啟動時間和性能。

例如:

?異步Wasm實例化功能(在Unity中得到支持)

?Wasm結構化克隆功能,允許編譯后的Wasm在瀏覽器中緩存(在Unity中得到支持)

?基線和分層編譯,以加速實例化過程(在運行Unity內(nèi)容時會自動支持)

?流式實例化功能,能夠實現(xiàn)在下載時編譯Wasm代碼(正考慮是否在Unity加入支持)

?多線程功能(正在開發(fā)該功能在Unity中的支持)

?上述的一些功能已經(jīng)實現(xiàn),具體取決于瀏覽器。

我們堅信WebAssembly的未來,也鼓勵開發(fā)人員默認使用它來進行開發(fā)。如有需要,可以將asm.js保留為舊版瀏覽器的運行時回退。該功能可以通過在WebGL Player Settings中選取WebGLLinkerTarget.Both實現(xiàn)。

我們計劃在Unity 2018.3中棄用asm.js。這意味著在將來,asm.js將不會獲得任何針對Wasm的改進內(nèi)容,例如:多線程功能、SIMD等。但asm.js還會在Unity 2018 LTS發(fā)布后的二年時間里面得到支持。

電話:010-50951355 傳真:010-50951352  郵箱:sales@www.skcmold.com ;點擊查看區(qū)域負責人電話
手機:13811546370 / 13720091697 / 13720096040 / 13811548270 / 13811981522 / 18600440988 /13810279720 /13581546145

  • 暫無資料
  • 暫無資料
  • 暫無資料
  • 暫無資料
  • 暫無資料
主站蜘蛛池模板: 激情综合色五月六月婷婷| 1000部拍拍拍18勿入免费凤凰福利 | 国产a三级三级三级| 两人夜晚打扑克剧烈运动| 白嫩光屁股bbbbbbbbb| 国色天香精品一卡2卡3卡| 亚洲午夜无码久久| 韩国女友的妈妈| 巨肉黄暴辣文高h文奶汁| 亚洲精品第二页| 2020年亚洲天天爽天天噜| 日本污全彩肉肉无遮挡彩色| 午夜高清视频在线观看| 99久久综合狠狠综合久久| 欧洲精品免费一区二区三区| 国产乱码精品一区二区三区四川人 | 免费观看无遮挡www的视频| 日产2021乱码一区| 免费a级毛视频| 爱看精品福利视频观看| 无限看片在线版免费视频大全| 免费国产a国产片高清| 18禁裸男晨勃露j毛免费观看| 日本高清在线不卡| 妺妺窝人体色WWW聚色窝仙踪| 亚洲最大成人网色| 蝌蚪视频app下载安装无限看丝瓜苏| 好男人资源网在线看片| 亚洲偷自拍另类图片二区| 色哟哟精品视频在线观看| 国自产拍亚洲免费视频| 久久天天躁狠狠躁夜夜躁2014| 真实的国产乱xxxx在线| 国产男人女人做性全过程视频| 中文全彩漫画爆乳| 欧美性极品hd高清视频| 四虎影视8848a四虎在线播放| 99久久99久久久精品久久| 日本视频一区在线观看免费| 亚洲视频一区网站| 青青青视频免费|