Skip to content

Hxxxz0/Motion-Visualization

Repository files navigation

SMPL Motion Renderer Standalone

一个独立的SMPL人体动作渲染工具,支持将关节数据转换为SMPL网格并生成高质量的3D人体动画。支持两种渲染方式:传统matplotlib渲染和Blender高质量渲染。

功能特点

  • 🎯 多格式数据支持:HumanML3D、FreeSat等格式数据转换
  • 🔥 高质量SMPL拟合:使用SMPLify3D算法进行姿态优化
  • 🎬 双渲染引擎:matplotlib快速渲染 + Blender高质量渲染
  • 🚀 GPU加速:自动检测并使用CUDA/OPTIX进行加速渲染
  • 🎨 灵活参数控制:光照、视角、材质全面可调
  • Python 3.13兼容:修复了所有兼容性问题

项目结构

smpl_renderer_standalone/
├── config.py                          # 统一配置文件
├── convert_humanml3d.py               # HumanML3D数据转换
├── freesat_to_smpl.py                 # FreeSat数据转换  
├── fit_freesat_fixed.py               # SMPL拟合(SMPLify3D优化)
├── render_smpl_final.py               # matplotlib渲染器
├── render.py                          # Blender渲染入口
├── fit.py                             # 通用拟合接口
├── requirements.txt                   # Python依赖
├── README.md                          # 本文件
├── deps/                              # 依赖文件
│   └── smpl_models/                   # SMPL模型文件
├── mld/                               # MLD模块
│   ├── launch/
│   │   └── blender.py                 # Blender参数解析
│   └── render/
│       └── blender/                   # Blender渲染模块
│           ├── render.py              # 主渲染逻辑
│           ├── scene.py               # 场景设置
│           ├── meshes.py              # 网格处理
│           ├── materials.py           # 材质设置
│           └── camera.py              # 相机控制
├── smpl_models/                       # SMPL模型文件(本地副本)
└── output/                            # 输出目录(自动创建)

完整安装流程

1. Python环境配置

# 创建Python环境(推荐3.10-3.13)
conda create -n smpl_renderer python=3.10
conda activate smpl_renderer

# 安装Python依赖
pip install -r requirements.txt

# 关键依赖包
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118
pip install smplx numpy scipy matplotlib tqdm opencv-python
pip install moviepy  # 用于视频合成

2. SMPL模型文件配置

确保以下SMPL模型文件存在并放置在正确位置:

# 必需的SMPL模型文件
deps/smpl_models/smpl/SMPL_NEUTRAL.pkl     # SMPL基础模型
deps/smpl_models/smpl_mean_params.h5       # 平均参数
deps/smpl_models/gmm_08.pkl                # GMM先验

# 文件来源:从https://smpl.is.tue.mpg.de/下载
# 或从原项目复制:MotionLCM/deps/smpl_models/

3. 安装Blender(可选,用于高质量渲染)

Blender用于生成电影级质量的3D渲染效果。

Linux安装

# 下载Blender 2.93(推荐版本)
cd /tmp
wget https://download.blender.org/release/Blender2.93/blender-2.93.18-linux-x64.tar.xz

# 验证下载完整性(文件大小约167MB)
ls -lh blender-2.93.18-linux-x64.tar.xz

# 解压到用户目录
tar -xf blender-2.93.18-linux-x64.tar.xz
mv blender-2.93.18-linux-x64 ~/blender-2.93

# 添加到PATH(根据你的shell选择)
# For Fish shell:
set -U fish_user_paths $HOME/blender-2.93 $fish_user_paths

# For Bash shell:
echo 'export PATH="$HOME/blender-2.93:$PATH"' >> ~/.bashrc
source ~/.bashrc

# 验证安装
which blender
blender --version

macOS安装

# 使用Homebrew
brew install --cask blender

# 或手动下载
wget https://download.blender.org/release/Blender2.93/blender-2.93.18-macos-x64.dmg

Windows安装

  1. 下载:https://download.blender.org/release/Blender2.93/blender-2.93.18-windows-x64.zip
  2. 解压到 C:\Program Files\Blender Foundation\Blender 2.93\
  3. 添加到PATH环境变量

完整使用Pipeline

Pipeline概览

原始数据 → 数据转换 → SMPL拟合 → 渲染输出
   ↓           ↓          ↓         ↓
 .npy/.pkl  → .pkl  → _mesh.pkl → .gif/.mp4/.png

步骤1: 数据转换

A. HumanML3D格式数据

# 输入:HumanML3D关节数据(22个关节×3坐标)
python convert_humanml3d.py --npy /data/wenshuo/project/jhz/MotionLCM/datasets/humanml3d/new_joints/000021.npy

# 输出:output/000000_humanml3d.pkl
# 包含:关节数据 + 元数据

B. FreeSat格式数据

# 输入:FreeSat采样结果目录
python freesat_to_smpl.py --data_path /path/to/freesat/samples_dir

# 示例:
python freesat_to_smpl.py --data_path /data/wenshuo/project/jhz/Freet2m/checkpoints/t2m/lf_repa_0.1_0.5_MoCLip/samples_iter50173_seed0_a_person_flips_to_the_left_side

# 输出:freesat_output/samples_iter50173_seed0_a_person_flips_to_the_left_side_freesat.pkl
# 包含:关节数据 + 文本描述 + 元数据

步骤2: SMPL拟合(核心步骤)

这是最关键的步骤,将3D关节点转换为真实的人体网格。

# 使用SMPLify3D算法进行高质量拟合
python fit_freesat_fixed.py --pkl output/000000_humanml3d.pkl

# 或者处理FreeSat数据
python fit_freesat_fixed.py --pkl freesat_output/samples_iter50173_seed0_a_person_flips_to_the_left_side_freesat.pkl

# 过程说明:
# 1. 加载SMPL模型(SMPL_NEUTRAL.pkl)
# 2. 初始化SMPL参数(72维姿态 + 10维形状)
# 3. 使用LBFGS优化算法进行150次迭代
# 4. 最小化3D关节重投影误差
# 5. 应用SMPL先验约束确保姿态合理性
# 6. 生成6890个顶点的完整人体网格

# 输出:output/xxx_mesh.pkl
# 包含:vertices(帧数×6890×3),faces,joints等

拟合过程详解:

# 运行时输出示例:
> Loading SMPL model from: deps/smpl_models/smpl/SMPL_NEUTRAL.pkl
> Using device: cuda:0
> Input joints shape: (80, 22, 3)  # 80帧,22个关节
> Starting SMPLify3D optimization...
> Iteration 50/150, Loss: 0.0234
> Iteration 100/150, Loss: 0.0089  
> Iteration 150/150, Loss: 0.0045
> ✅ SMPL fitting completed successfully!
> Output vertices shape: (80, 6890, 3)
> Saved to: output/xxx_mesh.pkl

步骤3A: 使用matplotlib渲染(快速)

适用于快速预览和批量处理。

# 生成GIF动画(推荐)
python render_smpl_final.py --pkl output/000000_humanml3d_mesh.pkl --mode video --fps 20

# 生成关键帧序列图
python render_smpl_final.py --pkl output/000000_humanml3d_mesh.pkl --mode sequence --num 8

# 生成单帧高质量图像
python render_smpl_final.py --pkl output/000000_humanml3d_mesh.pkl --mode frame

# 自定义参数渲染
python render_smpl_final.py --pkl output/000000_humanml3d_mesh.pkl \
    --mode video --fps 30 \
    --elevation 25 --azimuth -45 \
    --light-x 0.5 --light-y 1.0 --light-z -2.0 \
    --light-intensity 0.9 \
    --base-color 0.95 0.82 0.75

步骤3B: 使用Blender渲染(高质量)

生成电影级质量的3D渲染效果,支持真实光照、阴影和材质。

