作為一個3D的項目,從用戶打開頁面到最終模型的渲染需要經(jīng)過多個流程,加載的" />

日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

基于 Three.js 的 3D 模型加載優(yōu)化

來源: 責(zé)編: 時間:2024-07-19 08:01:57 268觀看
導(dǎo)讀一、前言近段時間,我們使用three.js完成了vivo擬我形象的開發(fā)工作,大家可以在vivo賬號中擬制屬于自己的3D形象,也可以保存作為自己的頭像名片。
作為一個3D的項目,從用戶打開頁面到最終模型的渲染需要經(jīng)過多個流程,加載的

d2p28資訊網(wǎng)——每日最新資訊28at.com

一、前言

近段時間,我們使用three.js完成了vivo擬我形象的開發(fā)工作,大家可以在vivo賬號中擬制屬于自己的3D形象,也可以保存作為自己的頭像名片。d2p28資訊網(wǎng)——每日最新資訊28at.com


d2p28資訊網(wǎng)——每日最新資訊28at.com

圖片d2p28資訊網(wǎng)——每日最新資訊28at.com

作為一個3D的項目,從用戶打開頁面到最終模型的渲染需要經(jīng)過多個流程,加載的時間也會比普通的H5項目要更長一些。然而過長的等待時間會造成大量的用戶流失,這部分用戶沒有體驗到具體的功能就退出了頁面非常的遺憾,為了提升首屏加載的轉(zhuǎn)化率,需要盡可能的降低loading的時間。這里就分享一些我們在模型加載優(yōu)化方面的心得。d2p28資訊網(wǎng)——每日最新資訊28at.com

二、模型加載的優(yōu)化思路

想對加載進(jìn)行優(yōu)化,首先需要了解Three.js加載模型時的工作流程,并分析出其中耗時的部分進(jìn)行針對性的處理。d2p28資訊網(wǎng)——每日最新資訊28at.com

在Three.js中,模型從加載到渲染需要經(jīng)過模型下載、序列化模型、網(wǎng)格解析、寫入緩存和渲染模型幾個步驟,經(jīng)過分析發(fā)現(xiàn)主要的瓶頸在網(wǎng)絡(luò)請求和網(wǎng)格解析兩個部分,所以整體的優(yōu)化思路就是減少網(wǎng)絡(luò)請求資源的體積和提升網(wǎng)格的解析速度。d2p28資訊網(wǎng)——每日最新資訊28at.com


d2p28資訊網(wǎng)——每日最新資訊28at.com

圖片d2p28資訊網(wǎng)——每日最新資訊28at.com

三、縮小模型的體積

3.1 常見的解決方案

目前主流的壓縮方案是使用google的draco庫對模型進(jìn)行壓縮。draco的原理類似降低圖片的分辨率,通過減少模型的頂點數(shù)起到壓縮體積的效果。d2p28資訊網(wǎng)——每日最新資訊28at.com

也就是說draco是一種有損的壓縮方式,這樣就會帶來諸多的問題d2p28資訊網(wǎng)——每日最新資訊28at.com

  • 可能在網(wǎng)格連接處存在畫面模型撕裂。
  • 僅僅壓縮頂點只能將50.7mb的人物模型壓縮到49.5,壓縮效果有限。
  • draco前臺decoder在h5中的解算效率不理想,可能節(jié)省下來的網(wǎng)絡(luò)請求時間還沒有增加的數(shù)據(jù)解算的時間長。

基于以上幾點,最終我們放棄了draco的壓縮方案。d2p28資訊網(wǎng)——每日最新資訊28at.com

圖片d2p28資訊網(wǎng)——每日最新資訊28at.com

使用draco壓縮之后導(dǎo)致的模型撕裂d2p28資訊網(wǎng)——每日最新資訊28at.com

3.2 進(jìn)階方案

