1. 程式人生 > >UNITY3d在移動裝置上的一些優化實戰(一)-概述

UNITY3d在移動裝置上的一些優化實戰(一)-概述

專案進入了中期之後,就需要對程式在移動裝置上的表現做分析評估和針對性的優化了,首先前期做優化,很多瓶頸沒表現出來,能做的東西不多,而且很多指標會憑預想,如果太后期做優化又會太晚,到時發現一些問題改起來返工量就有太大。前一陣子花了大量時間從 cpu gpu 記憶體 啟動時間 到發熱量對專案做了一翻大規模的體檢和優化,效果還是顯著的,在這裡做個筆記,以後開發專案時可以作為經驗和提前關注

      1.專案情況:筆者所在專案是一個非常重度的手遊,甚至開始就是瞄著端遊做的,3D世界,2.5D視角,RPG,即使戰鬥,美術品質要求極高(模型 貼圖精度高 ,超過目前市場同類產品)。對於目前大多數移動裝置來看,挑戰不小,對手機的各種硬體都是挑戰。、

     2.目標機型:偏中高階,儘量相容低端,android至少sumsung S3能流暢,ios至少iphone4s流暢。

     3.效能指標:記憶體佔用250M以下(這樣大量512的機器不會掛掉),初始包100m之內(太多運營不幹,太少實在是裝不下。。)

用於分析和測試效能的一些利器:

 1.首先是unity在編輯器下的statics視窗:提供了dc和頂點數這兩個重要指標的檢視。缺點在裝置看不到,但是對於dc數和頂點數來說,裝置和編輯器差不多,用它可以大體看出渲染的壓力。

 2.unity自帶的profiler:可以連線裝置看到裝置上cpu gpu mem的資訊,使用的時候需要勾選development模式。有點是cpu的佔用在指令碼的層面看的非常仔細,哪個函式佔用了太多時間一眼就能看出,基本是分析指令碼效率的最佳工具,但是gpu大部分裝置不支援看不到,顯示的mem資訊不太準確,基本上偏離實際佔用的記憶體

3.unity的internal profiler:在playersetting上可以勾選這個選項,勾選後,連線裝置,在android的adb或者mac的xcode裡會每隔幾秒打印出很多關鍵指標,這個其實非常有用,不過這個功能直到很後期才發現,詳細文件見http://docs.unity3d.com/Manual/iphone-InternalProfiler.html

adb shell dumpsys cpuinfo appname 檢視實時的cpu佔用,注意這裡的cpu可能過百,這是因為多核的原因

adb shell dumpsys gpuinfo appname 檢視實時的gpu情況

5.android  的monitor

安裝adt後,在sdk\tools\monitor.bat下面有個monitor,是我認為android看效能最好的工具之一,因為它是圖形化的,而且基本集成了adb的功能,從記憶體到cpu到gpu,還有很有用的網路流量使用情況,它的cpu佔用是c++層面的統計,看不到指令碼,這需要突破那個profilor結合。

6.android上的mongkey測試:它可以模擬隨機的使用者輸入,用來驗證你的程式的強壯性吧

adb shell monkey -p -v packname 1000
隨機模擬1000條使用者事件

7.ios:ios上的工具則顯得更加專業更加統一一些,ios就用xcode自帶的instruments了

看來這麼多工具,其實很多是要配合使用的,做u3d開發,其實不只是學會U3D的事情,要讓U3D在手機上執行的好,還需要對各個平臺有較深的瞭解。

 利用這些工具法線了一些瓶頸,同時也採取了各種策略來提高效能,反正目標就是cpu佔用降低,記憶體佔用減少,啟動快,發熱小,幀率高,GPU佔用少,發現的一些問題和做出的具體的一些努力列舉如下:

1.使用assetbundle,實現資源分離和共享,將記憶體控制到200m之內,同時也可以實現資源的線上更新

2.頂點數對渲染無論是cpu還是gpu都是壓力最大的貢獻者,降低頂點數到8萬以下,fps穩定到了30幀左右

3.只使用一盞動態光,不是用陰影,不使用光照探頭

粒子系統是cpu上的大頭

4.剪裁粒子系統 5.合併同時出現的粒子系統 6.自己實現輕量級的粒子系統 animator也是一個效率奇差的地方
7.把不需要跟骨骼動畫和動作過渡的地方全部使用animation,控制骨骼數量在30根以下 8.animator出視野不更新 9.刪除無意義的animator 10.animator的初始化很耗時(粒子上能不能儘量不用animator) 11.除主角外都不要跟骨骼運動apply root motion 12.絕對禁止掉那些不帶剛體帶包圍盒的物體(static collider )運動 NUGI的程式碼效率很差,基本上runtime的時候對cpu的貢獻和render不相上下 13每幀遞迴的計算finalalpha改為只有初始化和變動時計算 14去掉法線計算 15不要每幀計算viewsize 和windowsize 16filldrawcall時構建頂點快取使用array.copy 17.程式碼剪裁:使用strip level ,使用.net2.0 subset 18.儘量減少smooth group 19.給美術定一個嚴格的經過科學驗證的美術標準,並在U3D裡面配以相應的檢查工具 後面的文章會對這些點做以更詳細的討論

相關推薦

UNITY3d移動裝置一些優化實戰-概述

專案進入了中期之後,就需要對程式在移動裝置上的表現做分析評估和針對性的優化了,首先前期做優化,很多瓶頸沒表現出來,能做的東西不多,而且很多指標會憑預想,如果太后期做優化又會太晚,到時發現一些問題改起來返工量就有太大。前一陣子花了大量時間從 cpu gpu 記憶體 啟動時間

Wicket實戰概述

rac span 下載 本質 jsf xtend 公式 href tar 今天給大家介紹一個很好的東西。一個被稱作Java平臺上的ASP.NET——Wicket。 什麽是Wicket 什麽是Wicket,假設你用谷歌或其它

linux裝置驅動模型架構分析——概述

概述 LDD3中說:“Linux核心需要一個對系統結構的一般性描述。”這個描述就是linux裝置驅動模型(下面簡稱為LDDM)。LDDM不是獨立存在,其體系如下圖所示: LDDM體系結構 對架構的每一部分本文都會開闢獨立的章節進行描述。暫且拋開這個架構,首先從總體上了

unity在移動裝置優化

http://www.cnblogs.com/123ing/p/4130034.html http://www.cnblogs.com/123ing/p/4130034.html 轉自:UNITY3d在移動裝置上的一些優化實戰(一)-概述 http://blog.csdn.

知識點:Mysql 索引優化實戰3

set ... 存在 over order by select 字節 sele .com 知識點:Mysql 索引原理完全手冊(1) 知識點:Mysql 索引原理完全手冊(2) 知識點:Mysql 索引優化實戰(3) 索引原理知識回顧 索引的性能分析和優化 通過 E

Vue+Koa2移動電商實戰 前端環境搭建

mage 移動電商 src 檢測 等待 -c localhost 接口 簡單的 這是我的第一套實戰系列博客,希望有更多的小夥伴兒能看到,也給自己個動力寫完這個系列的博文,大家共同學習共同進步。 這套博文全面的講解了vue+koa的實戰項目。涉及的技術:vue+Router+

Vue專案實戰優化:已有元件優化系列

一_原有元件效果 其中,核取方塊為一個元件,根據資料庫中的值,進行是否勾選,並且核取方塊只能是禁用的 二_原有元件程式碼 <template> <input v-if="gearboxtype === 'A'" checked type="

Hadoop實戰 在VMWare搭建centos虛擬機器叢集

一、VMware的下載和安裝 下載VMware 安裝VMware:一路Next即可 二、centos的下載和安裝 下載centos 安裝三個centos 64位虛擬機器(master slave1 slave2)   在搭建Hadoop時,master將會作為namenod

Spring 事務配置實戰:過濾無需事務處理的查詢之類操作

log pla ssi pan spl tail gif aop img <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes

RabbitMq 實戰

rabbitmq spring boot (消費者處理消息)RabbitMq消息消費者服務 開發工具Idea和Spring boot來開發的。消息消費目前只是一個簡單的Demo,後續會處理成更智能一些。首先配置文件類,RabbitMqConfig,裏面配置一些用戶名和密碼嗨喲隊列信息。package com.

Linux系統集群架構線上項目配置實戰

linux 項目 實戰 Linux系統集群架構線上項目配置實戰(一)本文出自 “民工哥博客” 博客,請務必保留此出處http://mingongge.blog.51cto.com/2429897/1971210Linux系統集群架構線上項目配置實戰(一)

機器學習實戰—— 用線性回歸預測波士頓房價

-1 png 機器學習 mage 回歸 線性回歸 blog 分享 機器 機器學習實戰(一)—— 用線性回歸預測波士頓房價

全棧性能測試修煉寶典--Jmeter實戰

div 測試用例 ceo 上下文切換 知識 能力 熱點 mongo rac 性能測試方向職業發展 1、軟件測試發展路線   我們可以暫且把軟件測試職業路線分為3個方向,分別是業務路線、技術路線、管理路線;4個象限,分別為執行層、中層、中高層過渡、高層。   (1)業務路線

mmall 項目實戰項目初始化

ant log 初始 post gpo using base inno ole 1.創建 數據庫 及 表 數據腳本: /* Navicat Premium Data Transfer Source Server : 182.92.82.1

Docker從入門到實戰

roc serve net lin 軟件 系統調用 生命 etc before 一步一步走,寫小白都能看懂的文章,將持續更新中,敬請期待! Docker從入門到實戰(一) 一:容器技術與Docker概念 1 什麽是容器 容器技術並不是一個全新的概念,它又稱為容器虛擬化。虛擬

【筆記篇】斜率優化dp HNOI2008玩具裝箱

公式 現在 getchar() 就是 clu cst 差距 直接 source 斜率優化dp 本來想直接肝這玩意的結果還是被忽悠著做了兩道數論現在整天渾渾噩噩無心學習甚至都不是太想頹廢是不是藥丸的表現各位要知道我就是故意要打刪除線並不是因為排版錯亂反正就是一個del標簽嘛

MySQL數據庫從入門到實戰

DBA體系 mysql 非關系型數據庫 SQL優化 第一部分:了解DBA體系一、初級DBA應該掌握哪些技能?(運維人員必會知識)1.MySQL安裝部署2.基本參數配置3.備份策略設計與實現 二、中級DBA應該掌握哪些技能?1.故障處理能力(備份或者其他手段)2.MySQL監控能力3.基本優化能

自動化運維工具Ansible實戰簡介和部署

Ansible 自動化運維 一、Ansible的介紹 Ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點。實現了批量系統配置、批量程序部署、批量運行命令等功能。Ansible是基於模塊工作的,本身沒

Android項目實戰: SpannableString與SpannableStringBuilder

append() 同時 uil 註意 1.5 查看 strong 尊重 bject 原文:Android項目實戰(一): SpannableString與SpannableStringBuilder前言: 曾經在一些APP中的一些類似“幫助”&ld

CentOS7安裝配置GitLab

gitlab GitLab CentOS7 GitLab 雖然GitHub已經很好了,但是我們必須聯上公網才可以使用並且如果不付費的話,你的代碼在網上就是公開的!但是在企業環境中,我們公司的代碼不希望被公開並且也不想付費給GitHub,這時怎麽辦呢?我們可以用GitLab搭建企業自己的Gi