VicoHu
6ef7cb8b1c
fix(canvas): 3D 导演台 - 修复白膜视频导出渲染循环逐帧崩溃 (#439)
导出白膜视频得到的是 0 秒视频:文件实测仅 1 帧(ffprobe
nb_read_frames=1,duration=0.001s),却无任何报错并照常回写画布。
根因:applyClaySceneMaterials 把场景内所有非 actor mesh 的材质换成
clay MeshStandardMaterial,drei Grid 的 GridMaterial(带 uniforms 的
ShaderMaterial)也在其中。Grid 组件内部 useFrame 每帧读取
material.uniforms.worldCamProjPosition,材质被换后 uniforms 为
undefined,渲染循环逐帧抛 TypeError,R3F 不再产出新帧,
captureStream 只录到启动前手动 gl.render 的那一帧;5 秒后
setTimeout 照常 stop,残缺视频被当作成功结果。开启轨迹显示
(drei Line 同为 uniforms 材质)或视口白膜显示模式时同样触发。
修复:
- applyClaySceneMaterials 跳过带 uniforms 的 ShaderMaterial,
并抽到 lib/canvas/director/director-clay-materials.ts 补回归测试;
- recordCanvas 加固:录制期间监听 window 未捕获错误,首个渲染
错误立即中止并报错;录制结束用 <video> 探测真实时长(Chrome
MediaRecorder 的 webm 无时长头,需 seek 到末尾),低于预期一半
报「时长异常」,杜绝残缺视频再被静默回写。
2026-09-08 16:58:41 +08:00
..
2026-09-06 20:33:22 +08:00
2026-09-06 20:33:22 +08:00
2026-09-05 13:24:10 +08:00
2026-09-07 22:28:32 +08:00
2026-09-08 16:58:41 +08:00
2026-09-06 20:28:51 +08:00
2026-09-05 02:52:21 +08:00
2026-09-06 20:28:51 +08:00
2026-08-20 14:33:16 +08:00
2026-08-29 23:34:55 +08:00
2026-09-06 20:33:22 +08:00
2026-08-19 07:16:07 +08:00
2026-08-06 16:36:51 +08:00
2026-09-01 14:51:40 +08:00
2026-09-06 20:28:51 +08:00
2026-09-06 07:42:02 +08:00
2026-09-06 07:42:02 +08:00
2026-08-03 21:38:38 +08:00
2026-09-07 23:02:34 +08:00
2026-09-07 14:03:50 +08:00
2026-09-07 14:03:50 +08:00
2026-09-07 14:03:50 +08:00
2026-08-21 16:53:33 +08:00
2026-09-07 23:02:34 +08:00
2026-09-06 07:42:02 +08:00
2026-09-06 07:42:02 +08:00
2026-08-31 15:59:34 +08:00
2026-09-01 20:01:52 +08:00
2026-09-06 07:42:02 +08:00
2026-08-26 14:41:46 +08:00
2026-08-31 09:00:37 +08:00
2026-09-05 13:24:10 +08:00
2026-09-06 20:28:51 +08:00
2026-09-06 20:28:52 +08:00
2026-09-06 20:28:51 +08:00
2026-09-06 20:28:51 +08:00