如何更深入地掌握研發專案的物理效能?

2021-08-17 16:53:25 字數 2656 閱讀 7831

uwa 問答社群:answer.uwa4d.com

uwa qq群:465082844(僅限技術交流)

q1:如何提高unity物理引擎physx的效能?我在場景中加入100個具有物理剛體的小人,並充分碰撞,發現低端機的幀率只能跑到10幀以下。

uwa:如果需要充分進行物理計算,這些擁擠在一起的小人很可能會造成大量的物理碰撞,進而造成很高的物理耗時。

在優化之前,題主需要先了解一些基礎物理數值推薦,並不是所有裝置都能流暢跑起100個自由製作的蒙皮模型的。所以,建議先看這篇文章:

另外,題主還需要看一下真機上的具體耗時瓶頸是否真正耗時在物理上,100個角色,如果mesh量很大,渲染耗時也是不可忽視的,所以建議通過unity profiler來先確定一下真機上效能瓶頸。

最後,是否每個小人都需要精確的物理計算,是否可以通過一些射線求交、範圍判斷等價效比高的判斷方法來代替純物理碰撞?這需要題主從設計的角度上來進行權衡。

你並沒有什麼辦法直接呼叫physx的api,所以所謂優化物理引擎的效能,倒不如說優化相關元件的效能。首先優先使用charactercontroller而非rigidbody。然後盡量避免使用meshcollider,用boxcollider、spherecollider和capsulecollider代替,如果不可避免,那麼鉤上convex。當然,最好的優化就是不要用物理碰撞。射線能解決很多問題,但是射線也不是免費的,它的消耗跟場景裡的面數正相關,當然設定射線的maxdistance和layermask能節省掉不必要的消耗。最好就是用簡單的物理模型來描述問題,自己寫**實現。

感謝凱奧斯提供了回答

q2:有什麼方法可以禁止unity自動編譯指令碼呢?

uwa:可以把preferences > general > auto refresh的勾去掉,不過如果這樣,如果資源在外部被修改,也不會自動重新匯入了,會有些影響。

q3:我使用texture2darray的時候發現沒有mipmap效果,想問下怎麼讓mipmap生效?原始的紋理都是開啟mipmap的。

uwa:在建立texture2darray時需要注意倒數第二個引數,設為true就表示開啟mipmap,參考文件:

q4:現在有一張外部生成的texture可以作為maintex渲染,但希望獲取它的內容儲存下來,但是getpixels是texture2d的函式,所以想問問這樣的texture的內容該如何獲取?

uwa:可以先通過graphics.blit把內容畫到render texture裡面,然後通過readpixels從rendertexture生成一張texture2d,假設sourcetex是原始的texture,tex2d是最終生成的texture2d,則**如下:

rendertexture rendertexture = new rendertexture(sourcetex.width, sourcetex.height, 32);

graphics.blit(sourcetex, rendertexture);

texture2d tex2d = new texture2d(sourcetex.width, sourcetex.height, textureformat.rgba32, false);

rendertexture oldrt = rendertexture.active;

rendertexture.active = rendertexture;

tex2d.readpixels(new rect(0, 0, rendertexture.width, rendertexture.height), 0, 0);

rendertexture.active = oldrt;

q5:我正在嘗試自定義terrain的shader,發現內建shader的末尾有這樣兩行,想問問其中的「dependency」是做什麼用的,後面指定的shader起什麼作用?dependency 「addpassshader」 = 「hidden/terrainengine/splatmap/diffuse-addpass」

dependency 「basemapshader」 = 「diffuse」

uwa:unity的文件中應該是沒有描述過這個的作用, 不過在這篇部落格裡分析的比較清楚,

這是當terrain使用的紋理超過4張時,unity會用其中的addpassshader來進行第二次渲染,並且blend上去。而basemapshader是用在低端顯示卡上的,只用一張紋理來顯示的shader。

近年來,隨著unity官方對il2cpp的大力支援和改進,越來越多的開發者在立項初期在mono和il2cpp之間猶豫徘徊。到底是unity ilcpp編譯好還是mono的編譯更好?il2cpp的效能是否真有顯著的變化?用過的朋友不妨來交流下你的心得!

更深入地了解 Linux 許可權

在 linux 上檢視檔案許可權時,有時你會看到的不僅僅是普通的 r w x 和 如何更清晰地了解這些字元試圖告訴你什麼以及這些許可權如何工作?在 linux 上檢視檔案許可權時,有時你會看到的不僅僅是普通的r w x和 除了在所有者 組和其他中看到rwx之外,你可能會看到s或者t,如下例所示 dr...

在機器學習中如何快速地掌握數學知識?

現如今,只要是和計算機有關的技術,就離不開數學知識,尤其是在機器學習中,數學工具是乙個十分重要的工具,也正是因為擁有了這些數學知識,機器學習才能夠幫助我們解決很多的問題,才能夠為人工智慧提供貢獻。那麼在機器學習中如何快速地掌握數學知識呢?下面我們就給大家詳細介紹一下這些問題,希望這篇文章能夠更好的幫...

研發專案如何協調質量與進度?

研發質量是產品滿足要求的程度。研發質量可以分為面向外部顧客質量要求,包括使用者要求和標準法規的要求 研發質量還應該包括面向內部顧客的要求,包括可製造性 可裝配性 可測試性 可維修性要求。為保證研發質量要求,首先就要明確質量要求 包括外部和內部顧客的 是什麼,其次對開發出來的產品各個環節要進行評審 驗...