E4 验收记录#

Learning home · PhysX contents

Course text is primarily Chinese, with English terminology and summaries. The original content is preserved.

任务:PhysX Atlas #5。交付:传感、场景查询与调试显示、原生单束查询片段、中英文入口、课程/roadmap、源码地图与身份清单。

开始时已 fetch 核实实际 main 为 01b60166300ce7adbf575dca6df8eceb71ab972f,E1–E3 课程已实际合入;#5 OPEN、无评论、无进行中 PR,工作树干净。从该基线创建 docs/e4-sensors-rendering。本记录对应包含它的 Git 提交;远端发布状态由后续实际 commit/Issue/PR 读回确定。

对照验收#

要求

对应交付

结论

A6 原生与宿主边界

第 1、6、8 节区分查询、动力学观测、调试图元与宿主 RGB/depth/segmentation

源码课程交付;没有把宿主功能归给 core SDK

原生查询 API

第 2–4 节 ray/sweep/overlap、hit 有效位、query mask、pre/post filter、closest/ANY、touch 截断、cache

固定接口和 CPU 查询路径核对;未执行 query

输出形状/frame/单位

第 2、5、6 节 hit/数组索引、child joint force、COM acceleration、光学坐标和 range/depth

量纲与应用假设明确;不把像素契约示例说成原生返回值

更新时间/所有权/并行

第 3–4、7–8 节 query update、锁/阶段、借用数据、图元生成阶段、writer/transport、跨线程复制

采样与生命周期源码交付;线程/设备运行未验收

力/加速度/触觉

第 5 节承接 E3,区分 incoming joint force、cache.jointForce、加速度有效性与理想 IMU 数学

无实际 IMU/触觉实现或完整 wrench 验收

GUI/headless/debug

第 7–8 节 PxRenderBuffer、OpenGL snippet、PVD/OmniPVD、窗口与非窗口职责

阅读固定源码;没有构建/启动 viewer 或 offscreen renderer

原生片段/练习

单束 C++ 函数、7 项排错提示、9 道附答案阅读练习

无 SDK 初始化、main、跨引擎框架或独立评分器

导航/版本/后续

中英 README、课程/roadmap、source map/manifest 与 Sim Atlas 首页

SDK 5.11 源码身份与历史 Isaac/UniSim binary 分开;E5 仍待开发

源码、公式和片段由作者自审,没有宣称独立 reviewer 批准。重点交叉核对:

  • Shape 的 query filter 与 simulation filter 独立;硬编码 mask 在用户 prefilter 之前。缓存 shape 跳过滤并按 BLOCK 处理,不能沿用旧缓存代替新可见性策略。

  • Query ANY 与 geometry ANY 的层次不同;固定 touch buffer 可丢弃任意 hits 且无自动溢出 warning,容量相等不等于结果完整。

  • query 的 const 入口仍可能 flush/commit;manual update/fetch、应用读写锁与物理 fetchResults 完成是不同契约。

  • incoming joint force 使用 child joint frame、low-level link index,root 按定义为零;它与控制输入 cache.jointForce、单个 contact normal 不同。

  • RigidDynamic acceleration 的 scene creation flag、Direct GPU 普通 getter 的零返回、首次/reset 和 CPU 速度差分路径均明确,不把无效值写成实测零。

  • debug buffer 在 step 入口重建对象图元,接触图元在 finalization 生成后 fetch 合并;安全读取不保证统一采样时刻。deprecated CONTACT_FORCE 实为 CONTACT_IMPULSE,图示没有自动除 dt。

  • OmniPVD start/stop 的快照、writer session 与 transport 文件边界分开;再次 start 不是 resume,stop 不替应用 flush/close。

  • 关节 wrench 换参考点、刚性安装理想 IMU、针孔 range→depth 公式均注明 frame/单位/假设;这些推导不是运行传感器的证据。

实际检查#

环境:Linux、Python 3.12.12、g++ 11.4.0。固定来源 da950a3537927784951853c66618036f332ca0ce,SDK 头文件 5.11.0;sources.json 累计 103 个文件,本项新增 24 个。逐文件用 Git blob 算法核对内容,并独立把全部 manifest 条目与官方同一提交的完整 Git tree 对照,不只让 manifest 与缓存互相自证。

新 C++ 片段的公开头文件依赖闭包读取 63 个文件,均与同一官方 tree/blob 一致。Linux 预处理不使用未公开的 Switch 平台头文件;依赖闭包也包含条件编译中的其他公开平台头文件,63 不是实际 Linux 编译单元展开数。没有下载或构建 SDK binary。

仓库根目录命令(PHYSX_SOURCE 指向包含 physx/include 的匹配固定源码树或核验缓存):

git diff --check
git diff --cached --check
python scripts/check_docs.py
python scripts/check_source_links.py --source-root "$PHYSX_SOURCE"
g++ -std=c++17 -DNDEBUG -fsyntax-only -Wall -Wextra \
  -I "$PHYSX_SOURCE/physx/include" examples/e4_scene_query.cpp

结果:文档相对文件链接、103 个固定源码 blob 与 387 处源码链接的路径/行范围、包含新文件的空白检查通过;新 C++ 片段语法/类型检查退出码 0,无诊断。未修改 CI 或检查脚本,也没有放宽检查。所有块公式使用 GitHub 支持的 $$ 分隔;没有将本地文档检查称为浏览器视觉验收。

源码链接检查只证明文件身份及被引用行存在;语义由实际阅读另行核对。check_docs.py 不验证远端页面/锚点,CI 仍只跑其声明的文档检查。C++ -fsyntax-only 不链接、不产生可执行程序,也不证明 SDK 构建、物理、传感或渲染运行成功。

未决与下一步#

本轮没有运行任何 native SDK、ray query、物理步、contact callback、GPU、GUI/headless renderer、PVD/OmniPVD 录制、传感实验、训练或基准。示例调用者仍负责 SDK/scene/actor 生命周期、query 标志、完整自身对象集合、pose 与 query 同状态边界、scene update 和线程协调;语法检查不替代这些前置条件的运行验收。

历史 Isaac Sim 5.1 / UniSim 1.7.10 内置 PhysX 与传感扩展身份继续以 DexLab 的已有证据为准,未用当前源码默认值回填 #126。宿主 RGB/depth/分割实现和 GPU 导出、图像/物理同步误差、噪声标定仍未验收,不由本章核心 SDK 课程推断。后续实验复用 DexLab,不新增独立评分器。

E2/E4 实际合入后可继续 E5 批量、学习接口与数据;E6 深入后端与扩展,E7 完成双路线审校和 DexLab 复用入口。下一项执行前重新核实 main、Issue/PR 与依赖,本项不自动领取后续阶段。

Course source · GitHub · License