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