Files

6.0 KiB
Raw Permalink Blame History

3D预览限制说明

重要提示 ⚠️

UI预览和最终渲染使用不同的技术

UI预览(实时预览)

UI中的预览使用以下技术:

  1. 2D近似模式(默认)

    • 使用Canvas 2D渲染
    • 通过2D变换模拟3D效果
    • 性能好,但不是真正的3D透视
    • 适合快速预览和调整
  2. 3D CSS模式(实验性)

    • 使用CSS 3D transforms
    • 提供更接近真实的3D效果
    • 性能较低,可能有兼容性问题
    • 仅用于预览,不影响最终渲染

最终渲染(后端Python)

点击"Run Node"后的最终渲染使用:

  • 完整的3D透视投影
  • 真实的矩阵变换
  • 准确的深度排序
  • 正确的透视变形

为什么预览和渲染不同?

技术限制

  1. 浏览器Canvas 2D

    • 不支持真正的3D透视投影
    • 只能模拟简单的3D效果
    • 无法实现复杂的矩阵变换
  2. 性能考虑

    • 实时预览需要高帧率(30-60fps)
    • 完整3D计算会导致卡顿
    • 2D近似提供流畅的交互体验
  3. WebGL/WebGPU限制

    • 需要额外的着色器编程
    • 增加代码复杂度
    • 兼容性问题

预览的作用

UI预览主要用于:

  1. 调整图层位置

    • 快速移动图层
    • 调整X、Y坐标
    • 设置Z深度
  2. 设置关键帧

    • 在时间轴上添加关键帧
    • 预览动画轨迹
    • 调整时间曲线
  3. 调整摄像机参数

    • 设置摄像机位置
    • 调整旋转角度
    • 设置FOV
  4. 观察大致效果

    • 了解图层的相对位置
    • 预览动画的大致流程
    • 检查图层是否可见

预览模式对比

2D近似模式

优点:

  • ✅ 性能好,流畅
  • ✅ 兼容性好
  • ✅ 适合快速调整

缺点:

  • ❌ 不是真正的3D透视
  • ❌ 旋转效果不准确
  • ❌ 无法预览复杂的3D变换

适用场景:

  • 日常编辑和调整
  • 设置关键帧
  • 快速预览

3D CSS模式(实验性)

优点:

  • ✅ 更接近真实3D效果
  • ✅ 支持CSS 3D transforms
  • ✅ 可以预览透视变形

缺点:

  • ❌ 性能较低
  • ❌ 可能有兼容性问题
  • ❌ 仍然不是完整的3D渲染
  • ❌ 不支持全景模式

适用场景:

  • 需要更准确的预览
  • 调试复杂的3D场景
  • 最终检查前的预览

最终渲染的优势

后端Python渲染提供:

1. 完整的3D透视投影

# 构建透视投影矩阵
proj_matrix = Transform3D.build_projection_matrix(fov, aspect)

# 构建视图矩阵
view_matrix = Transform3D.build_view_matrix(
    cam_pos_x, cam_pos_y, cam_pos_z,
    cam_yaw, cam_pitch, cam_roll
)

# 构建模型矩阵
model_matrix = Transform3D.build_model_matrix(
    x, y, z,
    rot_x, rot_y, rot_z,
    scale_x, scale_y, scale_z,
    anchor_x, anchor_y
)

# MVP矩阵
mvp = proj_matrix @ view_matrix @ model_matrix

2. 准确的透视变换

  • 使用OpenCV的getPerspectiveTransform
  • 正确的透视除法
  • 准确的深度排序

3. 全景模式支持

  • 球面投影
  • 正确的UV映射
  • 支持360度全景图

4. 高质量渲染

  • 任意分辨率
  • 抗锯齿
  • 正确的Alpha混合

工作流程建议

推荐工作流程

  1. 使用2D近似模式进行编辑

    - 添加图层
    - 设置位置和关键帧
    - 调整摄像机参数
    - 快速预览动画
    
  2. 切换到3D CSS模式检查

    - 检查透视效果
    - 验证图层深度
    - 确认摄像机角度
    
  3. 运行最终渲染

    - 点击"Run Node"
    - 等待渲染完成
    - 检查输出结果
    
  4. 根据结果调整

    - 如果效果不理想
    - 返回UI调整参数
    - 重新渲染
    

调试技巧

  1. 使用低分辨率测试

    • 先用640×360测试
    • 确认效果后再用高分辨率
  2. 分段渲染

    • 使用start_frame和end_frame
    • 只渲染关键帧附近
    • 节省时间
  3. 使用图层Z值标记

    • 前景:Z = -200 到 200
    • 中景:Z = 0
    • 背景:Z = 200 到 500
    • 便于理解深度关系
  4. 摄像机参数记录

    • 记录好的摄像机设置
    • 创建预设
    • 重复使用

全景模式特别说明

全景模式要求

  1. 必须启用摄像机

    • 全景模式需要摄像机才能工作
    • 确保"启用"复选框已勾选
  2. 背景图片比例

    • 必须是2:1比例(如4096×2048)
    • 允许±35%的误差
    • 非2:1图片会使用普通模式
  3. 预览限制

    • UI预览中全景效果可能不准确
    • 最终渲染会使用完整的球面投影

全景模式工作原理

# 球面投影
lon = atan2(rx, rz)
lat = asin(ry)

# UV映射
u = (lon / (2π) + 0.5) * imgW
v = (-lat / π + 0.5) * imgH

# 重映射
img_np = cv2.remap(img_np, map_x, map_y, 
                   cv2.INTER_LINEAR, 
                   borderMode=cv2.BORDER_WRAP)

常见问题

Q: 为什么预览和渲染结果不一样?

A: 预览使用2D近似,渲染使用完整3D透视。这是正常的。

Q: 如何获得更准确的预览?

A:

  1. 切换到"3D CSS"预览模式
  2. 或者使用低分辨率快速渲染测试

Q: 全景模式在预览中不工作?

A:

  1. 确保启用了摄像机
  2. 检查背景图片是否为2:1比例
  3. 最终渲染会正确应用全景效果

Q: 3D CSS模式很卡怎么办?

A:

  1. 切换回2D近似模式
  2. 减少图层数量
  3. 降低预览分辨率

Q: 如何确认最终效果?

A:

  1. 使用低分辨率快速渲染
  2. 检查关键帧
  3. 确认后再用高分辨率

未来改进计划

  • WebGPU实时3D预览
  • 更准确的预览算法
  • 预览质量选项
  • 实时光线追踪预览
  • 预览缓存优化

总结

记住:

  1. ✅ UI预览是近似效果,用于快速调整
  2. ✅ 最终渲染是准确的3D透视
  3. ✅ 全景模式需要启用摄像机
  4. ✅ 使用推荐工作流程提高效率

不要担心:

  • ❌ 预览不准确是正常的
  • ❌ 最终渲染会给出正确结果
  • ❌ 这是技术限制,不是bug

如有疑问,请参考: