Я новичок в моделировании и цифровых 3D-аватарах. Я хочу взять пользовательское видео и создать на его основе 3D-модель. Я начал с простого понимания основ SMPL-X, поэтому с помощью следующего кода я пытаюсь понять, как можно изменить позу тела. Насколько я понимаю, SMPL-X использует кинематическую цепь, поэтому вы не можете манипулировать одним суставом тела независимо от другого, но я очень не понимаю, как использовать эту информацию.
import torch
import smplx
import os
import trimesh
from main import MODELS_FOLDER
def setup_modelling(model_folder):
if torch.cuda.is_available():
print("Using CUDA")
device = torch.device("cuda")
else:
device = torch.device("cpu")
# Sets up the SMPLX model
model = smplx.create(
model_path = model_folder,
ext='npz',
model_type = "smplx",
gender = "neutral",
# PCA is Principal Component Analysis
# A way of combining multiple factors into fewer ones whilst maintaining a fair representation of the data
# Not needed in our case as we want more accuracy over the body parts
use_pca = False,
batch_size = 1,
).to(device=device)
print("Model set up successfully")
# shape parameters
betas = torch.zeros([1, 10], device=device)
# 21 * 3, as 21 is no. of hand joints and 3 possible rotation axis - x, y, z
body_pose = torch.zeros([1, 63], device=device)
# 3 possible rotations of the body - x, y, z
global_orient = torch.zeros([1, 3], device=device)
left_hand = torch.zeros([1, 45], device=device)
right_hand = torch.zeros([1, 45], device=device)
# face rotations
expressions = torch.zeros([1, 10], device=device)
lift_angle = 50.0
radians = torch.pi / 180
left_shoulder_rotation = torch.tensor([0.0, 0.0, lift_angle * radians], device=device)
right_shoulder_rotation = torch.tensor([0.0, 0.0, -lift_angle * radians], device=device)
body_pose[0, 48:51] = left_shoulder_rotation
body_pose[0, 51:54] = right_shoulder_rotation
# Creates the output model with the parameters using SMPLX
output_model = model(
betas = betas,
body_pose = body_pose,
global_orient = global_orient,
left_hand_pose = left_hand,
right_hand_pose = right_hand,
expression = expressions
)
Это создает следующую тримешную модель:
Я исследовал всю статью SMPL-X, но до сих пор не понимаю, почему, когда мы редактируем плечевые суставы, правый локоть начинает сгибаться? Это похоже на метод проб и ошибок, что не идеально, поэтому буду очень признателен за любую помощь.
Мне действительно хочется узнать больше о том, как все это работает, поэтому любые ссылки на полезные ресурсы были бы полезны.
Спасибо!
Я новичок в моделировании и цифровых 3D-аватарах. Я хочу взять пользовательское видео и создать на его основе 3D-модель. Я начал с простого понимания основ SMPL-X, поэтому с помощью следующего кода я пытаюсь понять, как можно изменить позу тела. Насколько я понимаю, SMPL-X использует кинематическую цепь, поэтому вы не можете манипулировать одним суставом тела независимо от другого, но я очень не понимаю, как использовать эту информацию. [code]import torch import smplx import os import trimesh from main import MODELS_FOLDER
def setup_modelling(model_folder): if torch.cuda.is_available(): print("Using CUDA") device = torch.device("cuda") else: device = torch.device("cpu") # Sets up the SMPLX model model = smplx.create( model_path = model_folder, ext='npz', model_type = "smplx", gender = "neutral", # PCA is Principal Component Analysis # A way of combining multiple factors into fewer ones whilst maintaining a fair representation of the data # Not needed in our case as we want more accuracy over the body parts use_pca = False, batch_size = 1, ).to(device=device)
print("Model set up successfully")
# shape parameters betas = torch.zeros([1, 10], device=device) # 21 * 3, as 21 is no. of hand joints and 3 possible rotation axis - x, y, z body_pose = torch.zeros([1, 63], device=device) # 3 possible rotations of the body - x, y, z global_orient = torch.zeros([1, 3], device=device) left_hand = torch.zeros([1, 45], device=device) right_hand = torch.zeros([1, 45], device=device) # face rotations expressions = torch.zeros([1, 10], device=device)
# Creates the output model with the parameters using SMPLX output_model = model( betas = betas, body_pose = body_pose, global_orient = global_orient, left_hand_pose = left_hand, right_hand_pose = right_hand, expression = expressions ) [/code] Это создает следующую тримешную модель: [img]https://i.sstatic.net/AkppV48J.png[/img]
Я исследовал всю статью SMPL-X, но до сих пор не понимаю, почему, когда мы редактируем плечевые суставы, правый локоть начинает сгибаться? Это похоже на метод проб и ошибок, что не идеально, поэтому буду очень признателен за любую помощь. Мне действительно хочется узнать больше о том, как все это работает, поэтому любые ссылки на полезные ресурсы были бы полезны. Спасибо!