关键技术特性

  • GPU加速渲染:自动检测CUDA/OPTIX/HIP等后端
  • 真实光照模型:Cycles渲染引擎,支持全局光照
  • 高质量材质:皮肤材质,次表面散射效果
  • 智能相机控制:自动调整视角,确保人体完整显示
  • 批量帧渲染:支持长序列动画渲染
  • 自动保存.blend文件:渲染完成后自动保存Blender项目文件,方便后续编辑

基础用法

# 渲染单帧(自动保存静态.blend文件)
export BLENDER_RENDER_VIDEO=true
/data/wenshuo/blender-2.93/blender --background --python smpl_renderer_standalone/render.py -- --pkl smpl_renderer_standalone/output/000000_humanml3d_mesh.pkl --mode frame

# 渲染单帧并保存动画.blend文件(新功能!)
export BLENDER_RENDER_VIDEO=true
/data/wenshuo/blender-2.93/blender --background --python smpl_renderer_standalone/render.py -- --pkl humanml3d_output/000021_humanml3d_mesh.pkl --mode frame --save_animation

# 渲染关键帧序列
export BLENDER_RENDER_VIDEO=true
/data/wenshuo/blender-2.93/blender --background --python smpl_renderer_standalone/render.py -- --pkl smpl_renderer_standalone/output/000000_humanml3d_mesh.pkl --mode sequence --num 8 --res high

# 渲染完整视频动画
export BLENDER_RENDER_VIDEO=true
/data/wenshuo/blender-2.93/blender --background --python smpl_renderer_standalone/render.py -- --pkl smpl_renderer_standalone/output/000000_humanml3d_mesh.pkl --mode video --fps 20

.blend文件自动保存功能

从v2.1.0版本开始,Blender渲染会自动保存.blend文件,提供以下特性:

  1. 智能保存策略

    • 渲染完成后自动保存.blend文件
    • 如果PNG已存在但.blend不存在,会跳过渲染只创建.blend文件
    • 如果PNG和.blend都存在,完全跳过处理
  2. 文件命名规则

    • 输入:samples_xxx_mesh.pkl
    • 输出PNG:samples_xxx_mesh_0.5.png(frame模式)
    • 输出.blend:samples_xxx_mesh.blend(统一命名)
  3. 两种.blend文件类型(v2.2.0新增):

    • 静态.blend(默认):保存单帧人体网格 + 完整场景
    • 动画.blend(使用--save_animation):保存完整动画序列
  4. 使用场景

    • 后续在Blender GUI中编辑场景
    • 调整相机角度、光照、材质
    • 添加额外的3D元素或特效
    • 导出到其他3D软件
    • 制作专业级动画(动画.blend)
  5. 环境变量控制

    # 必须设置此环境变量才能执行渲染
    export BLENDER_RENDER_VIDEO=true
    
    # 如果不设置,仅创建.blend文件而不渲染
    unset BLENDER_RENDER_VIDEO

动画.blend文件功能详解(v2.2.0新增)

新增的--save_animation参数可以创建包含完整动画的.blend文件:

# 创建动画.blend文件(推荐用法)
export BLENDER_RENDER_VIDEO=true
/data/wenshuo/blender-2.93/blender --background --python smpl_renderer_standalone/render.py -- \
    --pkl smpl_renderer_standalone/output/000053_humanml3d_mesh.pkl \
    --mode frame \
    --save_animation

# 也可以与其他模式组合使用
/data/wenshuo/blender-2.93/blender --background --python smpl_renderer_standalone/render.py -- \
    --pkl smpl_renderer_standalone/output/000053_humanml3d_mesh.pkl \
    --mode video \
    --fps 20 \
    --save_animation

动画.blend文件特性

  • 🎬 完整动画序列:包含所有帧的人体姿态(最多60帧以控制文件大小)
  • 🎭 智能可见性控制:每帧只显示对应的人体对象,通过关键帧实现流畅动画
  • 📦 完整场景保留:相机、光照、材质、地面全部保留
  • 🎯 专业制作就绪:可直接在Blender中编辑、添加特效、调整动画

在Blender中使用动画.blend文件

# 在Blender GUI中打开
blender output/000053_humanml3d_mesh.blend

# 播放动画:按空格键
# 调整时间轴:拖动时间滑块
# 渲染动画:Animation → Render Animation

高级参数控制

# 完整参数示例
export BLENDER_RENDER_VIDEO=true
/data/wenshuo/blender-2.93/blender --background --python smpl_renderer_standalone/render.py -- \
    --pkl smpl_renderer_standalone/output/samples_iter50173_seed0_a_person_flips_to_the_left_side_freesat_mesh.pkl \
    --mode video \
    --fps 20 \
    --res high \
    --denoising \
    --accelerator gpu \
    --device 0 \
    --save_animation

参数说明

参数 说明 默认值 示例
--pkl 输入的mesh pkl文件路径 必需 output/xxx_mesh.pkl
--mode 渲染模式 video frame/sequence/video
--fps 视频帧率 20 24, 30
--res 渲染分辨率 low low/high
--num 序列模式的帧数 8 4, 12, 16
--denoising 启用降噪 True -
--accelerator 计算设备 gpu cpu/gpu
--device GPU设备ID 0 0, 1, 2
--exact_frame 帧位置(frame模式) 0.5 0.0-1.0
--save_animation 保存动画.blend文件 False 添加此标志启用

GPU加速详解

Blender会自动检测并使用最佳的GPU后端:

# 运行时会看到类似输出:
> ✅ Found and selected backend: OPTIX
> ✅ Enabled OPTIX devices: NVIDIA GeForce RTX 4090
> 🚀 Using GPU acceleration for rendering
> 📊 Memory usage: 2.1GB / 24GB

支持的GPU后端(按优先级):

  1. OPTIX - NVIDIA RTX系列(最快)
  2. CUDA - NVIDIA GTX/RTX系列
  3. HIP - AMD Radeon系列
  4. ONEAPI - Intel Arc系列
  5. METAL - Apple Silicon

渲染过程监控

# 渲染过程会输出详细信息:
> Loading mesh data: (80, 6890, 3)
> Setting up Blender scene...
> Configuring materials and lighting...
> Starting frame rendering...
> Fra:1 Mem:64.67M (Peak:338.16M) | Time:00:02.34 | Remaining:06:32 | Mem:2.1G, Peak:2.3G | Scene, ViewLayer | Synchronizing object | Human_Mesh
> Fra:2 Mem:65.23M (Peak:340.21M) | Time:00:02.12 | Remaining:06:18
# ... 继续渲染所有帧
> ✅ All frames rendered successfully
> 🎬 Creating video from 80 frames...
> 📁 Output saved to: output/xxx.mp4

输出文件详解

中间文件

# 数据转换阶段
output/000000_humanml3d.pkl              # 原始关节数据
freesat_output/xxx_freesat.pkl           # FreeSat转换结果

# SMPL拟合阶段  
output/000000_humanml3d_mesh.pkl         # SMPL网格数据
# 内容:{
#   'vertices': (帧数, 6890, 3),    # 顶点坐标
#   'faces': (13776, 3),            # 面片索引  
#   'joints': (帧数, 22, 3),        # 关节位置
#   'text': "动作描述"               # 文本描述
# }

最终输出

matplotlib渲染输出

output/000000_humanml3d_mesh_final.gif           # GIF动画
output/000000_humanml3d_mesh_final_sequence.png  # 关键帧序列
output/000000_humanml3d_mesh_final_frame.png     # 单帧图像

Blender渲染输出

# 视频模式
output/000000_humanml3d_mesh_frames/             # 单帧PNG文件夹
├── frame_0000.png                               # 第1帧(1920x1080或512x512)
├── frame_0001.png                               # 第2帧
├── ...
└── frame_0079.png                               # 第80帧
output/000000_humanml3d_mesh.mp4                 # 合成的MP4视频

