渲染器¶
Manim 社区版有两个渲染器:Cairo(默认)与 OpenGL。它们执行同一套场景逻辑,但底层绘制方式完全不同:Cairo 是 CPU 上的 2D 矢量光栅化(3D 是投影后的伪 3D),OpenGL 是 GPU 上的真 3D 光栅化。本章所有 3D 示例(ThreeDScene、多面体、移动摄像机等)用 Cairo 即可完成,无需 OpenGL。
选择渲染器¶
CLI 用 --renderer 切换:
manim -qm --renderer cairo scene.py MyScene # 默认,可省略
manim -qm --renderer opengl scene.py MyScene # 需要 OpenGL 环境
也可以在配置文件中固定 renderer = cairo(或 opengl),省去每次传参。
Cairo vs OpenGL¶
维度 |
Cairo(默认) |
OpenGL |
|---|---|---|
依赖 |
pycairo + ffmpeg |
额外需要 |
3D 实现 |
伪 3D:投影 + 着色后走 2D 矢量管线 |
真 3D:顶点/着色器管线,硬件加速 |
速度 |
中小场景稳定;高分辨率 3D 明显偏慢 |
复杂 3D 场景通常更快,支持实时预览 |
交互 |
仅输出视频 |
支持交互式嵌入( |
特性覆盖 |
参考实现,功能最全、行为最可预期 |
个别特性与 Cairo 存在差异,遇到问题先换 Cairo 复现 |
适用场景 |
最终出片、教程、需要稳定复现的产出 |
调试复杂 3D、探索性交互、性能敏感的 3D 场景 |
依赖检查¶
OpenGL 渲染器需要 moderngl 与 moderngl-window。安装方式:
pip install moderngl moderngl-window
装好后用一次小规模渲染验证:
manim -ql --renderer opengl examples/ch06/three_d_solids.py ThreeDSolids
提示
不确定环境是否就绪时,先跑 manim checkhealth 看整体安装状况;OpenGL 相关问题通常表现为渲染启动时报 moderngl 相关异常,按提示补装依赖即可。Cairo 渲染器没有这些额外依赖,开箱即用。
常见错误与建议¶
常见错误
不要在团队协作或 CI 里默认 OpenGL:不同机器的 GPU 驱动差异会导致结果不一致。发布用的成片统一走 Cairo,OpenGL 留给本地探索。
常见错误
切到 OpenGL 后画面与 Cairo 不一致(如描边粗细、渐变、部分动画细节)并不一定是 bug——两个渲染器在个别视觉细节上本就有差异。以 Cairo 输出为准做视觉验收。
提示
3D 场景“渲染慢”多半不是渲染器的锅,而是分辨率与网格密度:先试 -ql + 调低 resolution,比换渲染器收益更直接。
版本说明
渲染器行为基于 manim 0.21.0;--renderer 标志取值为 cairo / opengl,默认 cairo。
自测¶
✏️ 练习
服务器(无 GPU、无显示器)上批量出片,应该选哪个渲染器?为什么?
✅ 参考答案
选 Cairo。它只依赖 CPU(pycairo + ffmpeg),不依赖 GPU 驱动;OpenGL 需要 moderngl 与可用的图形环境,在无头服务器上更容易失败,且视觉结果可能与本机不一致。
✏️ 练习
同一个 3D 场景,Cairo 渲染明显卡顿。在考虑换 OpenGL 之前,应该先尝试哪两个更省事的优化?
✅ 参考答案
一是降画质 -ql 调试验证逻辑;二是降低 3D 网格的 resolution(如 Sphere(resolution=(16, 16)))减少面片数量。两者都不改代码结构,通常比切换渲染器更快定位瓶颈。
下一步¶
“3D 与摄像机”板块到此结束:你已经能搭建 3D 场景、操纵镜头与取景框,并理解渲染器的选择。最后一个板块进入高级主题——自定义 mobject 与自定义动画。