高端的食材,往往只需要采用最樸素的烹飪方式。經(jīng)過一些嘗試,我們發(fā)現(xiàn)將glb模型直接打成zip包可以明顯的提升模型的壓縮效率。50.7mb的人物模型可以壓縮到11.6mb。d2p28資訊網(wǎng)——每日最新資訊28at.com

圖片d2p28資訊網(wǎng)——每日最新資訊28at.com

圖片d2p28資訊網(wǎng)——每日最新資訊28at.com

但是Three.js提供的gltfloader是不能直接加載zip文件的,于是我們需要對其進(jìn)行功能擴(kuò)展。d2p28資訊網(wǎng)——每日最新資訊28at.com

Three.js加載gltf模型是首先通過fetch請求獲取到模型的arraybuffer,再對arraybuffer進(jìn)行格式化。所以我們只需要在模型格式化之前攔截zip文件進(jìn)行解壓縮即可。d2p28資訊網(wǎng)——每日最新資訊28at.com

圖片d2p28資訊網(wǎng)——每日最新資訊28at.com

于是我們使用jszip,資源加載完成后判斷資源的后綴,如果是zip文件就使用jszip進(jìn)行解壓縮。d2p28資訊網(wǎng)——每日最新資訊28at.com

圖片d2p28資訊網(wǎng)——每日最新資訊28at.com

看起來還不錯,在保證視覺效果的同時又可以大幅壓縮模型的體積,那么有沒有可能做的再極致一些呢?d2p28資訊網(wǎng)——每日最新資訊28at.com

既然是針對性的場景,我們就可以從解壓縮的解算開始入手,于是我們使用rust寫了一個解壓工具,將其轉(zhuǎn)換成wasm包代替jszip,可以發(fā)現(xiàn)wasm的冷啟動性能確實要比js好很多,可以將解壓的時長從幾十到100毫秒降低到1毫秒左右,適合體積比較小的解壓縮場景。d2p28資訊網(wǎng)——每日最新資訊28at.com

圖片d2p28資訊網(wǎng)——每日最新資訊28at.com

圖片d2p28資訊網(wǎng)——每日最新資訊28at.com

四、文件的加解密

作為一個h5項目,獲取到靜態(tài)資源的鏈接并不困難,所以需要對模型文件進(jìn)行一點點加密,讓破解起來沒有那么容易。同時解密的過程不能顯著延長資源加載的時間,影響用戶體驗。d2p28資訊網(wǎng)——每日最新資訊28at.com

基于數(shù)據(jù)解密的效率,我們可以截取文件buffer的一部分進(jìn)行加密,而不對全文進(jìn)行加密,同時將數(shù)據(jù)解密的過程也放到wasm中,提升解算效率的同時也增強(qiáng)了安全性。采用對稱加密的算法,同一個方法既可以用于加密,也可以用于解密。d2p28資訊網(wǎng)——每日最新資訊28at.com

按照模型加載的流程,解密的操作應(yīng)該放在解壓縮之后,序列化之前,那么如何判斷數(shù)據(jù)是否進(jìn)行了加密呢,可以通過判斷解壓數(shù)據(jù)decode以后是否有g(shù)lTF的標(biāo)記來確定。d2p28資訊網(wǎng)——每日最新資訊28at.com

圖片d2p28資訊網(wǎng)——每日最新資訊28at.com

如下圖,數(shù)據(jù)解密的耗時幾乎可以忽略不計,可以放心使用。d2p28資訊網(wǎng)——每日最新資訊28at.com

圖片d2p28資訊網(wǎng)——每日最新資訊28at.com


d2p28資訊網(wǎng)——每日最新資訊28at.com

五、如何優(yōu)化首幀的渲染體驗

優(yōu)化完模型的加載,繼續(xù)來優(yōu)化模型的渲染,在加載一個體積比較大的模型的時候經(jīng)常會有頁面的卡死的情況出現(xiàn),需要從兩方面治標(biāo)也治本的進(jìn)行優(yōu)化:d2p28資訊網(wǎng)——每日最新資訊28at.com

  1. 通過減少頁面的卡停來優(yōu)化用戶的感官體驗。
  2. 通過縮短首屏渲染的時長來解決根本問題。

