《崔漢青-RustConf-Motphys.pdf》由會員分享,可在線閱讀,更多相關《崔漢青-RustConf-Motphys.pdf(22頁珍藏版)》請在三個皮匠報告上搜索。
1、第三屆中國Rust開發者大會RustRust在物理引擎研發中的應用在物理引擎研發中的應用崔漢青Motphys CEOMotphys 驅動虛擬世界的全部運動體驗應用基礎應用:內容生成工具、交易市場等基礎硬件:5G/6G、半導體、VR/AR等基礎軟件:渲染引擎、動作物理引擎等靜態表現力動態表現力渲染技術動作物理技術動作技術Motion物理技術Physics規則驅動AI生成數據驅動AI加速云原生架構和 AI 能力架構特點性能特點功能特點云原生架構單機架構動作物理分離跨平臺確定性動作物理統一算力動態調配分布式計算物理材質統一解算算法優化物理材質單獨解算工程優化性能待優化AI仿真加速前沿動作功能缺乏動作
2、功能AI動作生成優秀的易用性和適配性缺乏AI能力保證每個目標平臺的極致性能跨端確定性 保證所有目標平臺計算結果完全一致具備分布式能力 通過橫向擴展突破單機物理算力的上限Motphys 物理引擎的設計目標Rust 的性能和 C/C+比肩,支持 SIMD 優化,滿足苛求性能的引擎研發需求;Rust的零開銷抽象甩掉了復雜設計的性能包袱#高性能Rust 在不損耗性能的情況下,其優秀的語法設計保證了語言的強大表達力:用更少的代碼寫更多的功能#高表達力#安全Rust 依靠 LLVM 實現了多目標平臺,并可以用語言內建的 target_feature 針對不同的指令集進行處理#跨平臺Cargo 真的比 cm
3、ake 好太多了#依賴管理#無懼并發Rust 在語法層面極大程度保證了內存安全和并發安全語言內建的 async/await,還有優秀的crates rayon(計算密集型并發支持)和tokio(IO 密集型并發支持)為什么選擇 RustMotphys 物理引擎架構Broad PhaseNarrow PhaseCandidate Collision PairsManifold BuildCollision PairsCollision DetectionAABB UpdateAABB CollectionPose IntegrateIsland BuildSolverConstraint Gro
4、upsSimulationTime ControlDelta TimeState Change InputState Outputglam 代碼質量高,使用簡單,但是沒有AoSoA類型,跨端確定性難以保證nalgebra 過于復雜,大量的泛型導致使用不便,代碼質量一般其余開源 crates 完成度不高Rust 開源數學庫的痛點寫好數學庫并不容易 充分利用目標平臺指令集 大量的針對目標平臺的SIMD優化 數學計算本質上是類似的 大量的相似代碼 Portable SIMD unstable 影響跨端確定性的因素太多了motphys-math為高性能物理引擎量身定制增加了 AoSoA 類型,并做了大
5、量 SIMD 優化增加了跨端確定性模式保證所有設備浮點計算結果完全一致性能超越目前開源的Rust基礎數學庫glamnalgebraultravioletGeneric,procedure macro,orGeneric表達力不足不容易做精細性能優化Procedure Macro過于復雜結果不可見那么,用代碼生成代碼?Web 開發用的模板引擎,也可以用于生成 Rust 代碼tera模板生成分指令集優化的 Rust 代碼提供遠超 Procedure Macro 的可讀性和易用性mathbench 已有開源數學 crates 的 benchmark motphys-math benchmark 超越
6、開源 cratesBenchmarkmotphys-mathultravioletnalgebraratio/nalgebramatrix2 transpose x1612.00 ns32.92 ns33.37 ns2.8matrix3 determinant x1610.71 ns12.01 ns12.00 ns1.1matrix3 inverse x1630.28 ns39.53 ns45.81 ns1.5transform point3 x1618.42 ns23.12 ns20.91 ns1.1narrow phase benchmarkmotphys-math 加持下的 narrow
7、 phaseBenchmarkmotphysPhysX 5ratioCapsule Capsule head to head penetrate 51 ns219 ns4.3Capsule Cuboid coincide 166 ns292 ns1.8Capsule Infinite Plane capsule one hemisphere penetrate18 ns63 ns3.5Sphere Capsule close at cylindrical part12 ns41 ns3.4Sphere Cuboid close at edge5 ns39 ns7.8Sphere Infinit
8、ePlane nocollide9 ns16 ns1.8Sphere Sphere coincide7 ns16 ns2.3Motphys 分布式物理引擎設計目標0.02s內多次通信苛刻的低延遲要求高速內網環境下的線性擴展 新增結點的網絡開銷恒定高可用和負載均衡Message的RTT可測量Motphys分布式物理引擎網絡架構derive serde vs protobuf 通信協議選型 protobuf/msgpack/跨語言協議 需要額外定義數據結構 Pure Rust 我們不需要跨語言 復用已有的數據結構 Point/Vector derive serde 可自定義serializer/d
9、eserializer,靈活度高 Pure rust winPure Rust message為了低延遲 序列化 不考慮版本兼容性 不帶字段描述信息 僅支持primitives,Vec,以及它們的組合嵌套 分布式物理引擎的計算和IO都很重要 計算線程和IO線程分離,各自綁定CPU核心Motphys 特化網絡層自定義 pure rust message自定義編解碼協議自動 ack 和可測量RTT 的通信框架一切為低延遲服務分布式物理,突破單機算力的瓶頸關于咪咕項目詳細情況請參考:https:/ 分布式架構10倍于上述場景中的物理量單機渲染幀率25fps物理集群幀率50fps此時物理模擬已不是算力瓶頸Unity 測試案例Thank you!Motphys