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