《崔汉青-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