優(yōu)化Unity中的VR
簡(jiǎn)介
為確保用戶有極棒,無惡心的虛擬現(xiàn)實(shí)體驗(yàn),而達(dá)到推薦幀率,優(yōu)化是很關(guān)鍵的一個(gè)部分.因?yàn)楝F(xiàn)在VR硬件剛剛起步,所以要盡可能多的在硬件設(shè)備上進(jìn)行測(cè)試.
VR相對(duì)于非VR項(xiàng)目的主要不同點(diǎn)就是它要為每只眼睛渲染一次圖像,當(dāng)你了解這一點(diǎn),創(chuàng)建項(xiàng)目時(shí)圍繞它進(jìn)行相關(guān)優(yōu)化將節(jié)省大量的開發(fā)時(shí)間.
手機(jī)上的配置遠(yuǎn)比不上桌面級(jí)電腦硬件,所以在移動(dòng)設(shè)備上的VR做優(yōu)化是至關(guān)重要的.
當(dāng)然不要忘記要盡可能的優(yōu)化程序代碼,查看有關(guān)代碼優(yōu)化更詳細(xì)的指導(dǎo):”docs.unity3d.com/Manual/MobileOptimizationPracticalScriptingOptimizations.html”.
OCULUS 資源
在Oculus網(wǎng)站上有大量的資源文檔,非常值得你去看:
https://developer.oculus.com/documentation/
http://static.oculus.com/sdk-downloads/documents/Oculus_Best_Practices_Guide.pdf
https://developer.oculus.com/blog/squeezing-performance-out-of-your-unity-gear-vr-game/
https://developer.oculus.com/blog/squeezing-performance-out-of-your-unity-gear-vr-game-continued/
UNITY 編輯器優(yōu)化工具
在Unity中有一些很有用的工具和技術(shù),有助于您優(yōu)化VR游戲內(nèi)容.
Profiler
Profiler可以幫你了解每一幀渲染的時(shí)間,并且將其拆分為CPU,渲染,內(nèi)存,音頻,物理和網(wǎng)格.通過使用Profiler檢查性能消耗從而針對(duì)性的優(yōu)化.更多關(guān)于Profiler的使用請(qǐng)參閱這些鏈接:
http://docs.unity3d.com/Manual/Profiler.html
https://unity3d.com/learn/tutorials/modules/beginner/live-training-archive/profiler-overview
https://unity3d.com/learn/tutorials/modules/intermediate/editor/intro-to-profiler
Frame 調(diào)試器
Frame調(diào)試器步進(jìn)式的查看每幀Draw Call,看每幀是如何構(gòu)造出眼前的場(chǎng)景的,確定哪些可以優(yōu)化,哪些是不需要的東西,這將大大有助于減少Draw Call.
更多Frame 調(diào)試器的信息請(qǐng)參閱下列鏈接:
http://docs.unity3d.com/Manual/FrameDebugger.html
https://unity3d.com/learn/tutorials/modules/intermediate/graphics/frame-debugger
VR優(yōu)化原理
雖然優(yōu)化是個(gè)巨大的門類,每個(gè)平臺(tái),每個(gè)需求都會(huì)有不同的優(yōu)化方法.
現(xiàn)有的優(yōu)化技術(shù)可以很好的用于VR項(xiàng)目開發(fā)優(yōu)化
Geometry
移除VR中任何看不到的三角形,比如如果用戶看不到后背,納悶我們完全可以把角色模型后背的三角面和貼圖刪除優(yōu)化掉.另外根據(jù)目標(biāo)平臺(tái),試著添加一些細(xì)節(jié)紋理,比如視差貼圖等,雖然這會(huì)影響到性能,但是也許它非常適合在特定的目標(biāo)平臺(tái).
Overdraw
Overdraw視圖讓你可以了解什么對(duì)象被繪制在了另一個(gè)對(duì)象上面,這種無謂的渲染會(huì)浪費(fèi)GPU渲染時(shí)間,通過場(chǎng)景視圖中(docs.unity3d.com/Manual/ViewModes.html)開啟Overdraw模式查看場(chǎng)景中的覆蓋情況.
普通視圖模式:
Overdraw 模式:
Level of Detail
Level Of Detail (LOD) 可以讓你根據(jù)模型物體與相機(jī)的距離動(dòng)態(tài)的切換物體三角形面數(shù),只要你的模型距離相機(jī)有一定距離,LOD會(huì)顯示一個(gè)低面數(shù)的模型來減少對(duì)硬件的負(fù)載,提升渲染性能.
用Simplygon(https://www.assetstore.unity3d.com/en/#!/content/10144) 插件可以自動(dòng)化處理模型的LOD.
Draw Call batching
盡可能的將Batch Draw Call,使用
Static Batching 和 Dynamic Batching會(huì)大大提高性能.詳見Unity手冊(cè)
Draw Call Batching(docs.unity3d.com/Manual/DrawCallBatching.html).
Lightmapping
減少動(dòng)態(tài)光照使用,增加烘焙照明,避免實(shí)時(shí)光影,詳見
avoid realtime shadows(https://twitter.com/ID_AA_Carmack/status/592385473894461441)和??Lighting and Rendering(unity3d.com/es/learn/tutorials/modules/beginner/graphics/lighting-and-rendering) .
Light Probes
Light probes (docs.unity3d.com/Manual/LightProbes.html) 可以讓烘焙光照的場(chǎng)景中動(dòng)態(tài)對(duì)象的動(dòng)態(tài)光照實(shí)現(xiàn)出來,這個(gè)運(yùn)算很快,但是經(jīng)常會(huì)有很大視覺效果提升.
Reflection Probes
Reflection probes (docs.unity3d.com/Manual/class-ReflectionProbe.html) 會(huì)根據(jù)場(chǎng)景位置將環(huán)境貼圖存儲(chǔ)于Cubemaps中,來增加環(huán)境反射貼圖的真實(shí)性,但是實(shí)時(shí)反射在VR中會(huì)很慢.
Occlusion Culling
Occlusion Culling (docs.unity3d.com/Manual/OcclusionCulling.html)能禁止對(duì)看不到的場(chǎng)景渲染,例如一扇門關(guān)閉時(shí),我們不想讓門那邊的另外房間渲染,就可以使用它.使用它可以顯著提升性能.
沒有進(jìn)行遮擋裁切的示例:
使用了遮擋裁切的示例:
Anti-Aliasing
Anti-Aliasing 抗鋸齒在VR中是很有用的,因?yàn)樗兄谄交瑘D像,減少鋸齒狀邊緣.如果你是用了 Forward Rendering, 你可以在畫質(zhì)設(shè)置中起啟用MSAA(docs.unity3d.com/Manual/class-QualitySettings.html),你也應(yīng)該在Gear VR中啟用它來提升效果.
在Deferred Rendering時(shí),你可以用圖像腳本(docs.unity3d.com/420/Documentation/Components/script-AntialiasingAsPostEffect.html)或看論壇上啟用SMAA的例子:”https://github.com/Chman/SMAA-Unity”.
Textures
一般情況下,可以用??Texture Atlasing (https://en.wikipedia.org/wiki/Texture_atlas)把場(chǎng)景中的貼圖整合起來以盡可能的減少材質(zhì)球數(shù)量.
我們也可以用MeshBaker (https://www.assetstore.unity3d.com/en/#!/content/5017)簡(jiǎn)化加快這一優(yōu)化過程.Meshbaker可以用來烘焙紋理,網(wǎng)格,材質(zhì)來優(yōu)化游戲性能.
詳見下面鏈接:
用MeshBaker的視頻教程(https://www.youtube.com/watch?v=9vZ8SfXOlpI)
Oculus渲染文檔
https://developer.oculus.com/doc ... s/bp_app_rendering/)
Shaders
盡量使用Basic著色器,在Gear VR中,推薦使用”Mobile > Unlit (Supports Lightmap) shader”.
Fullscreen Effects
Fullscreen effects(docs.unity3d.com/Manual/comp-ImageEffects.html)是非常消耗資源的,在GearVR上要盡可能避免使用.
Quality Settings
Quality Settings(docs.unity3d.com/Manual/class-QualitySettings.html)決定項(xiàng)目中畫質(zhì)的各個(gè)方面,改變這些屬性可以提高游戲性能,但是會(huì)犧牲視覺效果.
RenderScale
VRSettings.renderScale(docs.unity3d.com/ScriptReference/VR.VRSettings-renderScale.html)渲染比將改變圖像銳度,可以用來提高畫質(zhì)或者降低畫質(zhì)提升幀率.
Asynchronous Loading
如果把游戲拆分成若干個(gè)單獨(dú)的場(chǎng)景,在加載時(shí),為了避免畫面凍結(jié)導(dǎo)致惡心不適感,建議使用異步加載來載入下一個(gè)場(chǎng)景數(shù)據(jù):SceneManager.LoadSceneAsync(docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.LoadSceneAsync.html)
轉(zhuǎn)載自http://blog.1vr.cn
聯(lián)系方式:0755-81699111
課程網(wǎng)址: http://www.vrkuo.com/course/vr.html