熱門
Unity2022.1擴(kuò)展機(jī)器人工具箱優(yōu)化
在Unity2022.1版本中Unity對其機(jī)器人工具箱進(jìn)行了多項(xiàng)優(yōu)化并對諸多功能進(jìn)行了改進(jìn)以提升性能。這些優(yōu)化包括:
使用新的逆動(dòng)力學(xué)力傳感器工具模擬復(fù)雜的環(huán)境的機(jī)器人感知;
通過完全改進(jìn)的Physics Debugger探索動(dòng)力學(xué);
利用插值、批處理查詢等方面的性能改進(jìn)。
下面讓我們來依次了解一下此次Unity都優(yōu)化了一些什么內(nèi)容。
Physics Debugger優(yōu)化
Physics Debugger是理解物理引擎內(nèi)部工作方式以及理解項(xiàng)目中觀察到的特定行為的重要工具。一個(gè)好的Debugger是創(chuàng)作令人信服的且符合物理學(xué)原理項(xiàng)目的關(guān)鍵工具。因此Unity徹底改造了Physics Debugger的用戶界面,并添加了一些有趣的新功能。
為了在同一個(gè)空間中容納更多的信息,在新版本中將屬性選項(xiàng)添加到選項(xiàng)卡中,并在其中添加了許多新的選項(xiàng)。
以前,在Debugger中剛體和關(guān)節(jié)體組件都有可展開的“Info”選項(xiàng)卡,用戶可以將其展開來查看附加信息,如當(dāng)前的線速度。然而,展開“Info”部分后,編輯器的整體性能就會(huì)顯著下降。此外,以前比較不同幾何體的參數(shù)很復(fù)雜,用戶需要打開兩個(gè)檢查器面板。為了解決這一問題,Unity將所有屬性移到了Physics Debugger窗口的“Info”選項(xiàng)卡中,窗口中顯示了每個(gè)選定對象的屬性,用戶現(xiàn)在可以輕松地并排比較它們。
現(xiàn)在,在調(diào)試器中可以在法線和分離距離交匯處旁顯示接觸點(diǎn)。
Physics queries:如Physics.Raycast或Physics.CastSphere通常支持自定義,如自定義角色控制器或車輛控制器。再過去的版本中它們是不可見的,因此調(diào)試起來很棘手。為了解決這個(gè)問題,Unity2022.1版本提供了Physics queries可視化功能。
逆動(dòng)力學(xué)
到目前為止,Unity擁有的工具只支持正向動(dòng)力學(xué),即,給定一組物體和施加在物體上的力,以此計(jì)算物體的移動(dòng)軌跡。這一功能非常實(shí)用,通過此次擴(kuò)展機(jī)器人工具箱。Unity 2022.1中全新增加了對逆向動(dòng)力學(xué)的支持,即,給定一個(gè)物體和軌跡,在模擬時(shí)計(jì)算導(dǎo)致該該物體沿軌跡移動(dòng)所受的力。
具體而言,新功能包括:
獲得由驅(qū)動(dòng)器施加到物體上的當(dāng)前力。能明確顯示出驅(qū)動(dòng)器為達(dá)到目標(biāo)付出了多大力。該力的大小取決于驅(qū)動(dòng)器的剛度和阻尼,以及當(dāng)前的增量目標(biāo)位置和增量目標(biāo)速度;
獲得所需的合力來抵消重力,對抗力和作用在物體上的離心力
獲得 joint force需要達(dá)到期望值的加速度。
Interpolation與Extrapolation
當(dāng)以相對較低的頻率進(jìn)行模擬時(shí)剛體會(huì)用Interpolation與Extrapolation的形式來給人一種平滑運(yùn)動(dòng)的印象。這是通過計(jì)算每次更新的變換姿態(tài)來實(shí)現(xiàn)的。在Interpolation的情況下,最后兩個(gè)模擬姿態(tài)會(huì)被用于計(jì)算該幀新的變換姿態(tài)。在Extrapolation的情況下,將會(huì)使用最后模擬的姿態(tài)和速度。但是,Unity并沒有把這些姿態(tài)反饋給物理引擎。姿態(tài)僅為系統(tǒng)提供圖形和動(dòng)畫。因此,Raycast不會(huì)檢測到Interpolation姿態(tài)的物體。
為了避免在轉(zhuǎn)換模式過程中出現(xiàn)物理學(xué)問題,整個(gè)機(jī)制必須完全遵循物理學(xué)原理。在內(nèi)部法則調(diào)用后,SyncTransforms會(huì)在姿態(tài)寫入之前調(diào)用每個(gè)更新權(quán)限,以清除所有變換更新。這就導(dǎo)致了兩類問題:
如果場景中至少有一個(gè)Interpolation物體,所有物理組件的所有變換變化在每次更新時(shí)都會(huì)與物理引擎同步(即使它們在每次更新時(shí)都需要同步一次);
如果對具有帶Interpolation的剛體組件的變換進(jìn)行了更改,則該對象的Interpolation會(huì)中斷,因?yàn)橛脩暨M(jìn)行的變換更改會(huì)傳播到physics engine,并更改最后一個(gè)模擬的姿態(tài)(姿態(tài)不會(huì)單獨(dú)存儲(chǔ),只是物理引擎當(dāng)前使用的姿態(tài))。
為了解決這些問題,Unity更新了Interpolation的代碼,這樣就不需要同步每幀的所有變換。該優(yōu)化進(jìn)一步提高了性能;新的Interpolation代碼比以前運(yùn)行更快(取決于場景的復(fù)雜性)。
處理論壇上的反饋
論壇致力于討論physics tech的各種實(shí)驗(yàn)預(yù)覽,在Unity 2022.1版本中將實(shí)現(xiàn)的一些優(yōu)化:
在許多項(xiàng)目中,尤其是大型項(xiàng)目,經(jīng)常使用許多GameObject layers,因此描述層組合和產(chǎn)生物理接觸對的矩陣也會(huì)變得相當(dāng)大。在Unity 2022.1版本中,突出顯示了當(dāng)前選定的行和列,這讓使用更加方便。
Joint用于連接兩個(gè)剛體,并定義它們相對運(yùn)動(dòng)的約束。從Unity 2020.2開始,Joint也可以用于將剛體鏈接到關(guān)節(jié)體。為了實(shí)現(xiàn)這一點(diǎn),每Joint類都擁有了一個(gè)附加屬性,這在檢查器中能夠看到。同時(shí)鏈接到剛體和關(guān)節(jié)體是不可能的,所以當(dāng)一個(gè)選項(xiàng)已經(jīng)被設(shè)置時(shí),同時(shí)顯示這兩個(gè)選項(xiàng)會(huì)占用垂直空間。在新版本中將會(huì)只顯示已設(shè)置的屬性從而節(jié)省空間。
運(yùn)動(dòng)學(xué)剛體是一種特殊類型的物體,它可以影響其他物體,但不會(huì)讓其他物體影響自己,除非其被頻繁移動(dòng)。因此,它類似于一個(gè)static collider。運(yùn)動(dòng)學(xué)剛體的典型的用例是角色控制器、物理動(dòng)畫驅(qū)動(dòng)以及對于手腕運(yùn)動(dòng)的虛擬現(xiàn)實(shí)模擬等。這是通過設(shè)置一個(gè)運(yùn)動(dòng)目標(biāo)來控制的,物體將在一個(gè)模擬幀中達(dá)到該運(yùn)動(dòng)學(xué)目標(biāo)。這里與static collider的主要區(qū)別在于,運(yùn)動(dòng)學(xué)目標(biāo)不是通過瞬間瞬移(改變姿態(tài))達(dá)到目的,而是通過計(jì)算一幀內(nèi)達(dá)到目標(biāo)所需的線速度和角速度,并在事后將數(shù)據(jù)傳遞給求解器。通過這種方式,可以有助于正確地實(shí)現(xiàn)約束雅可比矩陣,因此任何附加的jointchain都將正確地做出反應(yīng)(沒有故障)。在Unity2022.1版本中,Unity公開了一個(gè)新方法可以實(shí)現(xiàn)在一次操作中設(shè)置運(yùn)動(dòng)學(xué)目標(biāo)的位置和旋轉(zhuǎn)。
Unity 2021.2中引入的Contact modification功能可以在Contact Point details被用于為求解器創(chuàng)建contact constraints之前更改由narrow phase生成的Contact?Point details。在Unity 2022.1版本中,開發(fā)團(tuán)隊(duì)為接觸對中的物體速度添加了新的getters。
PhysX版本目前已經(jīng)更新到了4.1.2,這是迄今為止4.x系列中的全新版本。但這是一個(gè)小版本,只能解決關(guān)鍵的錯(cuò)誤和崩潰。
當(dāng)一個(gè)動(dòng)態(tài)物體與一個(gè)collider重疊時(shí),求解器的目標(biāo)是找到corrective impulse,在滿足所有約束的同時(shí)將它們分開。在內(nèi)部,此impulse是針對一對接觸點(diǎn)中的每個(gè)接觸點(diǎn)單獨(dú)計(jì)算的,但是之前版本的Unity只有一個(gè)返回所有點(diǎn)總和的總值。隨著新版本的發(fā)布,Unity將公開接觸點(diǎn)的一個(gè)新屬性,允許檢索每個(gè)接觸點(diǎn)的impulses的結(jié)構(gòu)。
Physics批處理查詢功能,可直接用于支持某些用例,但目前功能不多。此功能還在繼續(xù)發(fā)展,新版本的Physics批處理查詢功能支持更多的用例,比如具有更復(fù)雜的線程模式的用例,查詢的類型也更加多樣化。Unity2022.1版本添加了一個(gè)新的批處理查詢類型(Physics.ClosestPointCommand),并支持在任何物理場景中運(yùn)行批處理查詢。
電話:010-50951355 傳真:010-50951352 郵箱:sales@m.gentlemenlisten.com ;點(diǎn)擊查看區(qū)域負(fù)責(zé)人電話
手機(jī):13811546370 / 13720091697 / 13720096040 / 13811548270 /
13811981522 / 18600440988 /13810279720 /13581546145