# 序列模式
output/000000_humanml3d_mesh_sequence.png        # 多帧合成图像

# 单帧模式
output/000000_humanml3d_mesh_frame.png           # 高质量单帧

# 自动生成的项目文件
output/000000_humanml3d_mesh.blend               # Blender项目文件(自动保存)

重要说明

  • .blend文件会在每次渲染后自动保存,无需额外参数
  • 静态.blend(默认):包含单帧人体网格 + 完整场景设置
  • 动画.blend(使用--save_animation):包含完整动画序列,最多60帧
  • 可以直接在Blender GUI中打开编辑:blender output/000000_humanml3d_mesh.blend

动画.blend文件的优势

  • 🎬 在Blender中播放完整动画(按空格键)
  • 🎨 专业级动画制作工具支持
  • 🔧 可调整每帧的材质、光照、相机
  • 📤 导出高质量动画视频或其他格式

完整示例流程

示例1:处理HumanML3D数据

# 1. 数据转换
python convert_humanml3d.py --npy /data/wenshuo/project/jhz/MotionLCM/datasets/humanml3d/new_joints/000000.npy

# 2. SMPL拟合
python fit_freesat_fixed.py --pkl output/000000_humanml3d.pkl

# 3A. 快速matplotlib渲染
python render_smpl_final.py --pkl output/000000_humanml3d_mesh.pkl --mode video --fps 20

# 3B. 高质量Blender渲染
export BLENDER_RENDER_VIDEO=true
/data/wenshuo/blender-2.93/blender --background --python smpl_renderer_standalone/render.py -- --pkl smpl_renderer_standalone/output/000000_humanml3d_mesh.pkl --mode video --fps 20

示例2:处理FreeSat数据(翻转动作)

# 1. 数据转换
python freesat_to_smpl.py --data_path /data/wenshuo/project/jhz/Freet2m/checkpoints/t2m/lf_repa_0.1_0.5_MoCLip/samples_iter50173_seed0_a_person_flips_to_the_left_side

# 2. SMPL拟合
python fit_freesat_fixed.py --pkl freesat_output/samples_iter50173_seed0_a_person_flips_to_the_left_side_freesat.pkl

# 3. Blender高质量渲染
cd /data/wenshuo/project/jhz/MotionLCM
export BLENDER_RENDER_VIDEO=true
/data/wenshuo/blender-2.93/blender --background --python smpl_renderer_standalone/render.py -- --pkl smpl_renderer_standalone/output/samples_iter50173_seed0_a_person_flips_to_the_left_side_freesat_mesh.pkl --mode video --fps 20

技术深度解析

SMPL拟合算法(SMPLify3D)

核心原理:

# 优化目标函数
Loss = λ* L_joints + λ* L_pose_prior + λ* L_shape_prior

# 其中:
# L_joints: 3D关节重投影误差
# L_pose_prior: 姿态先验约束(防止不自然姿态)  
# L_shape_prior: 形状先验约束(人体比例合理性)

优化流程:

  1. 初始化:设置SMPL参数为零姿态
  2. 关节映射:建立输入关节与SMPL关节的对应关系
  3. 迭代优化:使用LBFGS算法最小化目标函数
  4. 约束应用:确保关节角度在合理范围内
  5. 结果输出:生成最终的顶点位置

参数详解:

  • global_orient (3,): 全局旋转(根关节)
  • body_pose (63,): 身体姿态(21个关节×3轴)
  • betas (10,): 体型参数(胖瘦高矮等)
  • transl (3,): 全局平移

Blender渲染技术

场景配置

# 自动场景设置
scene.render.engine = "CYCLES"          # 使用Cycles渲染引擎
scene.cycles.samples = 128              # 采样数(质量vs速度)
scene.cycles.use_denoising = True       # 启用AI降噪
scene.render.resolution_x = 1920        # 分辨率
scene.render.resolution_y = 1080

材质系统

