查看: 3868|回复: 5
打印 上一主题 下一主题

Unity关于优化的概念

[复制链接]

2508

主题

2

听众

3万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
32806
精华
12

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2012-8-7 10:35:31 |只看该作者 |倒序浏览
圖形顯示的優化

簡單來說就是「結合!結合!結合!」(combine! combine! combine!)

Mesh 儘可能結合,Material 和 Texture 儘可能共用。

一個 Mesh 建議使用的面數在 1500~4000 之間。

一個 Mesh 建議只用一個 Material。

注意:兩個Mesh結合成一個Mesh,但是卻使用兩個 Material,並不會提高效能。

如果要提高效能必須把這兩個Mesh的Material也合併成一個。

換句話說,一個Mesh使用多個 Material 和一個 Material 使用多個 render,其實耗能是差不多的。

所以,儘可能的讓物件共用相同的 Texture 才是提昇效能的根本之道。

Pixel Light

Pixel Light 非常耗能,如果想要在舊電腦上也跑得很順,

可以在 Edit->Render Settings 中把 Pixel Light Count 設成 0。(完全不使用 Pixel Light)

你也可以根據每個 Light 的重要度,分別設定。

重要度高的 Render Mode 設成 Force Pixel 。

不重要的設成 Force Vertex。

Layer 管理

地上的小石頭或瓦礫之類的小東西產生的影子比較不明顯,

我們可以把這些東西設在同一個圖層。

並利用script中 Camera.layerCullDistances 功能 變更參數控制顯示的距離。

function Start ()

{

var distances = new float[32];

// Set up layer 10 to cull at 15 meters distance.

// All other layers use the far clip plane distance.

distances[10] = 15;

camera.layerCullDistances = distances;

}

Shadow

影子的計算完全依靠 GPU。

Soft shadow 比 hard shadow 多花費GPU效能。但是兩者使用的 CPU 與 記憶體是相同的。

Anti-aliasing 也是完全靠 GPU計算。

Anisotropic Textures 也是完全靠 GPU計算,建議在 天花板或是地板的 Texture 上使用。

關於實時陰影的優化 ,請參考 叫你自由 前輩所寫的這一帖:

http://bbs.vrsh.cn/thread-2263-1-2.html

■Texture 2D

Unity 讀取 psD檔之後,會自動將圖檔平面化縮壓,並不會讓製作的遊戲變大。

Texture 的長寬的大小最好由下列數字中挑選:2、4、8、16、32、64、128、256、512、1024、2048。

Texutre 不一定要是正方形的,長方形也可以。

如果 Texture 的大小不是由上方數字所組成的,那麼圖形將會稍微多耗用一些的顯卡的記憶體,讀取時也會稍微變慢。

所以特殊的 Texture 大小建議只使用在 GUI 上。

Mip Maps

使用 Mip Maps 大約會多占用 33%的記憶體,但是可以大幅提昇效能。

所有的 Texture 都建議使用 Mip Maps,唯一不需要使用的是 GUI的 Texture。

■Shader 效能 (Normal、Transparent、Transparent Cutout、Self-Illuminated、Reflective、Lightmap)

由上→下,左→右,愈來愈耗能。

Vertex_Lit -> Decal

-> Diffuse Fast -> Diffuse ->Diffuse Detail

->Bumped ->Specular ->Bumped Specular

-> Parallax Bumped -> Parallax Bumped Specular

附件中有比較清楚的圖示。
■角色(charcater)最佳化

一、每個Mesh只使用一個 Skinned Mesh Renderer。

二、不要使用太多的Material。

唯一需要使用不同的 Material 的原因,應該是你想要使用不同的 shader。

一個角色使用 2~3 Material 應該就能充份表現效果 。

如果角色可能會換武器,人物和武器的Material應該要分開,

三、減少 bone 的數量

角色 bone的數量限制通常在 15~60 之間,通常 30 個bone 已經可以做到很好的效果。

強烈建議一個角色的 bone 數量在 30 個以內。

四、polygon 面數

面數建議在 500~6000之間。

HL2 的面數是 2500~5000、次世代遊戲角色的面數在 5000~7000。

五、將IK 與 FK 嚴格區分

因為 Unity 不需要 IK 的資料,這麼做可以讓你很方便地刪除 IK 資料。

六、使用可重覆利用的 Rig

這樣可以讓不同的角色使用相同的動畫。

七、正確命名每一個bone

正確命名每一個bone之後,使用Ragdoll功能將會事半功倍。否則將骨架設定正確將花費你許多時間。

■腳本相關

參考論壇上前輩的心得,摘錄如下:

1.biobio前輩的 新人的學習作業 FindObjectsOfType,FindGameObjectWithTag,GameObject.Find,这类函数很好用,但是开销很大,要想优化性能最好使用static ArrayList,存储同一个类型的对象,使用的时候查这个list表就好。
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

955

主题

164

听众

7万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
59338
精华
28

活跃会员 荣誉管理 突出贡献 优秀版主 论坛元老

沙发
发表于 2012-8-24 00:21:08 |只看该作者
这应该是来自台湾的技术论坛内容,很不错的分享。
回复

使用道具 举报

498

主题

1

听众

1万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
13519
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2012-8-24 19:16:49 |只看该作者
  好东西啊
回复

使用道具 举报

2206

主题

2

听众

3万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
32449
精华
23

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2012-8-25 11:03:01 |只看该作者
回复

使用道具 举报

Zack    

459

主题

1

听众

5478

积分

高级设计师

Rank: 6Rank: 6

纳金币
5531
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

5#
发表于 2012-11-25 20:47:00 |只看该作者
学习了。谢谢!
回复

使用道具 举报

may    

8830

主题

81

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
52344
精华
343

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

6#
发表于 2012-11-27 02:52:40 |只看该作者
lZ的回复很不错,支持!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-7-22 01:03 , Processed in 0.083316 second(s), 28 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部