5.1 減少頁面的卡停

在模型加載的時候通常會設(shè)置一個loading頁面來展示當(dāng)前的加載進(jìn)度,同時loading頁也可以播放一些動效或者互動來讓用戶等待的過程中不那么無聊。但是由于js單線程的特性,在進(jìn)行首幀渲染的時候任何事件都不無法響應(yīng),會讓用戶誤以為頁面卡死,造成流失。d2p28資訊網(wǎng)——每日最新資訊28at.com

為了解決這個問題我們可以使用分步加載的方案,在模型加載的時候先遍歷第一層網(wǎng)格,將所有的網(wǎng)格隱藏起來,然后循環(huán)這些網(wǎng)格,每展示一個就執(zhí)行一次render方法,這樣就可以把一個大的卡頓分散成多個小的,不至于影響前臺的體驗。d2p28資訊網(wǎng)——每日最新資訊28at.com

圖片d2p28資訊網(wǎng)——每日最新資訊28at.com

但是這樣的方法只能讓用戶感受起來沒那么卡頓,該等的時間一點沒少,過長的等待時間還是會讓用戶等的不耐煩,有沒有其他解決卡頓的方式呢?這就要從Three.js的渲染邏輯來進(jìn)行分析了。d2p28資訊網(wǎng)——每日最新資訊28at.com

5.2 縮短首幀渲染的時間

由于我們做的是一個捏臉的項目,通過形態(tài)鍵來實現(xiàn)不同的臉型,表情等表現(xiàn)。在Three.js中存儲形態(tài)鍵信息的屬性在geometry.morphAttributes中,形態(tài)鍵存放的頂點信息總數(shù)與網(wǎng)格的頂點數(shù)相同,這就意味著同一個模型有多少個形態(tài)鍵,就額外需要加載多少套網(wǎng)格的頂點信息。在首次渲染的時候Three.js會遍歷每一個形態(tài)鍵的頂點信息,生成一個float32array,而這個巨量的遍歷操作就是造成卡頓的根本原因。d2p28資訊網(wǎng)——每日最新資訊28at.com

圖片d2p28資訊網(wǎng)——每日最新資訊28at.com

如何解決這個循環(huán)黑洞呢,我想到了steamdeck上的著色器預(yù)緩存,通過將著色器編譯的結(jié)果進(jìn)行持久化,縮短頁面加載的時間。那么我們只要將每一個網(wǎng)格的形態(tài)鍵編譯的結(jié)果儲存起來就行了。d2p28資訊網(wǎng)——每日最新資訊28at.com

/three/src/renderers/webgl/WebGLMorphtargets.jsd2p28資訊網(wǎng)——每日最新資訊28at.com

圖片d2p28資訊網(wǎng)——每日最新資訊28at.com

通過這種方式成功的將首幀渲染的時間從7秒縮短到0.6秒,大幅的提升了用戶的體驗。d2p28資訊網(wǎng)——每日最新資訊28at.com

講到這里,大家可能發(fā)現(xiàn)了,雖然首幀渲染的時長縮短了,但是形態(tài)鍵緩存的資源有80mb,壓縮后也有15mb,這塊的時長可不可以繼續(xù)壓榨呢,先看一下資源的處理流程,處理解壓后的文件需要將文件解析成JSON字符串,然后在轉(zhuǎn)換成float32array,這里耗時最大的點就是JSON.parse的操作,有沒有更好的方式處理呢,可以將這部分內(nèi)容丟到rust里面,平均可以減少0.5s的時間。d2p28資訊網(wǎng)——每日最新資訊28at.com

圖片d2p28資訊網(wǎng)——每日最新資訊28at.com

圖片d2p28資訊網(wǎng)——每日最新資訊28at.com

六、總結(jié)與規(guī)劃

以上就是我們的優(yōu)化流程,將glb模型文件壓縮成zip包,配合前臺wasm解壓工具降低模型的加載時間。通過增加形態(tài)鍵緩存的方式來降低首幀渲染的時長。d2p28資訊網(wǎng)——每日最新資訊28at.com

圖片d2p28資訊網(wǎng)——每日最新資訊28at.com

經(jīng)過這一系列的操作,成功的將模型的體積從50mb壓縮到11mb,增加了額外80mb的形態(tài)鍵緩存也可以使用zip壓縮到15mb,處理后頁面的首次加載時長從15秒縮短到5秒,算是一個不小的提升。d2p28資訊網(wǎng)——每日最新資訊28at.com

然而,我們也意識到還有進(jìn)一步的優(yōu)化空間,譬如目前雖然有了形態(tài)鍵緩存,但是原模型中的形態(tài)鍵信息還存儲在模型中,這一部分的信息不需要被threejs讀取,卻很大的占用了模型的體積,后續(xù)可以開發(fā)一個gltf-pipeline類似的處理工具,將形態(tài)鍵緩存直接整合進(jìn)gltf模型中,同時把整個模型的序列化工作放到wasm中處理,降低模型的尺寸的同時也可以減少模型解析的時長。期待為大家?guī)砀玫氖褂皿w驗。d2p28資訊網(wǎng)——每日最新資訊28at.com


d2p28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-101717-0.html基于 Three.js 的 3D 模型加載優(yōu)化

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Java 函數(shù)式接口,一文徹底剖析!

下一篇: 深入探索 Vite 的熱更新(HMR)實現(xiàn)

標(biāo)簽:
  • 熱門焦點
  • K60 Pro官方停產(chǎn) 第三方瞬間漲價

    雖然沒有官方宣布,但Redmi的一些高管也已經(jīng)透露了,Redmi K60 Pro已經(jīng)停產(chǎn)且不會補(bǔ)貨,這一切都是為了即將到來的K60 Ultra鋪路,屬于廠家的正常操作。但有意思的是該機(jī)在停產(chǎn)之后
  • Redmi Buds 4開箱簡評:才199還有降噪 可以無腦入

    在上個月舉辦的Redmi Note11T Pro系列新機(jī)發(fā)布會上,除了兩款手機(jī)新品之外,Redmi還帶來了兩款TWS真無線藍(lán)牙耳機(jī)產(chǎn)品,Redmi Buds 4和Redmi Buds 4 Pro,此前我們在Redmi Note11T
  • 太卷!Redmi MAX 100英寸電視便宜了:12999元買Redmi史上最大屏

    8月5日消息,從小米商城了解到,Redmi MAX 100英寸巨屏電視日前迎來官方優(yōu)惠,到手價12999元,比發(fā)布價便宜了7000元,在大屏電視市場開卷。據(jù)了解,Redmi MAX 100
  • 一篇文章帶你了解 CSS 屬性選擇器

    屬性選擇器對帶有指定屬性的 HTML 元素設(shè)置樣式。可以為擁有指定屬性的 HTML 元素設(shè)置樣式,而不僅限于 class 和 id 屬性。一、了解屬性選擇器CSS屬性選擇器提供了一種簡單而
  • 三分鐘白話RocketMQ系列—— 如何發(fā)送消息

    我們知道RocketMQ主要分為消息 生產(chǎn)、存儲(消息堆積)、消費 三大塊領(lǐng)域。那接下來,我們白話一下,RocketMQ是如何發(fā)送消息的,揭秘消息生產(chǎn)全過程。注意,如果白話中不小心提到相關(guān)代
  • 梁柱接棒兩年,騰訊音樂闖出新路子

    文丨田靜 出品丨牛刀財經(jīng)(niudaocaijing)7月5日,企鵝FM發(fā)布官方公告稱由于業(yè)務(wù)調(diào)整,將于9月6日正式停止運營,這意味著騰訊音樂長音頻業(yè)務(wù)走向消亡。騰訊在長音頻領(lǐng)域還在摸索。為
  • 網(wǎng)紅炒股不為了賺錢,那就是耍流氓!

    來源:首席商業(yè)評論6月26日高調(diào)宣布入市,網(wǎng)絡(luò)名嘴大v胡錫進(jìn)居然進(jìn)軍了股市。在一次財經(jīng)媒體峰會上,幾個財經(jīng)圈媒體大佬就“胡錫進(jìn)炒股是否知道認(rèn)真報道”展開討論。有
  • 三星推出Galaxy Tab S9系列平板電腦以及Galaxy Watch6系列智能手表

    2023年7月26日,三星電子正式發(fā)布了Galaxy Z Flip5與Galaxy Z Fold5。除此之外,Galaxy Tab S9系列平板電腦以及三星Galaxy Watch6系列智能手表也同期
  • iQOO Neo8 Pro評測:旗艦雙芯加持 最強(qiáng)性能游戲旗艦

    【Techweb評測】去年10月,iQOO推出了一款Neo7手機(jī),該機(jī)搭載了聯(lián)發(fā)科天璣9000+,配備獨顯芯片Pro+,帶來了同價位段最佳的游戲體驗,一經(jīng)上市便受到了諸多用
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产精品大片wwwwww| 久久精品久久99精品久久| 亚洲国产日本| 99在线观看免费视频精品观看| 一区二区三区精密机械公司| 欧美一级淫片播放口| 免费不卡在线观看| 欧美精品一区二区三| 国产精品一级久久久| 在线观看亚洲精品| 一区二区毛片| 久久九九精品| 欧美日韩精品一区二区天天拍小说 | 老司机精品视频一区二区三区| 欧美美女喷水视频| 国产午夜精品美女视频明星a级| 亚洲国产精品一区制服丝袜| 99在线观看免费视频精品观看| 亚洲欧美另类中文字幕| 麻豆国产精品va在线观看不卡| 欧美日韩亚洲高清一区二区| 国内精品久久久久久影视8 | 欧美一区在线看| 欧美精品18+| 国产亚洲精品久久久久动| 亚洲精品麻豆| 欧美中文字幕| 欧美三级网址| 亚洲高清久久久| 亚洲自拍偷拍网址| 欧美国产日韩在线观看| 国产亚洲综合在线| 一区二区三区视频免费在线观看| 久久精品在线免费观看| 欧美视频精品在线| 在线国产欧美| 性欧美18~19sex高清播放| 欧美另类人妖| 怡红院av一区二区三区| 亚洲欧美日韩一区在线观看| 欧美不卡视频一区| 国际精品欧美精品| 亚洲欧美电影在线观看| 欧美人与性动交α欧美精品济南到| 国内精品久久久久久久影视蜜臀 | 欧美另类变人与禽xxxxx| 激情欧美一区二区| 性欧美xxxx大乳国产app| 欧美日韩日本国产亚洲在线| 亚洲国产一二三| 久久久久欧美| 国产午夜精品美女毛片视频| 亚洲尤物在线| 欧美日韩在线播放一区| 91久久久精品| 美女图片一区二区| 激情久久综合| 久久精品91| 国产欧美精品一区| 亚洲一区二区高清视频| 欧美日韩国产欧美日美国产精品| 亚洲国产日韩欧美一区二区三区| 久久久免费av| 国产一区二区主播在线| 性欧美办公室18xxxxhd| 国产精品麻豆成人av电影艾秋| 日韩亚洲国产欧美| 欧美成人免费一级人片100| 精品福利av| 久久一区激情| 在线成人激情视频| 久久久久女教师免费一区| 国内精品**久久毛片app| 久久福利视频导航| 好吊视频一区二区三区四区| 久久精品九九| 黄色一区三区| 久久综合狠狠综合久久综合88| 狠狠色噜噜狠狠色综合久| 久久久精彩视频| 国产综合在线看| 久久久在线视频| 在线观看亚洲视频| 欧美不卡在线视频| 亚洲欧洲精品一区二区三区波多野1战4| 免费av成人在线| 亚洲人成欧美中文字幕| 欧美精品aa| 夜夜夜久久久| 国产精品国产自产拍高清av王其 | 农夫在线精品视频免费观看| 91久久夜色精品国产网站| 欧美国产精品中文字幕| 亚洲卡通欧美制服中文| 欧美日韩妖精视频| 亚洲伊人一本大道中文字幕| 国产精品亚洲成人| 欧美与黑人午夜性猛交久久久| 国产亚洲精品久久久久久| 久久久久看片| 亚洲片国产一区一级在线观看| 欧美激情性爽国产精品17p| 日韩视频一区二区三区| 欧美色播在线播放| 性欧美videos另类喷潮| 樱花yy私人影院亚洲| 欧美国产日韩一区二区三区| 一本综合久久| 国产日韩精品一区二区浪潮av| 久久久人成影片一区二区三区观看 | 老司机成人在线视频| 亚洲三级色网| 国产精品久久久久久久久免费桃花| 性色av一区二区三区| 在线日韩av永久免费观看| 欧美精品在线视频| 亚洲欧美中文另类| 在线成人www免费观看视频| 欧美伦理91| 欧美亚洲在线播放| 亚洲国产成人av在线| 欧美日韩在线精品一区二区三区| 午夜精品av| 伊人成人在线视频| 欧美日韩一区二区免费视频| 性感少妇一区| 亚洲欧洲精品一区二区| 国产精品伊人日日| 欧美mv日韩mv国产网站app| 亚洲无线一线二线三线区别av| 国产一区二区你懂的| 欧美精品18videos性欧美| 香蕉成人伊视频在线观看| 亚洲国产精品一区| 国产精品美女久久久久久2018| 久久夜色精品国产| 亚洲一区二区三区在线观看视频| 一区免费观看| 国产精品久久久久一区| 蜜桃精品久久久久久久免费影院| 亚洲视频免费在线观看| 在线电影欧美日韩一区二区私密| 国产精品swag| 欧美成人视屏| 欧美中文字幕久久| 亚洲精品综合| 激情视频一区| 国产精品一区一区三区| 欧美久久久久久久久| 久久国产一区| 亚洲午夜一区二区| 亚洲黄色性网站| 国产亚洲成人一区| 欧美香蕉大胸在线视频观看| 免费成人你懂的| 欧美一区激情视频在线观看| 99精品国产高清一区二区| 伊人夜夜躁av伊人久久| 国产裸体写真av一区二区| 欧美精品在线看| 美国成人直播| 久久经典综合| 亚洲欧美综合v| 在线天堂一区av电影| 亚洲国产人成综合网站| 国产一区二区三区免费不卡| 国产精品久久一卡二卡| 欧美日韩国产色视频| 美女在线一区二区| 欧美一区二区免费视频| 亚洲视频在线一区观看| 日韩视频欧美视频| 亚洲国产综合视频在线观看| 黑丝一区二区| 国产亚洲精久久久久久| 国产精品一香蕉国产线看观看| 欧美四级电影网站| 欧美日韩国产综合久久| 欧美激情精品久久久久久久变态| 久久综合网hezyo| 久久久水蜜桃| 久久久久在线| 久久久99免费视频| 欧美在线视频观看| 亚洲欧美日韩国产综合在线| 中文av字幕一区| 一区二区精品国产| 99re在线精品| 艳女tv在线观看国产一区| 亚洲精品五月天| 亚洲国产综合视频在线观看| 在线观看日韩精品| 伊人一区二区三区久久精品| 狠狠久久亚洲欧美专区| 国产一区二区三区自拍| 国产一区二区久久精品| 国产主播一区二区| 狠狠久久婷婷| 在线国产精品播放| 亚洲国产高潮在线观看| 91久久精品国产91性色tv| 亚洲国产乱码最新视频| 亚洲激情偷拍| 亚洲久久在线|