# 皮肤材质节点
material = bpy.data.materials.new("Skin")
material.use_nodes = True
nodes = material.node_tree.nodes

# 基础色 + 次表面散射
bsdf = nodes["Principled BSDF"]
bsdf.inputs["Base Color"].default_value = (0.95, 0.82, 0.75, 1.0)
bsdf.inputs["Subsurface"].default_value = 0.1
bsdf.inputs["Roughness"].default_value = 0.8

光照系统

# 多光源设置
main_light = bpy.data.lights.new("MainLight", "SUN")
main_light.energy = 5.0
main_light.angle = 0.1

fill_light = bpy.data.lights.new("FillLight", "AREA")  
fill_light.energy = 2.0
fill_light.size = 2.0

# 环境光
world = bpy.data.worlds["World"]
world.use_nodes = True
world.node_tree.nodes["Background"].inputs[1].default_value = 0.3

相机控制

# 智能相机定位
def setup_camera(mesh_bounds):
    center = (mesh_bounds.min + mesh_bounds.max) / 2
    size = mesh_bounds.max - mesh_bounds.min
    distance = max(size) * 2.5
    
    camera.location = center + [distance, 0, distance/2]
    camera.rotation_euler = [math.radians(60), 0, math.radians(45)]

性能优化

GPU内存管理

# 自适应批处理
def adaptive_batch_size(available_memory, mesh_complexity):
    if available_memory > 8000:  # >8GB
        return min(50, total_frames)
    elif available_memory > 4000:  # >4GB  
        return min(20, total_frames)
    else:
        return min(10, total_frames)

渲染优化

# 降质量设置(快速预览)
if res == "low":
    scene.render.resolution_x = 512
    scene.render.resolution_y = 512
    scene.cycles.samples = 64
    
# 高质量设置(最终输出)
elif res == "high":
    scene.render.resolution_x = 1920
    scene.render.resolution_y = 1080  
    scene.cycles.samples = 256

故障排除

常见问题及解决方案

1. SMPL拟合失败

症状:

AttributeError: module 'inspect' has no attribute 'getargspec'
RuntimeError: mat1 and mat2 shapes cannot be multiplied

解决方案:

# 检查Python版本兼容性
python --version  # 确保3.10-3.13

# 更新smplx和相关依赖
pip install --upgrade smplx torch

# 检查SMPL模型文件
ls -la deps/smpl_models/smpl/SMPL_NEUTRAL.pkl

2. Blender参数解析错误

症状:

blender: error: unrecognized arguments: --pkl

解决方案:

# 确保使用正确的路径结构
cd /data/wenshuo/project/jhz/MotionLCM
/data/wenshuo/blender-2.93/blender --background --python smpl_renderer_standalone/render.py -- --pkl smpl_renderer_standalone/output/xxx.pkl --mode video

# 检查mld.launch.blender模块导入
python -c "import smpl_renderer_standalone.mld.launch.blender; print('✅ Import successful')"

3. GPU不被识别

症状:

⚠️ No supported GPU backend found, falling back to CPU

解决方案:

# 检查CUDA安装
nvidia-smi
nvcc --version

# 检查Blender GPU设置
/data/wenshuo/blender-2.93/blender --background --python -c "
import bpy
prefs = bpy.context.preferences.addons['cycles'].preferences
prefs.get_devices()
for device in prefs.devices:
    print(f'Device: {device.name}, Type: {device.type}, Use: {device.use}')
"

4. 内存不足

症状:

RuntimeError: CUDA out of memory

解决方案:

# 减少批处理大小
export PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:512

# 使用低分辨率渲染
--res low

# 减少帧数
--num 4  # 序列模式

5. 视频合成失败

症状:

ModuleNotFoundError: No module named 'moviepy'

解决方案:

# 安装视频处理依赖
pip install moviepy opencv-python

# 或使用系统ffmpeg
sudo apt install ffmpeg  # Ubuntu
brew install ffmpeg      # macOS

