3 分鐘就能掌握的影片 / 音訊最佳化技巧!
節前,我們已經將【效能黑榜】上的Top10規則均做了詳細的解讀(可戳文末相關連結回顧)。無論是大家在開發時的疏忽,還是相關知識點的缺失,這些問題的積累最終都會反映到專案的效能表現上。為此,我們將這些規則曝光出來,並且以一個個知識點的形式逐一解讀。
今天,我們來繼續剖析【UWA本地資源檢測】中和音訊視訊相關的規則。我們將力圖以淺顯易懂的表達,讓職場萌新或優化萌新深入理解。
1、未使用Streaming載入的長音訊
這裡我們先了解一下Unity裡音訊載入的三種方式:
Decompress On Load
音訊檔案以壓縮形式儲存在磁碟上,載入時直接解壓放到記憶體中。這種方式在記憶體佔用上沒有優勢,但在後續播放時對CPU的計算需求是最小的。一般來講這種方式更適用於短小的音訊。
Compressed In Memory
音訊檔案以壓縮形式存放在記憶體裡,使用時再解壓。這意味著會有更多的CPU開銷,但是在載入速度和記憶體佔用上具有優勢。這種情況適用於大型音訊檔案。
Streaming
音訊檔案存放在磁碟中,載入時迴圈以下操作:“從磁碟讀取一部分,解壓到記憶體中,播放,解除安裝”。這種方式在記憶體佔用上相較而言是最小的,但在CPU的消耗上是最不具優勢的。
而在音訊的實際運用中,背景音樂的使用是普遍存在的。幾乎所有遊戲都會使用BGM以增強對遊戲氛圍和環境的渲染。結合以上關於音訊載入方式的描述可以看出,採用Streaming方式去載入背景音樂,可以有效減少記憶體佔用和載入時間,從而降低Audio資源對專案總體記憶體和載入時間的影響。
因此,UWA使用這條規則,找出非Streaming載入的音訊,再由開發團隊依據這些音訊的具體使用場合,去決定最適合的載入方式。
2、未使用PCM格式的音訊
這條規則面向的是音訊壓縮時的編碼方式。Unity支援的音訊壓縮方式有如下三種:
PCM
全稱是Pulse-Code Modulation。屬於脈衝調製編碼,它將模擬訊號轉換為數字訊號,實質上沒有經過編碼,沒有進行壓縮,所以在音質上是屬於完全無損的原始音訊。而且相較於原生的模擬訊號,它的抗干擾能力更強,保真效果更好。
Vorbis
應該叫做OGG Vorbis。類似mp3格式,但這是一種免費開發的非商業壓縮格式。屬於有失真壓縮。
ADPCM
Adaptive Differential Pulse Code Modulation,自適應差分脈衝編碼調製。是一種基於PCM的優化壓縮方式,但也屬於有失真壓縮。
未使用 PCM 格式的音訊可能存在音質問題,所以我們將這些音訊篩選出來,以供開發團隊進行進一步的檢查,去考慮音訊格式和原音訊的質量是否符合預期的使用需求。
3、雙聲道的音訊
在匯入音訊檔案時,我們可以發現,有些音訊檔案是多聲道的(我們常見的是左右雙聲道),如下圖:
在Android裝置上,雙聲道音訊對聲音的效果提升不大,但是會佔用雙倍記憶體。所以建議使用單聲道的音訊。
而對於這些原本就是雙聲道的音訊,可以考慮開啟Force To Mono:
勾選Force To Mono的情況下,Unity會將音訊合併成單聲道,從而節約記憶體。
所以在本條規則篩選出這些雙聲道音訊後,開發團隊可以結合音訊的實際表現效果去決定是否要對音訊進行設定上的修改。
4、尺寸過大的視訊資源
大尺寸的視訊資源在表現效果上會更好,但是如果超過了目標裝置群體的效能範圍,那不僅提升效果有限,而且還會導致記憶體上的額外佔用。
根據UWA對大資料的分析,在當前裝置的效能範圍內,512的視訊尺寸能夠保證在大部分的裝置上達到所需的表現效果,同時不會對裝置效能造成額外的壓力。
需要說明的是,每一項檢測規則的閾值都可以由開發團隊依據自身專案的實際需求去設定合適的閾值範圍,這也是本地資源檢測的一大特點。同時,也歡迎大家來使用UWA推出的本地資源檢測服務,可幫助大家儘早對專案建立科學的美術規範。
萬行程式碼屹立不倒,全靠基礎掌握得好!
效能黑榜相關閱讀
《那些年給效能埋過的坑,你跳了嗎?》
《那些年給效能埋過的坑,你跳了嗎?(第二彈)》
《掌握了這些規則,你已經戰勝了80%的對手!》
相關文章
- 5分鐘掌握JavaScript小技巧JavaScript
- 10分鐘掌握ConcurrentHashMap 3分鐘清楚和HashMap、Hashtable的區別HashMap
- 只需3 分鐘,就能建立 一個SpreadJS 的 Vue 專案JSVue
- 只需3分鐘,就能輕鬆建立 一個SpreadJS的React專案JSReact
- 10分鐘掌握資料型別、索引、查詢的MySQL優化技巧資料型別索引MySql優化
- 五分鐘掌握 JavaScript 中的 IoCJavaScript
- # 3分鐘短文:Laravel路由註冊,你必須掌握的“動詞”!Laravel路由
- 10分鐘掌握Python快取Python快取
- 短影片一鍵分發平臺,3分鐘分發全平臺
- 5分鐘上手Python爬蟲:從乾飯開始,輕鬆掌握技巧Python爬蟲
- 3分鐘掌握Quartz.net分散式定時任務的姿勢quartz分散式
- 3分鐘帶你掌握Spring Boot中的定時排程服務Spring Boot
- 30分鐘讓你掌握Git的黑魔法Git
- 百億資料量下,掌握這些Redis技巧你就能Hold全場Redis
- 1分鐘掌握 Python 函式引數Python函式
- 三十分鐘掌握Webpack效能優化Web優化
- 5 分鐘掌握 JavaScript 實用竅門JavaScript
- 5分鐘掌握布隆過濾器過濾器
- Python的5種傳參姿勢,兩分鐘就能瞭解Python
- GPTs 初體驗 - 1 分鐘就能建立一個自己的 ChatGPT?ChatGPT
- 什麼?5分鐘就能做出一個自己的部落格
- 3分鐘短文:無私分享!Laravel模型使用2個小技巧Laravel模型
- 如何用ffmpeg根據音mp3音訊生成頻譜影片?音訊
- 5分鐘即可掌握的前端高效利器:JavaScript 策略模式前端JavaScript模式
- 碼教授告訴你SEM最佳化師需要掌握的技巧
- 全程兩分鐘,線上就能設計的推廣活動模板!
- 快影app怎麼提取音訊mp3?快影APP提取影片音訊的圖文教程APP音訊
- 5分鐘掌握 webpack 多頁應用配置Web
- 5分鐘掌握var,let和const異同
- 1分鐘掌握Arduino出入輸出口(I/O)UI
- 【譯】三分鐘掌握 React 高階元件React元件
- 5分鐘掌握Grid佈局【多圖示例】
- 一分鐘搞明白!快速掌握 Go WebAssemblyGoWeb
- 掌握Mainframe系列之 10分鐘學習COBOLAI
- 理解音訊焦點 (第1/3部分):常見的音訊焦點用例音訊
- 雲音樂影片搜尋最佳化之旅
- Flutter(十) 音訊+影片播放Flutter音訊
- 兩分鐘帶你快速掌握Flutter的路由與導航Flutter路由