The goal of this repo (in the far future) is to provide a simple, lightweight, and easy-to-use library for working with virtual humans in PyTorch as existing libraries/repositories were either not maintained, too complicated or too sparse in their features.
For now, this repo is just a playground for me to experiment with different ideas and features. It is not close to being a library just yet.
- Currently, the library utilises
pytorch3d
andtrimesh
for mesh representations andpyrender
for rendering. trimesh
meshes andpyrender
are used for rendering and visualization until I check if I can do this withpytorch3d
in a performant and beautiful way.
For now, this is only tested and developed using uv
and an M1 Mac. I have no idea if it will work with other platforms or using other package managers to set up the environment.
After installing uv
(can be achieved with brew install uv in mac
) run the following commands:
uv python install 3.11
uv sync
If you also want to run the notebook demo, use:
uv sync --group demo
- Add meshes rendering tools
- Add SMPL-family body models
- Fix bug where running
.to(...)
,.clone()
and everything else copy-related for aTensorDict
subclass, returns aTensorDict
object instead of the original subclass. (tracking issue: pytorch/tensordict#1184) - Add comments and docstrings
- Fix bug in tensordict where
bool
non-tensor data are transformed to 0-dim tensors, which prevents setting the batch size (tracking issue: pytorch/tensordict#1199) - Test SMPL-family body models
- tiny types tests
- Benchmark the difference of using
contiguous
tensors (e.g. repeat instead of expand) vsnon-contiguous
. Currently, we use expand in allLimitedAttrTensorDictWithDefaults
objects for the default values, and also inBaseParametricModel
forward to repeat class variables in each batch. In general, operations withcontiguous
tensors are faster (and from some isolated test, can be more than 2x faster or not faster at all). However, I need to fully this with the usual tensor dimensions used in this library to see whether I should bother at all. - Add support for pointcloud registration
- rigid alignment
- non-rigid alignment
So, just a disclaimer, I've been playing around with cline (seriously, check it out if you haven't already). I've been using it with Gemini 2.0 Flash (free API and fast, yay) and Llama 3.3 70b from Groq (also free API and double fast, double yay). Writing comments and docstrings this way feels like cheating (in a good way), so yeah, most of those are probably AI-written with lite reviewing from me. Plus, I've been letting it draft some tests to start with. As I get more confident that it works well enough and as the library's documentation gets better, hopefully I'll be doing less and less coding myself.