# 手动合成视频
ffmpeg -framerate 20 -i output/xxx_frames/frame_%04d.png -c:v libx264 -pix_fmt yuv420p output/xxx.mp4

性能基准测试

硬件配置示例

配置 SMPL拟合时间 matplotlib渲染 Blender渲染
RTX 4090 + 32GB RAM 30秒/80帧 45秒/80帧 3-5分钟/80帧
RTX 3080 + 16GB RAM 45秒/80帧 60秒/80帧 5-8分钟/80帧
CPU Only (32核) 5分钟/80帧 90秒/80帧 20-30分钟/80帧

质量对比

渲染方式 分辨率 质量评分 适用场景
matplotlib 800x600 ⭐⭐⭐ 快速预览、批量处理
Blender低质量 512x512 ⭐⭐⭐⭐ 中等质量预览
Blender高质量 1920x1080 ⭐⭐⭐⭐⭐ 最终输出、展示用

扩展开发

自定义材质

# 在mld/render/blender/materials.py中添加新材质
def create_metallic_material():
    material = bpy.data.materials.new("Metallic")
    material.use_nodes = True
    bsdf = material.node_tree.nodes["Principled BSDF"]
    bsdf.inputs["Metallic"].default_value = 0.9
    bsdf.inputs["Roughness"].default_value = 0.1
    return material

自定义相机路径

# 添加相机动画
def animate_camera(camera, frames):
    for frame in range(frames):
        angle = 2 * math.pi * frame / frames
        camera.location.x = 5 * math.cos(angle)
        camera.location.y = 5 * math.sin(angle)
        camera.keyframe_insert(data_path="location", frame=frame)

批量处理脚本

#!/bin/bash
# batch_render.sh - 批量处理多个文件

for file in output/*.pkl; do
    if [[ $file == *"_mesh.pkl" ]]; then
        echo "Rendering $file..."
        /data/wenshuo/blender-2.93/blender --background --python smpl_renderer_standalone/render.py -- --pkl smpl_renderer_standalone/$file --mode video --fps 20
    fi
done

开发信息

技术栈

  • 核心算法: SMPLify3D(SMPL姿态优化)
  • 渲染引擎: matplotlib + Blender Cycles
  • GPU加速: CUDA/OPTIX/HIP
  • 数据格式: HumanML3D, FreeSat, SMPL
  • 输出格式: GIF, MP4, PNG, Blender项目

代码结构

# 主要类和函数
class SMPLRenderer:          # SMPL渲染基类
class BlenderRenderer:       # Blender专用渲染器  
class MatplotlibRenderer:    # Matplotlib渲染器

def fit_smpl(joints):        # SMPL拟合主函数
def render_sequence():       # 序列渲染
def render_video():          # 视频渲染
def setup_scene():           # Blender场景设置

贡献指南

  1. Fork项目并创建功能分支
  2. 添加测试用例 - 确保新功能正常工作
  3. 更新文档 - 包括README和代码注释
  4. 性能测试 - 验证不会影响渲染速度
  5. 提交Pull Request

许可证

遵循原MotionLCM项目许可证。SMPL模型使用需要遵循其官方许可协议。

致谢

  • SMPL模型: Max Planck Institute for Intelligent Systems
  • SMPLify算法: Black et al.
  • Blender: Blender Foundation
  • 原项目: MotionLCM team

更新日志

v2.1.0 (2024年12月)

  • ✨ 新增:Blender渲染自动保存.blend文件功能
  • ✨ 新增:智能跳过策略,避免重复渲染
  • 🐛 修复:修正了.blend文件路径命名问题
  • 📝 更新:完善了文档和使用说明

v2.0.0 (2024年12月)

  • 🚀 初始版本发布
  • ✨ 支持HumanML3D和FreeSat数据格式
  • ✨ 实现matplotlib和Blender双渲染引擎
  • ✨ GPU加速支持

更新日期: 2024年12月22日 版本: 2.1.0 维护者: SMPL Renderer Team

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages