(unty3d游戏开发之优化.docVIP

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(unty3d游戏开发之优化

首先介紹下draw call(這個東西越少你的遊戲跑的越快): 在遊戲中每一個被展示的獨立的部分都被放在了一個特別的包中,我們稱之為“描繪指令”(draw call),然後這個包傳遞到3D部分在螢幕上呈現出來。這就和你希望你的親友收到準備好的聖誕禮物需要包裝好然後穿過城市準時放在他應該出現的地方一樣沒什麼不同。你的CPU來完成包裝和傳遞他們的活,同時會消耗很多的頻寬,所以最終分配好這些關鍵性資源很重要。目前,真正可怕的事情是從描繪指令消耗遠景開始,每一個獨立的飛濺到地板上的血跡和一個角色或者一具死屍消耗的位元組是一樣的多的:他們都消耗同樣的描繪指令。除此之外,沒有什麼更多的差別。 那麼如何降低 draw call 呢??那麼我們就用到Culling(剔除)技術。如果不應用這個技術,電腦是不管3721把場景裡所有的東西都送去渲染的。看得見的也渲染,看不見得照樣也送去渲染。很傻是吧,那咋辦呢。得告訴電腦,那個你 看得見的渲染,看不見的就算了。於是就有了 1.視錐體剔除(Frustum Culling)這個unity系統自帶了好像,就不用操心了。 2.遮擋剔除(Occlusion Culling) Unity 3專業版內置了一個強大的 Occlusion Culling 外掛程式 Umbra免費的 遮擋剔除(Occlusion Culling)?? 遮擋剔除是一種什麼樣的特性呢, 當一個物體被其他物體遮擋住而不在攝像機的可視範圍內時不對其進行渲染。. 遮擋剔除在3D圖形計算中並不是自動進行的。因為在絕大多數情況下離 camera 最遠的物體首先被渲染,靠近攝像機的物體後渲染並覆蓋先前渲染的物體(這被稱為重複渲染,無效渲染overdraw). 遮擋剔除不同於視錐體剔除. 視錐體剔除只是不渲染攝像機視角範圍外的物體而對於被其他物體遮擋但依然在視角範圍內的物體則不包括在內. 注意當你使用遮擋剔除時你依然受益於視錐體剔除(Frustum Culling). 左邊的場景使用了遮擋剔除. 右邊的場景未使用遮擋剔除. 遮擋剔除的運行將通過在場景中使用一個虛擬的攝像機來創建一個物體潛在可視性狀態(set)的層級. 這些資料可以讓每個執行時間內的攝像機來確定什麼能看見什麼看不見。通過這些資料, Unity 將確定只把可以看見的物體送去渲染. 這將降低 draw calls 的數量並提供遊戲的運行效率. occlusion culling的資料由單元(cells)組成. 每個單元是整個場景範圍數值的一部分. 更多特定的單元來自一個二叉樹( binary tree). Occlusion Culling使用兩個叉, 一個給 View Cells (靜態物體) 另一個給 Target Cells (移動物體). View Cells map給出了一個定義了靜態可視物體的索引清單 (精確剔除後的靜態物體). 非常重要的一點是在創建你的物體時要隨時注意,因為你需要在物體的尺寸和單元的尺寸間取得一個好的平衡. 理想情況下, you shouldnt have cells that are too small in comparison with your objects but equally you shouldnt have objects that cover many cells.有時你可以通過將大的物體拆成幾個部分來改進遮擋剔除效果. 無論如何你仍然能夠將小的物體合併為一體來降低draw calls, 在它們都屬於一些小的組件的時候, occlusion culling 將不起作用.確定元件中那個是可視的元件的選集和可視資訊被認為是 PVS (潛在可視狀態Potentially Visible Set). Occlusion Culling設置 為了使用遮擋剔除 需要進行相關的手動設置.首先 你關卡中的幾何體必須被分割成明顯的不同尺寸的塊. 這也有助於佈置關卡中小塊的容易定義的區域 被其他大物體遮擋(例如牆,建築物) 這意味著每個單獨的mesh被確定是否渲染取決於 occlusion 資料. 所以如果你有一個物體包含了房間裡的所有傢俱那麼所有的傢俱要麼全渲染,要麼全不渲染. 是否渲染是基於元件而不是基於每個單獨物體自身的。 在檢視面板(Inspector) 你需要標識(tag) 所有需要應用遮擋剔除的場景物體。最快的方法是是將你需要標示為 Static的物體作為一個 Empty GameObject 的子物體並設置這個Empty GameObject 為Static,當option出現的時候選擇affect children. 當子物體被tagged as Static你可以取消子物體和Empty GameObject的父子關係. 檢視面板中的

文档评论(0)

1789811832 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档