尧图精选

Nerfstudio Blender VFX 插件实战:将 Blender 动画与 NeRF/3DGS 渲染无缝合成

🕒 发布时间:2026/9/15 11:07:18 📁 来源:尧图网络
Nerfstudio Blender VFX 插件实战将 Blender 动画与 NeRF/3DGS 渲染无缝合成【免费下载链接】nerfstudioA collaboration friendly studio for NeRFs项目地址: https://gitcode.com/GitHub_Trending/ne/nerfstudioNerfstudio 官方为 Blender 用户提供了一个 VFX 合成插件源码位于 nerfstudio/scripts/blender/nerfstudio_blender.py它能把 Blender 相机动画导出为 Nerfstudio 可渲染的 JSON 相机路径也能把 Nerfstudio 相机路径导入为 Blender 相机从而让 Blender 中的实拍合成、三维物体动画与 NeRF 渲染背景逐帧对齐。读完本文你将掌握该插件的完整安装流程、场景搭建要点、双向相机路径转换方法以及把多个 NeRF 对象合成进 NeRF 环境的进阶合成管线并了解其底层坐标变换与 FOV 换算的实现原理。插件功能概述该 Blender 插件围绕三个核心能力设计生成 Nerfstudio JSON 相机路径将 Blender 相机路径导出为 JSON 文件默认命名为camera_path_blender.json作为 Nerfstudio 渲染的背景图层相机轨迹导入 Nerfstudio JSON 为 Blender 相机读取 Nerfstudio 编辑器生成的 JSON 相机路径在 Blender 中创建烘焙好相机路径与 FOV 的新相机多 NeRF 对象合成通过导入 NeRF 场景的网格mesh或点云point cloud表示把多个 NeRF 对象合成进同一个 NeRF 背景场景。插件支持透视Perspective、等距柱状equirectangular、VR180 与全向立体omnidirectional stereo / VR 360四种相机类型并支持来自 Blender 相机的动态 FOV即动画中 FOV 变化会精确匹配到 Nerfstudio 渲染。Gaussian Splatting 场景同样受支持但 splat 场景目前不支持 equirectangular 与 VR 视频渲染。从源码结构看nerfstudio_blender.py插件由两个核心 Operator 构成CreateJSONCameraPathBlender → Nerfstudio 方向与ReadJSONinputCameraPathNerfstudio → Blender 方向并在 Render Properties 面板中注册了主面板与两个子面板Nerfstudio Path Generator 与 Nerfstudio Camera Generator。插件安装与启用准备 Blender插件要求Blender 3.0 及以上版本请先在官网安装对应版本。下载插件脚本从仓库获取 nerfstudio_blender.py即nerfstudio/scripts/blender/目录下的单文件插件。安装并启用在 Blender 中进入Edit → Preferences → Add-Ons安装该脚本并勾选启用。插件的bl_info元数据源码 L21-L30声明了插件名称 Nerfstudio Add-On、版本 (1, 0) 以及最低 Blender 版本要求 (3, 0, 0)。面板位置启用后插件会出现在右侧Render Properties渲染属性标签页中展开 Nerfstudio Add-on 主面板即可看到两个子功能模块。场景搭建准备 NeRF 参考表示合成工作的前提是在 Blender 场景中放置一个与真实 NeRF 几何对齐的参考对象用于定位相机坐标从 Nerfstudio 导出 NeRF 表示导出网格或点云作为 Blender 场景中 NeRF 的参考。优先推荐高保真网格mesh导出如果网格不清晰或场景过大导出的详细点云point cloud同样可用。关键设置关闭世界坐标系导出时务必保持save_world_frame为 False或在 viewer 中取消勾选 Save in world frame 复选框以保证插件所需的坐标系正确。该选项在 nerfstudio/scripts/exporter.py 的ExportPointCloud等导出类中定义默认即为False。导入并裁剪将网格/点云导入 Blender 场景。由于它只作为参考、不会出现在最终渲染中只需导入 Blender 动画会与之交互的部分必要时可进一步裁剪网格。在插件中选择参考对象在主面板的 NeRF Representation (mesh or point cloud) 对象选择器中选中该网格/点云。摆放与缩放对 NeRF 表示进行缩放、移动或旋转以贴合你的场景。从 Blender 相机生成 Nerfstudio JSON 相机路径操作步骤隐藏参考网格两种方式任选在对象属性中勾选Shadow Catcher阴影捕获器渲染时网格不可见但投射在它上面的阴影仍会渲染可能需要切换到 Cycles 渲染器才能看到该选项注意如果网格不够清晰或遮挡了场景中的其他物体Shadow Catcher 可能不理想。此时可在 Outliner 中点击网格名称旁的相机按钮将其从渲染中隐藏。检查动画确认动画正常播放且 NeRF 表示不会遮挡相机。打开生成面板在 Render Properties 的插件面板中展开Nerfstudio Path Generator子面板用对象选择器选中 NeRF 表示并设置输出 JSON 相机路径文件的路径。点击 Generate JSON File输出文件默认命名为camera_path_blender.json源码 write_json_to_file 中固定拼接该文件名。在终端用 Nerfstudio 渲染使用生成的相机路径渲染 NeRF 背景渲染命令与 JSON 相机路径的读取逻辑见后文。设置透明背景渲染 Blender 动画前在 Render Properties 的 Film 设置中选择Transparent使 Blender 渲染带透明背景以便与 NeRF 渲染合成。输出 JSON 的格式与字段插件生成的 JSON 遵循 Nerfstudio 相机路径规范完整字段可通过源码 construct_json_obj 确认字段说明生成规则camera_path逐帧相机位姿列表每帧包含camera_to_world16 个浮点数的 4×4 世界矩阵展平、fov该帧垂直 FOV度、aspect固定为 1.0keyframes关键帧列表每帧包含matrix列主序展平、fov、aspect1、properties含 FOV、相机名、时间戳camera_type相机类型perspective或equirectangular源码映射自 Blender 相机类型见 L114-L123render_height/render_width渲染分辨率由 Output Properties 中的分辨率乘以resolution_percentage百分比换算而来fps帧率取自 Output Properties 的 Frame Rate 设置seconds渲染总时长总帧数除以 fps步长为 0 时取 1/fpssmoothness_value平滑值固定为 0is_cycle是否循环固定为 false附加要点环境纹理可以用 Nerfstudio 在场景某处渲染一张 equirectangular 全景图360 图像作为 Blender 场景的环境纹理。Blender 等距柱状相机的设置为相机类型选 Panoramicpanorama 类型选 Equirectangular。帧范围生成的 JSON 相机路径遵循 Output Properties 中用户指定的帧起始start、结束end与步长step字段分辨率则使用指定百分比下的 x/y 渲染分辨率。源码 get_camera_coordinates 即从frame_start以frame_step为步长遍历到frame_end。基于活动相机插件根据场景中的活动相机active camera计算相机坐标源码 L206self.cam_obj bpy.context.scene.camera。动态 FOV相机的 FOV 动画变化会与 NeRF 渲染精确匹配。源码中根据画面朝向横/竖屏与sensor_fitHORIZONTAL/VERTICAL/AUTO将水平 FOV 通过宽高比换算为垂直 FOV见 L68-L90。烘焙关键帧导出的 JSON 相机路径是烘焙的序列中的每一帧都是一个关键帧以保证 Nerfstudio 与 Blender 之间的帧插值完全一致。建议先预览建议在 Nerfstudio Web 界面中配合 NeRF 运行该相机路径确认整个路径上 NeRF 都可见。参考对象可动画NeRF 表示可以被变换位置、旋转、缩放甚至制作动画但不要修改其枢轴点pivot point。导出质量建议优先从 Nerfstudio 导出高保真网格作为 NeRF 表示若无法实现或场景过大点云表示同样可行。帧同步建议合成时建议将视频渲染转换为图像帧序列确保 Blender 与 NeRF 渲染逐帧同步。不支持的相机鱼眼fisheye与正交orthographic相机不支持动态相机对焦dynamic camera focus暂不支持。VR180 与 ODS 渲染合成将 Blender 相机配置为全景等距柱状panoramic equirectangular并在 Output Properties 中启用立体渲染stereoscopy对 VR180 Blender 相机将全景经度最小/最大值panoramic longitude min/max设置为 -90 和 90在 Blender 相机设置的 Stereoscopy 面板中模式改为 ParallelInterocular Distance眼间距设为0.064 m并勾选 Spherical Stereo球面立体。Nerfstudio 侧对 VR180/ODS 相机类型的读取可在 nerfstudio/cameras/camera_paths.py 的get_path_from_json中确认vr180映射为CameraType.VR180_L、omnidirectional映射为CameraType.OMNIDIRECTIONALSTEREO_L且这两类相机的焦距由render_width/2与render_height直接决定不读取fov字段。从 Nerfstudio JSON 相机路径创建 Blender 相机反向流程同样由插件支持展开Nerfstudio Camera Generator子面板输入 NeRF 表示对象后选择 Nerfstudio 的 JSON 文件点击Create Camera from JSON。视口中会出现一个名为NerfstudioCamera的新相机携带输入文件的相机路径与 FOV。该相机的类型与 Nerfstudio 输入文件匹配鱼眼相机除外见下文限制。源码 generate_camera 的实现细节逐帧读取camera_path中的camera_to_world重建 4×4 矩阵并用 NeRF 表示的matrix_world左乘得到相对相机位姿read_camera_coordinates每个关键帧插入位置location与旋转rotation_euler关键帧缩放固定为 (1,1,1)不进行缩放关键帧相机的sensor_fit被设置为 Verticallens_unit为 FOV并按 JSON 中的垂直 FOV 设置angle并插入焦距lens关键帧。附加要点由于只应用了相机路径、相机类型与 FOV动画的时间与时长可能需要手动调整鱼眼相机导入不受支持JSON 中的 fisheye 类型会默认转为透视相机并弹出警告源码 L308-L310动画化的 NeRF 表示不会反映在导入的相机路径动画中新创建的相机默认不是活动相机需要右键选择 Set Active Camera创建的 Blender 相机动画是烘焙的序列中每一帧都是关键帧保证两个软件帧插值一致输入 JSON 中的分辨率设置不会影响 Blender 渲染设置相机的缩放不参与关键帧新相机的传感器适配方式为 Vertical。在 NeRF 环境中合成 NeRF 对象这是插件最有价值的进阶用法通过渲染裁剪后的 NeRF 对象及其累积渲染accumulation作为 alpha 遮罩将其合成到 NeRF 背景渲染之上。完整操作流程导入背景将背景 NeRF 场景以点云形式导入网格也可但大场景优先用点云。导出裁剪后的 NeRF 对象网格在 Nerfstudio viewer 中打开该 NeRF 对象选择Crop Viewport调整包围盒的 Scale缩放与 Center中心值将 NeRF 场景裁剪到目标对象的边界附近将 Scale 与 Center 值复制到 Export 面板把 NeRF 对象导出为网格点云也可以但网格才能渲染阴影记录裁剪的 scale 与 center 值可在编辑器中创建新的 JSON 相机路径文件末尾会附带一个 crop 段用于保存这些值。导入并摆放导入 NeRF 对象表示重新缩放并摆放场景、NeRF 对象与背景环境可以分别对它们做动画。可选添加 NeRF 对象的阴影添加一个代表地面的平面在对象属性 Visibility 中勾选 Shadow Catcher可能需要切换到 Cycles 渲染器才能看到在 NeRF 对象的对象属性 Ray Visibility 区域中取消勾选 Camera这样网格不会出现在 Blender 渲染中但阴影会保留渲染 Blender 动画时只显示阴影捕获器上的对象阴影并在 Film Settings 中选择 Transparent 以获得透明背景。为背景环境生成相机路径在 Nerfstudio Path Generator 子面板中选中 NeRF 环境表示设置输出路径并点击 Generate JSON File输出camera_path_blender.json。建议重命名该 JSON 文件以便区分后续生成的多个相机路径。为 NeRF 对象生成相机路径将对象选择器切换为 NeRF 对象再次生成 JSON。注意先重命名或移动上一步的文件否则新文件会覆盖旧的camera_path_blender.json。场景中有多个 NeRF 对象时需要对每个对象重复此过程。渲染背景环境在终端用环境相机路径渲染背景 NeRF。渲染 NeRF 对象打开刚生成的 Blender Nerfstudio JSON 相机路径在is_cycle字段之后文件末尾添加 crop 参数段。可以直接从之前导出的含裁剪的 JSON 相机路径中复制 crop 段也可以按格式手动填写裁剪值用 Nerfstudio 和编辑后的相机路径渲染 NeRF 对象得到RGB 渲染再渲染一次累积渲染accumulation作为 NeRF 对象的 alpha 遮罩在渲染命令中追加命令行参数--rendered-output-names accumulation。该参数在 nerfstudio/scripts/render.py 的DatasetRender及路径渲染配置中均有定义用于指定要输出的渲染结果名称。转成图像序列将每个 Nerfstudio 渲染视频转换为 PNG 或 JPG 帧序列确保合成时帧对齐。可以通过新建 Blender Video Editing 文件把 mp4 渲染为 JPG/PNG 帧序列。在视频编辑软件中合成如 Adobe Premiere Pro最底层放置 Nerfstudio 背景环境的渲染之上若创建了放置 NeRF 对象的阴影渲染在环境与阴影图层之上放置 NeRF 对象的 RGB 渲染RGB 渲染之上放置 NeRF 对象的 accumulation 渲染应用滤镜将 accumulation 渲染作为 alpha 遮罩在 Premiere Pro 中给 RGB 渲染应用 Track Matte Key 效果将 Matte 设为 accumulation 渲染所在视频轨道Composite Using 选择 Matte Luma。附加说明RGB 与 accumulation 渲染需要为场景中每个被裁剪的 NeRF 对象分别生成但未裁剪的 NeRF 环境不需要若要合成阴影图层导出的 NeRF 对象网格应具有足够保真度来投射阴影但纹理不必清晰如果是对真实相机拍摄的素材做运动跟踪与合成可以添加平面或立方体代表墙壁、门洞作为 shadow catcher 或 holdout 对象这样阴影图层会合成到 NeRF 环境之上并帮助生成 alpha 遮罩不要修改 NeRF 表示的枢轴点。实现原理坐标变换与 FOV 换算生成 JSONBlender → Nerfstudio算法核心get_camera_coordinates construct_json_obj按帧序列从frame_start到frame_end步长frame_step迭代逐帧获取活动相机的4×4 世界矩阵包含位置、旋转、缩放信息同时获取 NeRF 表示在该帧的世界矩阵用nerf_mesh_mat_list[i].inverted() org_cam_path_mat_val将相机坐标变换到 NeRF 表示局部坐标系下源码 L98-L100。这正是插件允许你在 Blender 中随意重新摆放、旋转、缩放 NeRF 表示的关键——变换会自动反映到生成的相机路径中逐帧计算相机 FOV基于传感器适配方式sensor fithorizontal 或 vertical、视角angle of view与宽高比。横/竖屏时分别处理当sensor_fit与画面朝向不一致时用2 * atan(tan(angle/2) * aspect_ratio)将水平 FOV 换算为垂直 FOVL68-L90构造关键帧列表与变换后的相机矩阵一一对应JSON 中aspect固定 1.0、smoothness_value为 0、is_cycle为 falseNerfstudio 渲染时长 总帧数 / fps组装完整 JSON 对象写入用户指定路径。相机路径矩阵以行主序展平为 16 个浮点数get_list_from_matrix_pathL102-L105与 Nerfstudio 的camera_to_world字段格式一致——在 camera_paths.py 中get_path_from_json正是用torch.tensor(camera[camera_to_world]).view(4, 4)[:3]重建位姿矩阵。导入相机Nerfstudio → Blender读取输入 JSON遍历camera_path字段由camera_to_world重建 4×4 世界矩阵并用nerf_bg_mesh.matrix_world orig_cam_mat转换到 Blender 世界空间L262从fov字段读取 FOV垂直 FOV度逐帧设置相机位姿location / rotation_euler与焦距lens并插入关键帧同时依据 JSON 的camera_type设置相机类型perspective / equirectangular。限制与注意事项汇总Blender 3.0是硬性版本要求鱼眼与正交相机不支持导出侧会回退为 perspective 并警告导入侧同样回退并警告动态相机对焦focus暂不支持Gaussian Splat 场景可以渲染但用作参考的点云/网格需要用同一数据集训练 NeRF 生成导出网格/点云时务必保持save_world_frameFalse保持坐标系正确NeRF 参考表示的枢轴点不可修改为保证帧同步建议将视频渲染统一转为帧序列后再合成。如需进一步了解 Nerfstudio 相机路径格式与渲染命令可继续阅读仓库中的 camera_paths.pyJSON 路径解析与 render.pyns-render命令与--rendered-output-names参数。【免费下载链接】nerfstudioA collaboration friendly studio for NeRFs项目地址: https://gitcode.com/GitHub_Trending/ne/nerfstudio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →