精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

擁抱新一代 Web 3D 引擎,Three.js 項目快速升級 Galacean 指南

開發 前端
本文從多個維度對比 Galacean 和 Three.js 兩款Web3D 引擎的差異,并介紹擬我形象項目從Three.js 切換到 Galacean 以后帶來的提升以及項目遷移的心得,為其他 Three.js 項目升級到 Galacean 提供參考。

01、背景

Web 3D 技術的發展日新月異,為我們帶來了前所未有的沉浸式體驗。從虛擬展示到游戲開發,從建筑可視化到教育模擬,Web 3D 技術的應用場景愈發廣泛。而在這一領域,Three.js 作為一款廣受歡迎的 JavaScript 3D 庫,憑借其簡潔易用的 API 和豐富的功能,幫助眾多開發者實現了精彩的 3D 項目。

然而,隨著項目復雜度的不斷提升,以及用戶對性能和體驗要求的日益苛刻,Three.js 逐漸顯露出一些局限性。比如在處理重負載時,很容易遇到性能瓶頸,出現卡頓、掉幀等問題。這就如同一位經驗豐富的車手,駕駛著一輛曾經性能卓越的賽車,但在面對愈發復雜的賽道和激烈的競爭時,卻發現車輛的動力和操控性漸漸力不從心。

02、Galacean:新一代 Web 3D 引擎

2.1業務簡介

擬我形象是 vivo 賬號中的一個3D數字人功能,提供一種代表自由、個性、創新和時尚的虛擬形象,為用戶提供更加生動、直觀、有趣的交流方式。采用 Native+H5混合的開發方式,其中 3D 渲染的部分基于 Three.js 進行開發。

2.2技術挑戰與痛點

  • 性能瓶頸:人物模型包含大量形態鍵以實現多樣化面部特征,導致模型加載解析耗時過長。
  • 線程阻塞:受限于JS單線程特性,模型解析過程會造成頁面短暫無響應。
  • 多模型渲染:套裝切換等場景下,多個模型同時渲染時性能問題尤為突出。
  • 陰影優化:Three.js 的陰影渲染性能消耗大,不得不通過局部陰影和限制捕捉范圍等折中方案來平衡畫質與性能。

2.3Galacean 引擎核心優勢

Galacean 是一款開源的 Web 游戲引擎,致力于打造一個開放、易用、高效的游戲開發工具,可以通過在線編輯器或者純代碼的形式進行使用。

針對現存的技術挑戰與痛點,Galacean做了深度優化:

  • 多線程處理:采用Worker避免主線程阻塞。
  • 移動端適配:對大量常量進行近似取值優化,完美適配移動端。
  • 性能突破:優化數據傳輸鏈路,創新緩存設計,顯著降低重負載場景下的卡頓現象。

此外,Galacean 基于 EC(Entity-Component)架構設計,而非 Three.js 的面向對象,大幅提升了開發的靈活性。

近期我們將渲染引擎由 Three.js 切換為 Galacean。這一舉措不僅解決了頁面卡頓問題,還提升了瀏覽器兼容性(可支持到 chrome82),幀率表現更出色,畫面質感也得到顯著改善。整體切換過程較為平滑,但也遇到了一些問題。接下來,將與大家分享此次整體升級的相關經驗。

03、調優過程

任務拆解:

作為一個數字人項目,涉及到引擎升級的模塊大致有

①環境初始化(場景、相機、光線、引擎設置)

② 模型加載

  • 骨架獲取
  • 材質獲取
  • 動畫獲取

③妝容、穿搭還原

  • 形態鍵修改
  • 貼圖、顏色修改
  • 模型替換
  • 頭像(靜態頭像、動態頭像)導出
  • 壁紙(靜態壁紙、動態壁紙、視差壁紙)導出

經過梳理,可以大致分為四類:

  • 初始化
  • 模型加載
  • 素材替換
  • 動畫狀態

接下來我們對這幾個部分進行分別的處理

3.1初始化

有別于 Three.js 的渲染器創建,Galacean 的 engine 初始化是異步方法,所以后續用到用到engine的地方需要考慮加載的時序,以及engine存在狀態的判斷。另外,Three.js 中 renderer 的渲染行為需要手動調用,一般是使用requestAnimationFrame循環調用,而Galacean則不需要,引擎開始渲染只需要調用一次 engine.run 即可。

const renderer=new THREE.WebGLRenderer({
  alpha: true,
  antialias: true,
})
document.body.appendChild(renderer.domElement)
const scene = new THREE.Scene()
const camera = new THREE.PerspectiveCamera(15, window.innerWidth/window.innerHeight, 0.1, 100)
requestAnimationFrame(function render() {
  renderer.render(scene, camera)
  requestAnimationFrame(render)
})
const engine = await WebGLEngine.create({
  canvas,
  physics: new LitePhysics()
})
engine.run()

在 Three.js 中,尺寸單位統一以米為基準,無需額外進行特殊處理。不過在角度單位的使用上存在差異:Three.js 里,僅相機的 fov(視場角)采用角度單位,其他涉及角度的參數均以弧度計量;而 Galacean 則采用更為統一的設定,所有角度相關單位均為角度。

/** Three.js */
camera.fov = 15
item.rotation.y = 15 * Math.PI/180


/** Galacean */
camera.fieldOfView = 15
item.rotation.y = 15

在Three.js中顏色的設置更加靈活,可以使用16進制或者RGB值來進行賦值,但是在Galacean中只能通過RGB來進行賦值,且有別于0-255的取值范圍,Galacean中的顏色范圍是0-1。從Galacean1.5版本開始,默認的色彩空間改為線性,在代碼中需要手動轉換一下。

/** Three.js */
directLight.color=0xffffff
directLight.intensity=0.9


/** Galacean */
const color = new Color(0.9, 0.9, 0.9, 1)
color.toLinear(color)
directLight.color = color

3.2模型加載

對于包含大量形態鍵和動畫的模型,將模型打成zip包可以有效的壓縮模型的體積,不論是Three.js還是Galacean都不支持加載zip包,但是我們可以自行擴展模型加載的鏈路,將zip下載后解壓出的模型獲取ObjectUrl再放到各自的加載器中加載,這樣加載進度的獲取也可以進行自定義,不需要進行額外的改造。

exportclassModelLoader {
  engine: WebGLEngine
  constructor(engine: WebGLEngine){
    this.engine = engine
  }
  async load(src: string) {
    const url = await fileLoader(src)
    returnthis.engine.resourceManager.load<GLTFResource>({
      url,
      type: AssetType.GLTF
    })
  }
}

Three.js 解析 glTF 模型輸出的數據結構較為簡單,主要使用模型的場景和動畫片段。由于后續需針對特定材質進行替換,所以要根據節點名獲取特定節點,再取出節點中的材質信息,模型的骨架也通過這種方式獲取。而 Galacean 輸出的數據更為全面,除動畫片段和實體信息外,模型中使用的材質、貼圖、蒙皮和網格信息也會分門別類展示,需要對應內容時直接獲取即可,相比 Three.js 更加方便。

3.3素材替換

素材替換如上文總結分為四種,分別是顏色、貼圖、形態鍵和模型的替換,顏色設置我們在初始化中已經講解,而模型加載和展示也沒有特別的內容,無非是節點/實體的添加和移除,這里我們講下貼圖和形態鍵修改的一些tips。

在Three.js中修改材質貼圖map可以直接直接使用canvas或者image,修改后需要將材質needsUpdate屬性設置為true。而在Galacean需要先將圖片加載為texture,再進行賦值。

/** Three.js */
material.map=canvas
material.needsUpdate = true


/** Galacean */
const texture: Texture2D = await engine.resourceManager.load({
  url,
  type: AssetType.Texture2D
})
material.baseTexture = texture

在Three.js中修改形態鍵,可以先通過網格中的morphTargetDictionary屬性獲取到需要修改的形態鍵的索引,然后修改morphTargetInfluences中對應索引的值即可。

在Galacean中網格渲染器中沒有存儲形態鍵的索引信息,而是存儲在MeshRenderer下的mesh屬性下的blendShapes屬性中,通過獲取對應名稱的形態鍵在數組中的索引,修改網格渲染器中blendShapeWeights屬性對應下標的值。

/** Three.js */
const index = morphTargetDictionary[keyName]


if (index !== undefined) {
  mesh.morphTargetInfluences[index] = value
}


/** Galacean */
const blendShapes = skinMeshRenderer.mesh.blendShapes
const index = blendShapes.findIndex(i=>i.name===keyName)
if (index > -1){
  skinMeshRenderer.blendShapeWeights[index] = value
}

3.4動畫

相較于Three.js的AnimationMixer和AnimationClip,Galacean擁有更加完善的面向組件的動畫系統,支持 狀態機、混合動畫、時長壓縮等,不同動畫之間的切換與播放更加簡單易維護。

/** Three.js 播放動畫片段 */
const mixer = new THREE.AnimationMixer(scene)
const actinotallow=mixer.clipAction(avatarClip)
action.play()
ticker.addEvent(delta => {
  mixer.update(delta)
})


/** Galacean 添加狀態機,播放完成回到待機狀態 */
const animationState = animator.findAnimatorState('action')
const idleStatle = animator.findAnimatorState('idle')
const transition = new AnimatorStateTransition()
transition.duration = 1
transition.offset = 0
transition.exitTime = 1
transition.destinationState = idleStatle
animationState.addTransition(transition)
animator.play('action')

04、結語

Galacean 的出現,無疑為 Web 3D 開發領域帶來了新的活力。它不僅解決了 Three.js 等傳統技術在性能和功能上的諸多痛點,還以其卓越的性能、豐富的功能和易用性,為開發者打開了一扇通往更廣闊創意空間的大門。

需要注意的是,Galacean不同版本之間的API差異較大,需要進行甄別,同時開發文檔及相關的案例也需要進一步完善。

對于全新的項目,Galacean提供編碼或在線編輯器兩種方式保障創意的高效落地,詳細的文檔和案例也便于接觸 Web3D 開發的新人快速上手。

對于存量的項目,Galacean的遷移成本不高,且整個過程平滑可控,能夠有效提升現有項目的畫面表現和性能。為未來復雜度更高的需求提供性能保障。

責任編輯:龐桂玉 來源: vivo互聯網技術
相關推薦

2019-11-29 09:30:37

Three.js3D前端

2024-07-18 06:58:36

2023-07-13 10:48:22

web 3DThree.jsBlender

2022-01-16 19:23:25

Three.js粒子動畫群星送福

2025-03-17 10:38:30

2021-07-15 11:16:31

Spring WebWebFlux架構

2021-11-23 22:50:14

.js 3D幾何體

2014-10-24 14:10:50

高德導航

2012-07-25 13:19:16

ibmdw

2021-11-27 10:42:01

Three.js3D可視化AudioContex

2023-03-09 14:21:12

字節跳動云固件

2022-06-01 06:06:28

Web 3元宇宙數字化

2025-06-30 09:15:47

2009-06-25 17:14:59

JSF框架

2016-06-01 09:19:08

開發3D游戲

2013-01-04 16:15:08

微軟ERPDynamics AX

2021-04-21 09:20:15

three.js3d前端

2012-07-02 10:36:19

菲亞特

2022-03-10 16:01:29

Playwright開源

2017-04-11 10:06:10

iMac升級鍵盤
點贊
收藏

51CTO技術棧公眾號

日本成人在线免费| 免费的av在线| 91国内精品视频| 欧美一区亚洲| 亚洲福利视频网站| 手机在线看福利| 51xtv成人影院| 久久综合久久综合久久| 91美女片黄在线观| 日韩特黄一级片| 欧美aaaaaaaaaaaa| 亚洲激情电影中文字幕| 亚洲精品久久久中文字幕| 人人澡人人添人人爽一区二区| 91啦中文在线观看| 95av在线视频| 日本中文字幕在线观看视频| 午夜精品久久| 中文字幕亚洲精品| 大黑人交xxx极品hd| 日韩免费成人| 欧美日韩卡一卡二| 日本免费黄视频| av免费在线观看网址| 久久久国产精品不卡| 国产日韩欧美二区| 99久久久国产精品无码网爆| 日日骚欧美日韩| 91国内揄拍国内精品对白| 久操视频在线观看免费| 欧美成人基地| 精品日韩欧美一区二区| 久久久精品高清| 搜成人激情视频| 偷拍亚洲欧洲综合| 国产成a人亚洲精v品在线观看| 1pondo在线播放免费| 久久综合狠狠综合久久激情 | 欧洲精品一区二区三区| 亚洲一区二区3| 日韩精品福利片午夜免费观看| 番号集在线观看| 久久亚洲精华国产精华液| 国产精品免费观看高清| 亚洲国产成人在线观看| 国产乱码精品1区2区3区| 国产免费观看久久黄| 中文字幕在线一| 日韩电影在线一区| 国产成人午夜视频网址| 亚洲欧美一区二区三区在线观看| 亚洲经典三级| 性色av一区二区三区| 国产乡下妇女做爰| 亚洲三级影院| 浅井舞香一区二区| 国产精品久久久久久久久久精爆| 蜜桃久久av| 国产精品久久久久av免费| 在线永久看片免费的视频| 美女精品一区| 国产精品欧美一区二区三区奶水| 国产三级理论片| 麻豆国产一区二区| 91久久精品久久国产性色也91| 国产一区二区自拍视频| 国产精品1区2区| 成人看片视频| 色婷婷av一区二区三| 99久久国产综合色|国产精品| 国产原创精品| 欧美新色视频| 日本一区二区成人| 一区二区三区国| a级在线观看| 亚洲成av人影院| 久久久精品在线视频| jizzyou欧美16| 制服视频三区第一页精品| 日韩高清一二三区| 日韩三级视频| 最近2019中文字幕mv免费看| www.色小姐com| 亚洲一区观看| 成人妇女淫片aaaa视频| www.色播.com| 久久人人97超碰com| 亚洲永久激情精品| heyzo在线| 在线国产亚洲欧美| 亚洲av无码久久精品色欲| 欧美电影在线观看完整版| 国产亚洲精品美女久久久久| 青青草手机视频在线观看| 国产深夜精品| 91久久精品视频| 九色在线播放| 一区二区三区在线不卡| 国产精品亚洲二区在线观看| 国产精品日本一区二区不卡视频| 精品国产伦一区二区三区观看体验| 青青草视频成人| 亚洲成人国产| 青青精品视频播放| 午夜精品小视频| 中文字幕乱码亚洲精品一区| 美女黄色免费看| 国外成人福利视频| 亚洲精品久久久久国产| 熟女av一区二区| 午夜在线一区| 成人片在线免费看| 亚洲xxxxxx| 欧美性生交大片免费| 极品人妻一区二区| 久久社区一区| 26uuu另类亚洲欧美日本老年| 国产男女无套免费网站| 欧美国产日产图区| 亚洲熟妇av日韩熟妇在线| 99er精品视频| 在线观看91久久久久久| 国产精品久久久久久久妇| 精品夜夜嗨av一区二区三区| 欧美下载看逼逼| 狠狠躁少妇一区二区三区| 欧美日本韩国一区| www.99热| 日韩福利视频网| 欧美日韩精品中文字幕一区二区| 黄页在线观看免费| 91精品久久久久久久久99蜜臂| 欧美人妻一区二区三区| 一本色道88久久加勒比精品| 99久久无色码| 99福利在线| 91精品国产色综合久久ai换脸| 免费看裸体网站| 日韩中文字幕麻豆| 欧美xxxx黑人又粗又长密月| 123区在线| 精品美女一区二区三区| 玖玖爱免费视频| 国产乱人伦精品一区二区在线观看 | 特级西西444www大胆免费看| 91亚洲国产成人精品一区二区三 | 日韩免费av一区| 蜜乳av一区二区| 午夜精品区一区二区三| 国产一区一一区高清不卡| 亚洲网在线观看| 日韩xxx视频| 国产精品沙发午睡系列990531| 亚洲国产精品毛片av不卡在线| 久久99视频| 国产ts一区二区| 国产高清美女一级毛片久久| 欧洲一区二区av| 性爱在线免费视频| 国产一区二区三区av电影| 天天成人综合网| 久久伊人精品| 97久久伊人激情网| 九色在线观看| 欧美精品日韩一本| 欧美三级小视频| youjizz久久| 黄色一级大片在线观看| 久久国产综合| 成人动漫在线观看视频| 中文字幕21页在线看| 伊人伊成久久人综合网站| 伊人免费在线观看高清版| ㊣最新国产の精品bt伙计久久| 日本黄色三级网站| 一本色道久久综合| 午夜精品一区二区在线观看| 日韩一区中文| 97免费视频在线| av资源种子在线观看| 欧美一级xxx| 黄网在线观看视频| 国产精品久久久久久久久搜平片| 国产精品熟女一区二区不卡| 国产亚洲亚洲| 伊人av成人| 欧美美女黄色| 国产日韩在线播放| 欧美巨大丰满猛性社交| 色小说视频一区| 欧美一级在线免费观看| 欧美性受极品xxxx喷水| 久久机热这里只有精品| 久久久www成人免费毛片麻豆| 亚洲制服在线观看| 久久综合影音| 欧美狂野激情性xxxx在线观| 欧美美乳视频| 成人黄色在线免费观看| 亚洲电影有码| 97国产精品人人爽人人做| 亚洲免费视频一区二区三区| 日韩精品极品视频免费观看| 91亚洲视频在线观看| 欧美性生交xxxxx久久久| 欧美三级 欧美一级| 国产精品视频看| 成人免费毛片日本片视频| 激情综合网av| www.欧美日本| 99精品视频免费观看| 日本一区二区三区四区五区六区| 国产精品免费大片| 国产超碰91| 精品视频91| 国产美女91呻吟求| 伊人久久高清| 欧美性一区二区三区| 国产网红女主播精品视频| 久久激情视频久久| 成年人在线视频| 亚洲精品资源在线| 午夜视频在线播放| 日韩精品一区二区三区在线观看| 中文字幕人妻一区二区在线视频| 第一福利永久视频精品| 精品少妇theporn| 亚洲精品大片www| 欧美成人777| 亚洲天堂a在线| 中文字幕第4页| 91蜜桃在线免费视频| www.国产福利| 日本在线不卡一区| 国产精品无码一本二本三本色| 黄色日韩在线| 久久男人资源站| 综合久久婷婷| 警花观音坐莲激情销魂小说| 国产精品久久久久久影院8一贰佰| 欧洲在线视频一区| 狠狠色丁香婷婷综合影院| 久久久久久高清| 欧美1区2区3区4区| 美女三级99| 国产精品探花在线观看| 欧美婷婷久久| 日韩精品影视| 日韩人妻精品一区二区三区| 亚洲国产精品综合久久久| 欧美三级午夜理伦三级老人| 中文字幕日韩一区二区不卡| 国产欧美综合一区| 欧美久久99| 亚洲不卡中文字幕无码| 国产精品久久久久毛片大屁完整版| 成人精品视频在线播放| 在线日韩视频| 国产91在线视频观看| 日韩电影一二三区| 中文字幕在线观看日| 国产精品综合视频| 国产精品成人免费一区久久羞羞| 国产成人av在线影院| 久久免费精品国产| 久久综合中文字幕| 国产精品18在线| 一区二区三区色| 久久久美女视频| 亚洲成人av电影| jizz国产免费| 欧美在线播放高清精品| 国产又粗又猛又黄又爽| 欧美一级午夜免费电影| 天堂网在线播放| 一区二区成人精品| 在线中文字幕-区二区三区四区| 欧美国产日韩二区| 人人澡人人添人人爽一区二区| 97在线视频免费播放| av在线日韩| 亚洲自拍偷拍福利| 国产主播性色av福利精品一区| 久久综合一区二区三区| 久久一区91| 给我免费播放片在线观看| 奇米一区二区三区av| 人妻换人妻仑乱| 2023国产精品| 黑鬼狂亚洲人videos| 高跟丝袜一区二区三区| 91美女精品网站| 日韩国产高清污视频在线观看| a天堂中文在线| 91成品人片a无限观看| 欧美亚洲黄色| 免费h精品视频在线播放| 1024精品久久久久久久久| 人人妻人人添人人爽欧美一区| 麻豆精品视频在线观看视频| 成人免费毛片日本片视频| 亚洲私人黄色宅男| 日本中文字幕在线观看视频| 欧美成人一级视频| 日韩在线免费电影| 国产91免费看片| av日韩精品| 欧美一级免费在线观看| 香蕉亚洲视频| 精品人妻一区二区免费| 18欧美亚洲精品| 中文字幕一区二区三区四区欧美| 欧美mv日韩mv国产网站| 免费a在线看| 欧美做受高潮1| 北条麻妃一区二区三区在线观看| 亚洲欧美日本国产有色| 另类av一区二区| 北京富婆泄欲对白| 亚洲精品日产精品乱码不卡| 影音先锋国产在线| 亚洲精品视频在线播放| av今日在线| 成人国产一区二区| 欧美激情第二页| 香蕉视频xxxx| 综合网在线视频| 亚洲天堂777| xxx成人少妇69| 黑人一区二区三区| 亚洲成人第一| 日本中文字幕一区| 2019男人天堂| 在线观看日韩av先锋影音电影院| 亚洲人妻一区二区| 2024亚洲男人天堂| 日韩三级视频| av动漫免费看| 国产午夜精品理论片a级大结局| 久久青青草视频| 日韩精品一区二区三区第95| 暧暧视频在线免费观看| 99re在线视频观看| 午夜视频一区| 最新日本中文字幕| 亚洲午夜久久久久中文字幕久| 国产乱叫456在线| 免费不卡欧美自拍视频| 免费精品一区二区三区在线观看| 一道本在线观看视频| 国产精品18久久久久久vr| 青娱乐国产盛宴| 亚洲成人xxx| 在线观看爽视频| 日韩电影在线播放| 美女免费视频一区| 日韩三级久久久| 欧美高清视频一二三区| 18av在线视频| 久久精品二区| 日本在线不卡视频一二三区| 天堂网av2018| 欧美大片拔萝卜| 深夜成人在线| 亚洲日本无吗高清不卡| 国产一区二区三区综合| 国产主播在线观看| 亚洲欧美日韩精品久久| jizz久久久久久| 亚洲天堂第一区| 91麻豆免费在线观看| 无码视频一区二区三区| 久久精品99久久久香蕉| 中文字幕一区二区三区四区久久 | 伊人情人网综合| 国产成人精品免费网站| 亚洲精品1区2区3区| 在线观看成人黄色| 一区二区三区视频播放| 99爱视频在线| 亚洲视频香蕉人妖| 无码国产精品高潮久久99| 国产va免费精品高清在线观看| 99精品网站| 添女人荫蒂视频| 欧美巨大另类极品videosbest | 日本护士...精品国| 国产综合香蕉五月婷在线| 亚洲网站在线| 色www亚洲国产阿娇yao| 欧美精品一区男女天堂| 色天使综合视频| 成人国产在线看| 国产视频一区在线播放| www.亚洲天堂.com| 国产精品第8页| 在线亚洲观看| 九九视频在线免费观看| 宅男66日本亚洲欧美视频| 超碰精品在线|