zirobtc commited on
Commit
bd95c9c
·
verified ·
1 Parent(s): d037635

Upload folder using huggingface_hub

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +11 -35
  2. .gitignore +144 -0
  3. .pre-commit-config.yaml +7 -0
  4. .vscode/extensions.json +1 -0
  5. .vscode/settings.json +9 -0
  6. ATTRIBUTIONS.MD +399 -0
  7. CONTRIBUTING.MD +49 -0
  8. Dockerfile +53 -0
  9. LICENSE +201 -0
  10. MANIFEST.in +6 -0
  11. README.md +359 -0
  12. assets/Anny/SOMA_wrap.obj +0 -0
  13. assets/Anny/base_body.obj +0 -0
  14. assets/GarmentMeasurements/SOMA_wrap.obj +0 -0
  15. assets/GarmentMeasurements/mean.obj +0 -0
  16. assets/GarmentMeasurements/point.npz +3 -0
  17. assets/MHR/SOMA_wrap_lod1.obj +0 -0
  18. assets/MHR/base_body_lod1.obj +0 -0
  19. assets/MHR/base_body_lod6.obj +1783 -0
  20. assets/MHR/mhr_model_lod1.pt +3 -0
  21. assets/MHR/mhr_model_lod6.pt +3 -0
  22. assets/SMPL/SOMA_wrap.obj +0 -0
  23. assets/SMPL/base_body.obj +0 -0
  24. assets/SMPL/smpl_anim.npy +3 -0
  25. assets/SMPLX/SOMA_wrap.obj +0 -0
  26. assets/SMPLX/base_body.obj +0 -0
  27. assets/SOMA_neutral.npz +3 -0
  28. assets/correctives_model.pt +3 -0
  29. assets/example_animation.npy +3 -0
  30. assets/images/banner.png +0 -0
  31. assets/images/hand-left-in-action.gif +0 -0
  32. assets/images/hand-right-in-action.gif +3 -0
  33. assets/images/mhr2soma.gif +3 -0
  34. assets/images/smpl2soma.gif +3 -0
  35. assets/images/soma-in-action.gif +3 -0
  36. assets/images/soma_correctives.gif +3 -0
  37. docs/BIAS.md +7 -0
  38. docs/EXPLAINABILITY.md +13 -0
  39. docs/PRIVACY.md +16 -0
  40. docs/SAFETY_and_SECURITY.md +9 -0
  41. docs/model_card.md +152 -0
  42. out/omomo_sub1_clothesstand_000_soma.npz +3 -0
  43. out/omomo_sub1_clothesstand_000_soma_smoke.npz +3 -0
  44. out/smplx2soma_smoke.npz +3 -0
  45. out/soma2smpl_betafit_smoke.npz +3 -0
  46. out/soma2smpl_cached_beta_smoke.npz +3 -0
  47. out/soma2smpl_neutral_smoke.npz +3 -0
  48. out/soma2smpl_smoke.npz +3 -0
  49. out/soma2smpl_smplx2soma_beta_smoke.npz +3 -0
  50. py_soma_x.egg-info/PKG-INFO +404 -0
.gitattributes CHANGED
@@ -1,35 +1,11 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
- *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
- *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz filter=lfs diff=lfs merge=lfs -text
33
- *.zip filter=lfs diff=lfs merge=lfs -text
34
- *.zst filter=lfs diff=lfs merge=lfs -text
35
- *tfevents* filter=lfs diff=lfs merge=lfs -text
 
1
+ assets/** filter=lfs diff=lfs merge=lfs -text
2
+ *.md -filter text
3
+ *.txt -filter text
4
+ out/omomo_sub1_clothesstand_000_soma.npz filter=lfs diff=lfs merge=lfs -text
5
+ out/omomo_sub1_clothesstand_000_soma_smoke.npz filter=lfs diff=lfs merge=lfs -text
6
+ out/smplx2soma_smoke.npz filter=lfs diff=lfs merge=lfs -text
7
+ out/soma2smpl_betafit_smoke.npz filter=lfs diff=lfs merge=lfs -text
8
+ out/soma2smpl_cached_beta_smoke.npz filter=lfs diff=lfs merge=lfs -text
9
+ out/soma2smpl_neutral_smoke.npz filter=lfs diff=lfs merge=lfs -text
10
+ out/soma2smpl_smoke.npz filter=lfs diff=lfs merge=lfs -text
11
+ out/soma2smpl_smplx2soma_beta_smoke.npz filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
.gitignore ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py,cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ target/
76
+
77
+ # Jupyter Notebook
78
+ .ipynb_checkpoints
79
+
80
+ # IPython
81
+ profile_default/
82
+ ipython_config.py
83
+
84
+ # pyenv
85
+ .python-version
86
+
87
+ # pipenv
88
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
89
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
90
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
91
+ # install all needed dependencies.
92
+ #Pipfile.lock
93
+
94
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow
95
+ __pypackages__/
96
+
97
+ # Celery stuff
98
+ celerybeat-schedule
99
+ celerybeat.pid
100
+
101
+ # SageMath parsed files
102
+ *.sage.py
103
+
104
+ # Environments
105
+ .env
106
+ .venv
107
+ env/
108
+ venv/
109
+ ENV/
110
+ env.bak/
111
+ venv.bak/
112
+
113
+ # Spyder project settings
114
+ .spyderproject
115
+ .spyproject
116
+
117
+ # Rope project settings
118
+ .ropeproject
119
+
120
+ # mkdocs documentation
121
+ /site
122
+
123
+ # mypy
124
+ .mypy_cache/
125
+ .dmypy.json
126
+ dmypy.json
127
+
128
+ # Pyre type checker
129
+ .pyre/
130
+
131
+ # Editors
132
+ .idea/
133
+ .vscode/*
134
+ !.vscode/extensions.json
135
+ !.vscode/settings.json
136
+ *.swp
137
+ *.swo
138
+
139
+ # Project specific
140
+ out/
141
+ assets/SMPL/SMPL_NEUTRAL.pkl
142
+ assets/nova-in-action.mp4
143
+ assets/SMPLX/SMPLX_NEUTRAL.npz
144
+ assets/SMPLX/SMPLX_NEUTRAL.pkl
.pre-commit-config.yaml ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ rev: v0.9.7
4
+ hooks:
5
+ - id: ruff
6
+ args: [--fix, --exit-non-zero-on-fix]
7
+ - id: ruff-format
.vscode/extensions.json ADDED
@@ -0,0 +1 @@
 
 
1
+ {"recommendations":["charliermarsh.ruff","ms-python.python"]}
.vscode/settings.json ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "[python]": {
3
+ "editor.defaultFormatter": "charliermarsh.ruff",
4
+ "editor.codeActionsOnSave": {
5
+ "source.fixAll.ruff": "explicit",
6
+ "source.organizeImports.ruff": "explicit"
7
+ }
8
+ }
9
+ }
ATTRIBUTIONS.MD ADDED
@@ -0,0 +1,399 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Anny, Copyright (C) 2025 NAVER Corporation. All Rights Reserved.
2
+
3
+ The files within this subdirectory are licensed under the Apache License,
4
+ Version 2.0 (the "License"); you may not use these files except in compliance
5
+ with the License.
6
+
7
+ A copy of the terms of the license are reproduced below. You may also obtain
8
+ a copy of the License at:
9
+
10
+ http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+ Unless required by applicable law or agreed to in writing, software
13
+ distributed under the License is distributed on an "AS IS" BASIS,
14
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ See the License for the specific language governing permissions and
16
+ limitations under the License.
17
+
18
+ Apache License
19
+ Version 2.0, January 2004
20
+ http://www.apache.org/licenses/
21
+
22
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
23
+
24
+ 1. Definitions.
25
+
26
+ "License" shall mean the terms and conditions for use, reproduction,
27
+ and distribution as defined by Sections 1 through 9 of this document.
28
+
29
+ "Licensor" shall mean the copyright owner or entity authorized by
30
+ the copyright owner that is granting the License.
31
+
32
+ "Legal Entity" shall mean the union of the acting entity and all
33
+ other entities that control, are controlled by, or are under common
34
+ control with that entity. For the purposes of this definition,
35
+ "control" means (i) the power, direct or indirect, to cause the
36
+ direction or management of such entity, whether by contract or
37
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
38
+ outstanding shares, or (iii) beneficial ownership of such entity.
39
+
40
+ "You" (or "Your") shall mean an individual or Legal Entity
41
+ exercising permissions granted by this License.
42
+
43
+ "Source" form shall mean the preferred form for making modifications,
44
+ including but not limited to software source code, documentation
45
+ source, and configuration files.
46
+
47
+ "Object" form shall mean any form resulting from mechanical
48
+ transformation or translation of a Source form, including but
49
+ not limited to compiled object code, generated documentation,
50
+ and conversions to other media types.
51
+
52
+ "Work" shall mean the work of authorship, whether in Source or
53
+ Object form, made available under the License, as indicated by a
54
+ copyright notice that is included in or attached to the work
55
+ (an example is provided in the Appendix below).
56
+
57
+ "Derivative Works" shall mean any work, whether in Source or Object
58
+ form, that is based on (or derived from) the Work and for which the
59
+ editorial revisions, annotations, elaborations, or other modifications
60
+ represent, as a whole, an original work of authorship. For the purposes
61
+ of this License, Derivative Works shall not include works that remain
62
+ separable from, or merely link (or bind by name) to the interfaces of,
63
+ the Work and Derivative Works thereof.
64
+
65
+ "Contribution" shall mean any work of authorship, including
66
+ the original version of the Work and any modifications or additions
67
+ to that Work or Derivative Works thereof, that is intentionally
68
+ submitted to Licensor for inclusion in the Work by the copyright owner
69
+ or by an individual or Legal Entity authorized to submit on behalf of
70
+ the copyright owner. For the purposes of this definition, "submitted"
71
+ means any form of electronic, verbal, or written communication sent
72
+ to the Licensor or its representatives, including but not limited to
73
+ communication on electronic mailing lists, source code control systems,
74
+ and issue tracking systems that are managed by, or on behalf of, the
75
+ Licensor for the purpose of discussing and improving the Work, but
76
+ excluding communication that is conspicuously marked or otherwise
77
+ designated in writing by the copyright owner as "Not a Contribution."
78
+
79
+ "Contributor" shall mean Licensor and any individual or Legal Entity
80
+ on behalf of whom a Contribution has been received by Licensor and
81
+ subsequently incorporated within the Work.
82
+
83
+ 2. Grant of Copyright License. Subject to the terms and conditions of
84
+ this License, each Contributor hereby grants to You a perpetual,
85
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
86
+ copyright license to reproduce, prepare Derivative Works of,
87
+ publicly display, publicly perform, sublicense, and distribute the
88
+ Work and such Derivative Works in Source or Object form.
89
+
90
+ 3. Grant of Patent License. Subject to the terms and conditions of
91
+ this License, each Contributor hereby grants to You a perpetual,
92
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
93
+ (except as stated in this section) patent license to make, have made,
94
+ use, offer to sell, sell, import, and otherwise transfer the Work,
95
+ where such license applies only to those patent claims licensable
96
+ by such Contributor that are necessarily infringed by their
97
+ Contribution(s) alone or by combination of their Contribution(s)
98
+ with the Work to which such Contribution(s) was submitted. If You
99
+ institute patent litigation against any entity (including a
100
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
101
+ or a Contribution incorporated within the Work constitutes direct
102
+ or contributory patent infringement, then any patent licenses
103
+ granted to You under this License for that Work shall terminate
104
+ as of the date such litigation is filed.
105
+
106
+ 4. Redistribution. You may reproduce and distribute copies of the
107
+ Work or Derivative Works thereof in any medium, with or without
108
+ modifications, and in Source or Object form, provided that You
109
+ meet the following conditions:
110
+
111
+ (a) You must give any other recipients of the Work or
112
+ Derivative Works a copy of this License; and
113
+
114
+ (b) You must cause any modified files to carry prominent notices
115
+ stating that You changed the files; and
116
+
117
+ (c) You must retain, in the Source form of any Derivative Works
118
+ that You distribute, all copyright, patent, trademark, and
119
+ attribution notices from the Source form of the Work,
120
+ excluding those notices that do not pertain to any part of
121
+ the Derivative Works; and
122
+
123
+ (d) If the Work includes a "NOTICE" text file as part of its
124
+ distribution, then any Derivative Works that You distribute must
125
+ include a readable copy of the attribution notices contained
126
+ within such NOTICE file, excluding those notices that do not
127
+ pertain to any part of the Derivative Works, in at least one
128
+ of the following places: within a NOTICE text file distributed
129
+ as part of the Derivative Works; within the Source form or
130
+ documentation, if provided along with the Derivative Works; or,
131
+ within a display generated by the Derivative Works, if and
132
+ wherever such third-party notices normally appear. The contents
133
+ of the NOTICE file are for informational purposes only and
134
+ do not modify the License. You may add Your own attribution
135
+ notices within Derivative Works that You distribute, alongside
136
+ or as an addendum to the NOTICE text from the Work, provided
137
+ that such additional attribution notices cannot be construed
138
+ as modifying the License.
139
+
140
+ You may add Your own copyright statement to Your modifications and
141
+ may provide additional or different license terms and conditions
142
+ for use, reproduction, or distribution of Your modifications, or
143
+ for any such Derivative Works as a whole, provided Your use,
144
+ reproduction, and distribution of the Work otherwise complies with
145
+ the conditions stated in this License.
146
+
147
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
148
+ any Contribution intentionally submitted for inclusion in the Work
149
+ by You to the Licensor shall be under the terms and conditions of
150
+ this License, without any additional terms or conditions.
151
+ Notwithstanding the above, nothing herein shall supersede or modify
152
+ the terms of any separate license agreement you may have executed
153
+ with Licensor regarding such Contributions.
154
+
155
+ 6. Trademarks. This License does not grant permission to use the trade
156
+ names, trademarks, service marks, or product names of the Licensor,
157
+ except as required for reasonable and customary use in describing the
158
+ origin of the Work and reproducing the content of the NOTICE file.
159
+
160
+ 7. Disclaimer of Warranty. Unless required by applicable law or
161
+ agreed to in writing, Licensor provides the Work (and each
162
+ Contributor provides its Contributions) on an "AS IS" BASIS,
163
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
164
+ implied, including, without limitation, any warranties or conditions
165
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
166
+ PARTICULAR PURPOSE. You are solely responsible for determining the
167
+ appropriateness of using or redistributing the Work and assume any
168
+ risks associated with Your exercise of permissions under this License.
169
+
170
+ 8. Limitation of Liability. In no event and under no legal theory,
171
+ whether in tort (including negligence), contract, or otherwise,
172
+ unless required by applicable law (such as deliberate and grossly
173
+ negligent acts) or agreed to in writing, shall any Contributor be
174
+ liable to You for damages, including any direct, indirect, special,
175
+ incidental, or consequential damages of any character arising as a
176
+ result of this License or out of the use or inability to use the
177
+ Work (including but not limited to damages for loss of goodwill,
178
+ work stoppage, computer failure or malfunction, or any and all
179
+ other commercial damages or losses), even if such Contributor
180
+ has been advised of the possibility of such damages.
181
+
182
+ 9. Accepting Warranty or Additional Liability. While redistributing
183
+ the Work or Derivative Works thereof, You may choose to offer,
184
+ and charge a fee for, acceptance of support, warranty, indemnity,
185
+ or other liability obligations and/or rights consistent with this
186
+ License. However, in accepting such obligations, You may act only
187
+ on Your own behalf and on Your sole responsibility, not on behalf
188
+ of any other Contributor, and only if You agree to indemnify,
189
+ defend, and hold each Contributor harmless for any liability
190
+ incurred by, or claims asserted against, such Contributor by reason
191
+ of your accepting any such warranty or additional liability.
192
+
193
+ END OF TERMS AND CONDITIONS
194
+
195
+
196
+
197
+ MHR Apache License
198
+ Version 2.0, January 2004
199
+ http://www.apache.org/licenses/
200
+
201
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
202
+
203
+ 1. Definitions.
204
+
205
+ "License" shall mean the terms and conditions for use, reproduction,
206
+ and distribution as defined by Sections 1 through 9 of this document.
207
+
208
+ "Licensor" shall mean the copyright owner or entity authorized by
209
+ the copyright owner that is granting the License.
210
+
211
+ "Legal Entity" shall mean the union of the acting entity and all
212
+ other entities that control, are controlled by, or are under common
213
+ control with that entity. For the purposes of this definition,
214
+ "control" means (i) the power, direct or indirect, to cause the
215
+ direction or management of such entity, whether by contract or
216
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
217
+ outstanding shares, or (iii) beneficial ownership of such entity.
218
+
219
+ "You" (or "Your") shall mean an individual or Legal Entity
220
+ exercising permissions granted by this License.
221
+
222
+ "Source" form shall mean the preferred form for making modifications,
223
+ including but not limited to software source code, documentation
224
+ source, and configuration files.
225
+
226
+ "Object" form shall mean any form resulting from mechanical
227
+ transformation or translation of a Source form, including but
228
+ not limited to compiled object code, generated documentation,
229
+ and conversions to other media types.
230
+
231
+ "Work" shall mean the work of authorship, whether in Source or
232
+ Object form, made available under the License, as indicated by a
233
+ copyright notice that is included in or attached to the work
234
+ (an example is provided in the Appendix below).
235
+
236
+ "Derivative Works" shall mean any work, whether in Source or Object
237
+ form, that is based on (or derived from) the Work and for which the
238
+ editorial revisions, annotations, elaborations, or other modifications
239
+ represent, as a whole, an original work of authorship. For the purposes
240
+ of this License, Derivative Works shall not include works that remain
241
+ separable from, or merely link (or bind by name) to the interfaces of,
242
+ the Work and Derivative Works thereof.
243
+
244
+ "Contribution" shall mean any work of authorship, including
245
+ the original version of the Work and any modifications or additions
246
+ to that Work or Derivative Works thereof, that is intentionally
247
+ submitted to Licensor for inclusion in the Work by the copyright owner
248
+ or by an individual or Legal Entity authorized to submit on behalf of
249
+ the copyright owner. For the purposes of this definition, "submitted"
250
+ means any form of electronic, verbal, or written communication sent
251
+ to the Licensor or its representatives, including but not limited to
252
+ communication on electronic mailing lists, source code control systems,
253
+ and issue tracking systems that are managed by, or on behalf of, the
254
+ Licensor for the purpose of discussing and improving the Work, but
255
+ excluding communication that is conspicuously marked or otherwise
256
+ designated in writing by the copyright owner as "Not a Contribution."
257
+
258
+ "Contributor" shall mean Licensor and any individual or Legal Entity
259
+ on behalf of whom a Contribution has been received by Licensor and
260
+ subsequently incorporated within the Work.
261
+
262
+ 2. Grant of Copyright License. Subject to the terms and conditions of
263
+ this License, each Contributor hereby grants to You a perpetual,
264
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
265
+ copyright license to reproduce, prepare Derivative Works of,
266
+ publicly display, publicly perform, sublicense, and distribute the
267
+ Work and such Derivative Works in Source or Object form.
268
+
269
+ 3. Grant of Patent License. Subject to the terms and conditions of
270
+ this License, each Contributor hereby grants to You a perpetual,
271
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
272
+ (except as stated in this section) patent license to make, have made,
273
+ use, offer to sell, sell, import, and otherwise transfer the Work,
274
+ where such license applies only to those patent claims licensable
275
+ by such Contributor that are necessarily infringed by their
276
+ Contribution(s) alone or by combination of their Contribution(s)
277
+ with the Work to which such Contribution(s) was submitted. If You
278
+ institute patent litigation against any entity (including a
279
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
280
+ or a Contribution incorporated within the Work constitutes direct
281
+ or contributory patent infringement, then any patent licenses
282
+ granted to You under this License for that Work shall terminate
283
+ as of the date such litigation is filed.
284
+
285
+ 4. Redistribution. You may reproduce and distribute copies of the
286
+ Work or Derivative Works thereof in any medium, with or without
287
+ modifications, and in Source or Object form, provided that You
288
+ meet the following conditions:
289
+
290
+ (a) You must give any other recipients of the Work or
291
+ Derivative Works a copy of this License; and
292
+
293
+ (b) You must cause any modified files to carry prominent notices
294
+ stating that You changed the files; and
295
+
296
+ (c) You must retain, in the Source form of any Derivative Works
297
+ that You distribute, all copyright, patent, trademark, and
298
+ attribution notices from the Source form of the Work,
299
+ excluding those notices that do not pertain to any part of
300
+ the Derivative Works; and
301
+
302
+ (d) If the Work includes a "NOTICE" text file as part of its
303
+ distribution, then any Derivative Works that You distribute must
304
+ include a readable copy of the attribution notices contained
305
+ within such NOTICE file, excluding those notices that do not
306
+ pertain to any part of the Derivative Works, in at least one
307
+ of the following places: within a NOTICE text file distributed
308
+ as part of the Derivative Works; within the Source form or
309
+ documentation, if provided along with the Derivative Works; or,
310
+ within a display generated by the Derivative Works, if and
311
+ wherever such third-party notices normally appear. The contents
312
+ of the NOTICE file are for informational purposes only and
313
+ do not modify the License. You may add Your own attribution
314
+ notices within Derivative Works that You distribute, alongside
315
+ or as an addendum to the NOTICE text from the Work, provided
316
+ that such additional attribution notices cannot be construed
317
+ as modifying the License.
318
+
319
+ You may add Your own copyright statement to Your modifications and
320
+ may provide additional or different license terms and conditions
321
+ for use, reproduction, or distribution of Your modifications, or
322
+ for any such Derivative Works as a whole, provided Your use,
323
+ reproduction, and distribution of the Work otherwise complies with
324
+ the conditions stated in this License.
325
+
326
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
327
+ any Contribution intentionally submitted for inclusion in the Work
328
+ by You to the Licensor shall be under the terms and conditions of
329
+ this License, without any additional terms or conditions.
330
+ Notwithstanding the above, nothing herein shall supersede or modify
331
+ the terms of any separate license agreement you may have executed
332
+ with Licensor regarding such Contributions.
333
+
334
+ 6. Trademarks. This License does not grant permission to use the trade
335
+ names, trademarks, service marks, or product names of the Licensor,
336
+ except as required for reasonable and customary use in describing the
337
+ origin of the Work and reproducing the content of the NOTICE file.
338
+
339
+ 7. Disclaimer of Warranty. Unless required by applicable law or
340
+ agreed to in writing, Licensor provides the Work (and each
341
+ Contributor provides its Contributions) on an "AS IS" BASIS,
342
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
343
+ implied, including, without limitation, any warranties or conditions
344
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
345
+ PARTICULAR PURPOSE. You are solely responsible for determining the
346
+ appropriateness of using or redistributing the Work and assume any
347
+ risks associated with Your exercise of permissions under this License.
348
+
349
+ 8. Limitation of Liability. In no event and under no legal theory,
350
+ whether in tort (including negligence), contract, or otherwise,
351
+ unless required by applicable law (such as deliberate and grossly
352
+ negligent acts) or agreed to in writing, shall any Contributor be
353
+ liable to You for damages, including any direct, indirect, special,
354
+ incidental, or consequential damages of any character arising as a
355
+ result of this License or out of the use or inability to use the
356
+ Work (including but not limited to damages for loss of goodwill,
357
+ work stoppage, computer failure or malfunction, or any and all
358
+ other commercial damages or losses), even if such Contributor
359
+ has been advised of the possibility of such damages.
360
+
361
+ 9. Accepting Warranty or Additional Liability. While redistributing
362
+ the Work or Derivative Works thereof, You may choose to offer,
363
+ and charge a fee for, acceptance of support, warranty, indemnity,
364
+ or other liability obligations and/or rights consistent with this
365
+ License. However, in accepting such obligations, You may act only
366
+ on Your own behalf and on Your sole responsibility, not on behalf
367
+ of any other Contributor, and only if You agree to indemnify,
368
+ defend, and hold each Contributor harmless for any liability
369
+ incurred by, or claims asserted against, such Contributor by reason
370
+ of your accepting any such warranty or additional liability.
371
+
372
+ END OF TERMS AND CONDITIONS
373
+
374
+ APPENDIX: How to apply the Apache License to your work.
375
+
376
+ To apply the Apache License to your work, attach the following
377
+ boilerplate notice, with the fields enclosed by brackets "[]"
378
+ replaced with your own identifying information. (Don't include
379
+ the brackets!) The text should be enclosed in the appropriate
380
+ comment syntax for the file format. We also recommend that a
381
+ file or class name and description of purpose be included on the
382
+ same "printed page" as the copyright notice for easier
383
+ identification within third-party archives.
384
+
385
+ Copyright [yyyy] [name of copyright owner]
386
+
387
+ Licensed under the Apache License, Version 2.0 (the "License");
388
+ you may not use this file except in compliance with the License.
389
+ You may obtain a copy of the License at
390
+
391
+ http://www.apache.org/licenses/LICENSE-2.0
392
+
393
+ Unless required by applicable law or agreed to in writing, software
394
+ distributed under the License is distributed on an "AS IS" BASIS,
395
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
396
+ See the License for the specific language governing permissions and
397
+ limitations under the License.
398
+
399
+
CONTRIBUTING.MD ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # How to Contribute
2
+
3
+ ## Code Reviews
4
+
5
+ All submissions require review. We use GitHub pull requests for this purpose. Consult
6
+ [GitHub Help](https://help.github.com/articles/about-pull-requests/) for more information on using pull requests.
7
+
8
+ ## Signing Your Work
9
+
10
+ * We require that all contributors "sign-off" on their commits. This certifies that the contribution is your original work, or you have rights to submit it under the same license, or a compatible license.
11
+
12
+ * Any contribution which contains commits that are not Signed-Off will not be accepted.
13
+
14
+ * To sign off on a commit you simply use the `--signoff` (or `-s`) option when committing your changes:
15
+ ```bash
16
+ $ git commit -s -m "Add cool feature."
17
+ ```
18
+ This will append the following to your commit message:
19
+ ```
20
+ Signed-off-by: Your Name <your@email.com>
21
+ ```
22
+
23
+ * Full text of the DCO:
24
+
25
+ ```
26
+ Developer Certificate of Origin
27
+ Version 1.1
28
+
29
+ Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
30
+ 1 Letterman Drive
31
+ Suite D4700
32
+ San Francisco, CA, 94129
33
+
34
+ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
35
+ ```
36
+
37
+ ```
38
+ Developer's Certificate of Origin 1.1
39
+
40
+ By making a contribution to this project, I certify that:
41
+
42
+ (a) The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or
43
+
44
+ (b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or
45
+
46
+ (c) The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it.
47
+
48
+ (d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved.
49
+ ```
Dockerfile ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Public image (no NGC login). For NGC: nvcr.io/nvidia/pytorch:24.07-py3
2
+ FROM pytorch/pytorch:2.5.1-cuda12.4-cudnn9-devel
3
+
4
+ # Avoid some interactive prompts + make pip quieter/reproducible-ish
5
+ ENV DEBIAN_FRONTEND=noninteractive \
6
+ PIP_DISABLE_PIP_VERSION_CHECK=1 \
7
+ PYTHONDONTWRITEBYTECODE=1 \
8
+ PYTHONUNBUFFERED=1
9
+
10
+ # Where your code will live inside the container
11
+ WORKDIR /workspace
12
+
13
+ # System deps (EGL/OpenGL + X11/xvfb for pyrender/pyglet in headless Docker)
14
+ RUN apt-get update && apt-get install -y --no-install-recommends \
15
+ git curl ca-certificates \
16
+ cmake build-essential \
17
+ gosu \
18
+ libegl1 libgles2 libgl1-mesa-glx libglvnd0 libglx0 \
19
+ xvfb libx11-6 libxrender1 libxkbcommon0 \
20
+ && rm -rf /var/lib/apt/lists/*
21
+
22
+ # Some base images ship a broken `/usr/local/bin/cmake` shim (from a partial pip install),
23
+ # which shadows `/usr/bin/cmake` and breaks builds that invoke `cmake`
24
+ # Prefer the system cmake.
25
+ RUN rm -f /usr/local/bin/cmake || true
26
+
27
+ # Install Python deps first (better layer caching)
28
+ COPY assets /workspace/assets
29
+ COPY soma /workspace/soma
30
+ COPY tools /workspace/tools
31
+ COPY setup.cfg /workspace/setup.cfg
32
+ COPY setup.py /workspace/setup.py
33
+ COPY README.md /workspace/README.md
34
+ COPY pyproject.toml /workspace/pyproject.toml
35
+
36
+ # chumpy's build assumes 'pip' is in the build env; install it without isolation first
37
+ # chumpy uses inspect.getargspec (removed in Python 3.11); patch before any import
38
+ RUN --mount=type=cache,target=/root/.cache/pip \
39
+ python -m pip install --upgrade pip setuptools wheel \
40
+ && python -m pip install --no-build-isolation chumpy \
41
+ && find /opt/conda/lib/python3.11/site-packages/chumpy -name "*.py" -exec sed -i 's/inspect\.getargspec/inspect.getfullargspec/g' {} \; \
42
+ && python -m pip install .[smpl,anny]
43
+
44
+ RUN python -m pip install pyrender tqdm pyyaml imageio[ffmpeg]
45
+
46
+ # Use the docker-entrypoint script, to allow the docker to run as the actual user instead of root
47
+ COPY tools/docker-entrypoint.sh /usr/local/bin/docker-entrypoint
48
+ RUN chmod +x /usr/local/bin/docker-entrypoint
49
+
50
+ # Default command (change to your entrypoint if you have one)
51
+ ENTRYPOINT ["docker-entrypoint"]
52
+ CMD ["bash"]
53
+
LICENSE ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
MANIFEST.in ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ include LICENSE
2
+ include README.md
3
+ recursive-include soma *.py
4
+ prune assets
5
+ prune tools
6
+ prune tests
README.md ADDED
@@ -0,0 +1,359 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+
3
+ <p align="center">
4
+ <img src="./assets/images/banner.png" alt="Banner" width="100%">
5
+ </p>
6
+
7
+ [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
8
+ [![Technical Report](https://img.shields.io/badge/arXiv-2603.16858-b31b1b.svg)](https://arxiv.org/abs/2603.16858)
9
+
10
+ ## Overview
11
+
12
+ Parametric human body models, including SMPL, SMPL-X, MHR, Anny, and GarmentMeasurements, are central to a wide range of tasks in human reconstruction, animation, and simulation. However, these models are inherently incompatible: each defines its own mesh topology, joint hierarchy, and parameterization, precluding seamless integration. As a result, leveraging complementary strengths across models (such as combining Anny’s age-range control with SMPL-based motion data) necessitates bespoke adapters for every model pair, hindering interoperability and limiting practical applications.
13
+
14
+ We present **SOMA**—a canonical body topology and rig that acts as a universal pivot for all supported parametric human body models. Instead of replacing existing models, **SOMA unifies them** by mapping their diverse rest shapes onto a single, shared representation. This approach allows any supported identity model to be animated with a unified animation pipeline, eliminating the need for custom adapters or model-specific retargeting. With SOMA, you can mix and match identity sources and pose data at inference time without additional engineering. The entire pipeline remains end-to-end differentiable and GPU-accelerated via NVIDIA Warp.
15
+
16
+
17
+ See SOMA in action:
18
+
19
+ <p align="center">
20
+ <img src="assets/images/soma-in-action.gif" alt="SOMA in Action" width="1000"/>
21
+ </p>
22
+
23
+ ## Supported Identity Models
24
+
25
+ SOMA currently supports five distinct identity models, each offering unique capabilities:
26
+
27
+ 1. [MHR](https://github.com/facebookresearch/MHR): The default identity model in SOMA, providing high-fidelity body shape representation.
28
+ 2. [Anny](https://github.com/naver/anny): Particularly well-suited for modeling children, broadening applicability to younger subjects.
29
+ 3. [SMPL-Family](https://smpl.is.tue.mpg.de/): Supports both SMPL and SMPL-X models, enabling interoperability with established standards in the field.
30
+ 4. **SOMA-shape**: A proprietary PCA-based model developed as part of this project, designed to offer SMPL-like functionality with 128 PCA coefficients for identity representation.
31
+ 5. [GarmentMeasurement](https://github.com/mbotsch/GarmentMeasurements): A PCA-based identity model trained on the CAESARS dataset, suitable for specialized use cases involving garment fitting and measurement.
32
+
33
+ We welcome community contributions to extend support for additional identity models.
34
+
35
+ ## Unified Pose Correctives (Beta)
36
+ Thanks to SOMA's unified framework, pose-dependent corrective deformations that mitigate LBS artifacts are seamlessly available for all supported identity models, including those that do not provide correctives themselves (e.g., Anny and GarmentMeasurement).
37
+ <p align="center">
38
+ <img src="assets/images/soma_correctives.gif" alt="SOMA Pose Correctives" width="800"/>
39
+ </p>
40
+
41
+ ## Related projects that already support SOMA
42
+ SOMA is part of a larger effort to enable human animation, robotics, physical AI, and other applications. We also provide the following works with SOMA support:
43
+
44
+ * [GEM](https://github.com/NVlabs/GEM-X) - SOMA-based video pose estimation.
45
+ * [Kimodo](https://github.com/nv-tlabs/kimodo) - SOMA-based controllable text-to-motion generation method for **human(oid)s**.
46
+ * [BONES-SEED Dataset](https://huggingface.co/datasets/bones-studio/seed) - a large scale human(oid) motion capture dataset in SOMA format. Also provides retargeted G1 data.
47
+ * [SOMA Retargeter](https://github.com/NVIDIA/soma-retargeter) - for SOMA to G1 retargeting.
48
+ * [ProtoMotion](https://github.com/NVlabs/ProtoMotions) - simulation and learning framework for training physically simulated digital human(oid)s
49
+ * [GEAR SONIC](https://github.com/NVlabs/GR00T-WholeBodyControl) - a humanoid behavior foundation model. (coming soon)
50
+
51
+ ## Installation
52
+
53
+ ### Install from PyPI
54
+
55
+ ```bash
56
+ pip install py-soma-x
57
+ ```
58
+
59
+ With optional extras:
60
+ ```bash
61
+ pip install "py-soma-x[smpl]" # SMPL/SMPL-X support
62
+ pip install "py-soma-x[anny]" # Anny support
63
+ ```
64
+
65
+ Assets are automatically downloaded from HuggingFace on first use (cached in `~/.cache/huggingface/hub/`).
66
+
67
+ > **Note:** SMPL/SMPL-X requires `chumpy`, which must be installed separately:
68
+ > ```bash
69
+ > pip install --no-build-isolation chumpy
70
+ > ```
71
+ > If that fails, install from source:
72
+ > ```bash
73
+ > pip install --no-build-isolation git+https://github.com/mattloper/chumpy@580566eafc9ac68b2614b64d6f7aaa8
74
+ > ```
75
+ >
76
+ > SMPL/SMPL-X model files (`SMPL_NEUTRAL.pkl`, `SMPLX_NEUTRAL.npz`) require a separate license and must be downloaded from [SMPL](https://smpl.is.tue.mpg.de/) / [SMPL-X](https://smpl-x.is.tue.mpg.de/). Pass the model path explicitly:
77
+ > ```python
78
+ > soma = SOMALayer(
79
+ > identity_model_type="smpl",
80
+ > identity_model_kwargs={"model_path": "/path/to/SMPL_NEUTRAL.pkl"},
81
+ > )
82
+ > ```
83
+
84
+ <details>
85
+
86
+ <summary>Developer installation (clone with Git LFS)</summary>
87
+
88
+ ### Clone with Git LFS (Required for Assets)
89
+ This repository uses Git LFS for large asset files (e.g., assets/Nova_neutral.npz). You must install Git LFS to download the actual data; otherwise, you will encounter file loading errors.
90
+
91
+ 1. Install Git LFS (if not installed):
92
+ ````bash
93
+ git lfs install
94
+ ````
95
+
96
+ 2. Clone and Pull Data:
97
+ ```bash
98
+ git clone https://github.com/NVlabs/SOMA-X.git
99
+ cd SOMA-X
100
+ git lfs pull
101
+ ```
102
+ _(If you already cloned the repo, just run `git lfs pull` to fetch the missing assets.)_
103
+
104
+ ### Prepare Python environment
105
+
106
+ **Linux:**
107
+ ```bash
108
+ pip install uv
109
+ uv venv .venv
110
+ source .venv/bin/activate # or: . .venv/bin/activate
111
+ # Install PyTorch with CUDA — adjust the version (cu124, cu126, cu130, …)
112
+ # to match your GPU and driver. See https://pytorch.org/get-started/locally/
113
+ uv pip install torch --index-url https://download.pytorch.org/whl/cu124
114
+ uv pip install ".[dev]"
115
+ ```
116
+
117
+ **Windows (PowerShell):**
118
+ ```powershell
119
+ pip install uv
120
+ uv venv .venv
121
+ Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser # one-time setup
122
+ .\.venv\Scripts\activate
123
+ # Install PyTorch with CUDA — adjust the version (cu124, cu126, cu130, …)
124
+ # to match your GPU and driver. See https://pytorch.org/get-started/locally/
125
+ uv pip install torch --index-url https://download.pytorch.org/whl/cu124
126
+ uv pip install ".[dev]"
127
+ ```
128
+ Then run tests: `pytest tests/ -v`.
129
+
130
+ ### Optional Dependencies
131
+
132
+ **For SMPL and SMPLX support:**
133
+
134
+ ```bash
135
+ uv pip install ".[smpl]"
136
+ pip install --no-build-isolation chumpy
137
+ ```
138
+ _NOTE: `chumpy` (required by `smplx` at runtime) has a broken PyPI build and must be installed with `--no-build-isolation`. If that fails, install from source: `pip install --no-build-isolation git+https://github.com/mattloper/chumpy@580566eafc9ac68b2614b64d6f7aaa8`_
139
+
140
+ You also need to download `SMPL_NEUTRAL.pkl` or `SMPLX_NEUTRAL.npz` separately:
141
+ 1. Visit the [SMPL](https://smpl.is.tue.mpg.de/) or [SMPLX](https://smpl-x.is.tue.mpg.de/) website.
142
+ 2. Register and download the SMPL (v1.1.0 for Python) or [SMPL-X](https://download.is.tue.mpg.de/download.php?domain=smplx&sfile=smplx_lockedhead_20230207.zip) (with removed head bun) model files.
143
+ 3. Extract and copy `SMPL_NEUTRAL.pkl` to `./assets/SMPL/SMPL_NEUTRAL.pkl` and `SMPLX_NEUTRAL.npz` to `./assets/SMPLX/SMPLX_NEUTRAL.npz`.
144
+
145
+ **Note:** The SMPL models are subject to a separate license and cannot be redistributed with this repository.
146
+
147
+ **For [Anny](https://github.com/naver/anny) support:**
148
+ ```bash
149
+ uv pip install ".[anny]"
150
+ ```
151
+
152
+ **For [GarmentMeasurement](https://github.com/mbotsch/GarmentMeasurements) support:**
153
+ ```bash
154
+ git clone https://github.com/mbotsch/GarmentMeasurements
155
+ python tools/convert_gm_pca_to_npz.py ./GarmentMeasurements/data/pca/point.pca assets/GarmentMeasurements/point.npz
156
+ rm -rf GarmentMeasurements
157
+ ```
158
+ </details>
159
+
160
+
161
+ ## Usage
162
+
163
+ ```python
164
+ import torch
165
+ from soma import SOMALayer
166
+
167
+ # Initialize the layer — assets are auto-downloaded from HuggingFace
168
+ soma = SOMALayer(
169
+ identity_model_type="mhr", # or "soma" "smpl", "smplx", "anny", "garment"
170
+ device="cuda"
171
+ )
172
+
173
+ # Or use a local assets directory
174
+ # soma = SOMALayer(data_root="./assets", identity_model_type="mhr", device="cuda")
175
+
176
+ # Forward pass
177
+ # poses: (B, num_joints, 3)
178
+ # identity: (B, num_coeffs)
179
+ # scale_params: (B, num_scales) - Optional, depending on model type (required for MHR)
180
+ output = soma(poses, identity, scale_params=scale_params)
181
+ vertices = output["vertices"]
182
+ ```
183
+
184
+ ## Running the Demo
185
+
186
+ Install the demo environment (includes pyrender, tqdm, imageio with ffmpeg for video output):
187
+
188
+ ```bash
189
+ uv pip install ".[demo]"
190
+ ```
191
+
192
+ If you want to run all identity models (soma, mhr, anny, smpl, smplx, garment), install the full set and use the same build steps as for tests:
193
+
194
+ ```bash
195
+ uv pip install -e ".[all,demo]"
196
+ pip install --no-build-isolation chumpy
197
+ ```
198
+
199
+ Then run the demo script:
200
+
201
+ ```bash
202
+ # Run all models (default: soma, mhr, anny, smpl, smplx, garment)
203
+ python tools/demo_soma_vis.py --data-root ./assets --output-dir ./out
204
+
205
+ # Run specific models only
206
+ python tools/demo_soma_vis.py --data-root ./assets --output-dir ./out --identity-model-type soma, mhr, smplx
207
+
208
+ # Run a single model
209
+ python tools/demo_soma_vis.py --data-root ./assets --output-dir ./out --identity-model-type anny
210
+
211
+ # Run MHR with random shapes
212
+ python tools/demo_soma_vis.py --data-root ./assets --output-dir ./out --identity-model-type mhr --random-shape
213
+ ```
214
+
215
+ This will generate example animation videos for the selected models in the `out/` directory.
216
+
217
+ **Demo Options:**
218
+ - `--identity-model-type`: Comma-separated list of models to use (options: `soma`, `mhr`, `anny`, `smplx`, `smpl`, `garment`, default: `soma,mhr,anny,smpl,smplx,garment`)
219
+ - `--random-shape`: Generate random body shapes instead of using neutral shapes
220
+ - `--motion-file`: Path to custom motion file (default: `assets/ROM5.npy`)
221
+ - `--image-size`: Render resolution (default: 1920)
222
+ - `--device`: Device to use (default: `cuda:0`)
223
+
224
+ ## Conversion of pose parameters from other models to SOMA
225
+ We provide conversion tools for converting from SMPL and MHR pose parameters to SOMA.
226
+ Both tools use `PoseInversion.fit()`, which supports two complementary solvers — both initialized by a single-pass skeleton transfer fit for fast convergence:
227
+
228
+ - **Analytical** (default): iterative inverse-LBS with Newton-Schulz refinement. Extremely fast (~1200 FPS) with comparable accuracy.
229
+ - **Autograd FK**: 6D rotation optimization by backpropagating FK + LBS. Slow but controllable (e.g. extra weights on extremities).
230
+
231
+ The two can be combined: the analytical solve warm-starts autograd refinement — best of both worlds.
232
+
233
+ ### SMPL to SOMA
234
+
235
+ <img src="assets/images/smpl2soma.gif" alt="SMPL to SOMA conversion" width="400"/>
236
+
237
+ ```bash
238
+ # Convert SMPL animation to SOMA (renders comparison video)
239
+ python -m tools.smpl2soma
240
+
241
+ # Export SOMA poses as .npz
242
+ python -m tools.smpl2soma --output-npz out/smpl_soma.npz
243
+
244
+ # Tune analytical iterations (defaults: --body-iters 2 --full-iters 1)
245
+ python -m tools.smpl2soma --body-iters 3 --full-iters 1 --batch-size 64
246
+
247
+ # Analytical + autograd FK refinement (best accuracy)
248
+ python -m tools.smpl2soma --body-iters 2 --full-iters 1 --autograd-iters 10
249
+ ```
250
+
251
+ **Benchmark** (402 SMPL frames, RTX 5000 Ada):
252
+
253
+ | Method | Speed | Mean | Median | Max |
254
+ |---|---|---|---|---|
255
+ | Analytical (body=2, full=1) — **default** | **1279 FPS** | 0.65 cm | 0.52 cm | 17.8 cm |
256
+ | Autograd FK (10 iters, lr=5e-3) | 199 FPS | 1.04 cm | 0.97 cm | 18.1 cm |
257
+ | Autograd FK (100 iters) | 18 FPS | 0.49 cm | 0.39 cm | 16.8 cm |
258
+
259
+ ### MHR to SOMA
260
+
261
+ <img src="assets/images/mhr2soma.gif" alt="MHR to SOMA conversion" width="400"/>
262
+
263
+ For [SAM 3D Body](https://huggingface.co/datasets/facebook/sam-3d-body-dataset) or similar MHR-format data.
264
+
265
+ ```bash
266
+ # Convert a directory of SAM 3D Body parquet files
267
+ python -m tools.mhr2soma --input path/to/sam_3d_body/data/coco_train
268
+
269
+ # Convert and export as .npz
270
+ python -m tools.mhr2soma --input path/to/parquet_dir --output-npz out/mhr_soma.npz
271
+
272
+ # Tune analytical iterations (defaults: --body-iters 2 --full-iters 1)
273
+ python -m tools.mhr2soma --input path/to/parquet_dir --max-samples 100 --body-iters 3
274
+
275
+ # Analytical + autograd FK refinement (best accuracy)
276
+ python -m tools.mhr2soma --input path/to/parquet_dir --autograd-iters 10
277
+ ```
278
+
279
+ **Benchmark** (200 SAM 3D Body samples, RTX 5000 Ada):
280
+
281
+ | Method | Speed | Mean | Median | Max |
282
+ |---|---|---|---|---|
283
+ | Analytical (body=2, full=1) — **default** | **342 FPS** | 0.61 cm | 0.34 cm | 14.8 cm |
284
+ | Autograd FK (10 iters, lr=5e-3) | 161 FPS | 1.05 cm | 0.76 cm | 13.5 cm |
285
+ | Autograd FK (100 iters) | 16 FPS | 0.48 cm | 0.22 cm | 13.3 cm |
286
+
287
+ > **Note:** The `mhr2soma` tool's end-to-end throughput (~50 samp/s) is dominated by MHR identity model evaluation, not SOMA inversion. The MHR TorchScript model is called twice per sample (once to produce the rest shape, once for posed vertices). The SOMA inversion itself runs at 342 FPS.
288
+
289
+ ### AMASS dataset to SOMA
290
+
291
+ Convert [AMASS](https://amass.is.tue.mpg.de/) motion sequences (SMPL format `.npz` files) to SOMA.
292
+
293
+ > **Prerequisites:** Download the AMASS dataset from [amass.is.tue.mpg.de](https://amass.is.tue.mpg.de/) and place `SMPL_NEUTRAL.pkl` in `assets/SMPL/` (see SMPL installation above).
294
+
295
+ ```bash
296
+ # Single file — converts and renders a comparison video
297
+ python -m tools.convert_amass_to_soma --input path/to/amass_sequence.npz
298
+
299
+ # Single file — export .npz only (skip rendering)
300
+ python -m tools.convert_amass_to_soma --input path/to/amass_sequence.npz --output-npz out/soma.npz --no-render
301
+
302
+ # Batch convert entire dataset (mirrors folder structure)
303
+ python -m tools.convert_amass_to_soma --input-dir /data/amass/ --output-dir out/amass_soma/
304
+
305
+ # Shuffle file order (useful when running multiple workers in parallel)
306
+ python -m tools.convert_amass_to_soma --input-dir /data/amass/ --output-dir out/amass_soma/ --shuffle
307
+
308
+ # Tune analytical iterations
309
+ python -m tools.convert_amass_to_soma --input path/to/seq.npz --body-iters 3 --full-iters 1
310
+
311
+ # Analytical + autograd FK refinement (best accuracy)
312
+ python -m tools.convert_amass_to_soma --input path/to/seq.npz --autograd-iters 10
313
+ ```
314
+
315
+ The output `.npz` files contain:
316
+ - `poses`: `(N, J, 3)` rotation vectors per joint
317
+ - `root_translation`: `(N, 3)` root position in meters
318
+ - `joint_names`: list of SOMA joint names
319
+ - `per_vertex_error`: `(N, V)` reconstruction error per vertex
320
+ - `identity_coeffs` / `scale_params`: identity parameters used
321
+
322
+
323
+ **Benchmark** (A100):
324
+
325
+ | Method | Speed | Mean | Median | Max |
326
+ |---|---|---|---|---|
327
+ | Analytical (body=2, full=1) — **default** | **17393 FPS** | 0.53 cm | 0.32 cm | 8.8 cm |
328
+ | Autograd FK (10 iters, lr=5e-3) | 435 FPS | 0.78 cm | 0.64 cm | 8.8 cm |
329
+
330
+
331
+
332
+
333
+
334
+ ## Citation
335
+ If you use this code in your work, please cite:
336
+
337
+ ```bibtex
338
+ @article{soma2026,
339
+ title={SOMA: Unifying Parametric Human Body Models},
340
+ author={Jun Saito and Jiefeng Li and Michael de Ruyter and Miguel Guerrero and Edy Lim and Ehsan Hassani and Roger Blanco Ribera and Hyejin Moon and Magdalena Dadela and Marco Di Lucca and Qiao Wang and Xueting Li and Jan Kautz and Simon Yuen and Umar Iqbal},
341
+ eprint={2603.16858},
342
+ archivePrefix={arXiv},
343
+ year={2026},
344
+ url={https://arxiv.org/abs/2603.16858},
345
+ }
346
+ ```
347
+
348
+ ## Acknowledgements
349
+ - [SMPL-Body](https://smpl.is.tue.mpg.de/bodylicense.html) was used to create an interpolator between SMPL and SOMA mesh topologies, courtesy of the Max Planck Institute for Intelligent Systems.
350
+ - [MHR](https://github.com/facebookresearch/MHR) was used to learn the pose corrective model.
351
+ - [Anny](https://github.com/naver/anny) for [WARP](https://github.com/NVIDIA/warp)-based sparse linear blend skinning.
352
+ - [GarmentMeasurement](https://github.com/mbotsch/GarmentMeasurements) was used to augment the data in our shape model.
353
+
354
+
355
+ ## License
356
+
357
+ This codebase is licensed under [Apache-2.0](LICENSE).
358
+
359
+ This project will download and install additional third-party open source software projects. Review the license terms of these open source projects before use.
assets/Anny/SOMA_wrap.obj ADDED
The diff for this file is too large to render. See raw diff
 
assets/Anny/base_body.obj ADDED
The diff for this file is too large to render. See raw diff
 
assets/GarmentMeasurements/SOMA_wrap.obj ADDED
The diff for this file is too large to render. See raw diff
 
assets/GarmentMeasurements/mean.obj ADDED
The diff for this file is too large to render. See raw diff
 
assets/GarmentMeasurements/point.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6ae75a1ab7a8ae4f46bac503146976ba59cf918bca8aefe7320a3ed02aa2416a
3
+ size 8626920
assets/MHR/SOMA_wrap_lod1.obj ADDED
The diff for this file is too large to render. See raw diff
 
assets/MHR/base_body_lod1.obj ADDED
The diff for this file is too large to render. See raw diff
 
assets/MHR/base_body_lod6.obj ADDED
@@ -0,0 +1,1783 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # https://github.com/mikedh/trimesh
2
+ v 7.00926542 157.20454407 4.41645241
3
+ v 7.41320992 159.93046570 3.96769547
4
+ v 8.02834129 161.81506348 3.51396084
5
+ v 7.71562672 157.14881897 2.80745554
6
+ v 2.11030126 151.31095886 12.09629726
7
+ v 2.08244991 150.21667480 8.50155163
8
+ v 4.67009115 154.78413391 -0.80085707
9
+ v 1.26834023 158.97560120 14.50586033
10
+ v 5.08444548 169.42932129 -0.96812111
11
+ v 0.73630416 162.67111206 12.77306366
12
+ v 4.38978386 151.81127930 7.02104950
13
+ v 7.42488432 165.76206970 5.89370823
14
+ v 1.28428912 160.66194153 13.17580795
15
+ v 2.58244324 159.34757996 12.63513947
16
+ v 5.12824392 154.77626038 10.57160378
17
+ v 5.28234386 157.85272217 11.22543621
18
+ v 1.93807149 161.97993469 11.87946701
19
+ v 1.63153052 162.19120789 11.83549595
20
+ v 6.00734854 162.74040222 9.80867672
21
+ v 4.77642155 162.19696045 10.99352360
22
+ v 4.40829849 162.57217407 11.66743469
23
+ v 3.07648659 161.69796753 12.12496471
24
+ v 4.62093592 161.95024109 11.15440464
25
+ v 5.81209898 165.44323730 -2.53650331
26
+ v 3.49701285 164.01362610 12.52966499
27
+ v 3.16701603 162.88748169 12.33050060
28
+ v 1.36003184 163.81082153 13.00516319
29
+ v 3.11280966 169.97669983 9.96627903
30
+ v 5.71054411 163.32601929 10.57106400
31
+ v 5.43079376 161.67053223 -2.87125802
32
+ v 1.20193863 156.13609314 13.97113419
33
+ v 2.45243263 155.73193359 13.00902176
34
+ v 2.83656073 155.20169067 12.58699703
35
+ v 2.21061826 154.88403320 13.03202820
36
+ v 1.28727126 154.95089722 13.82441044
37
+ v 5.49733210 168.78497314 8.26215935
38
+ v 4.39457035 165.79716492 11.39317703
39
+ v 8.61304665 160.12678528 0.85173720
40
+ v 8.80191803 162.00326538 1.83837879
41
+ v 4.03664637 152.70640564 10.80151939
42
+ v 6.63973808 158.32962036 8.77689648
43
+ v 2.06216979 162.56201172 11.92606831
44
+ v 6.00563431 154.01350403 5.86400270
45
+ v 3.41539955 171.83744812 3.98621845
46
+ v 6.64694214 162.63639832 8.47797489
47
+ v 8.31393909 158.34347534 1.66540956
48
+ v 0.90657699 155.76998901 13.70701122
49
+ v 2.14602518 155.54119873 12.88399887
50
+ v 2.49527669 155.32948303 12.68269920
51
+ v 6.08448648 164.35888672 9.44290638
52
+ v 2.06042123 165.75898743 12.84942818
53
+ v 1.69611406 158.19329834 13.07868004
54
+ v 7.19837141 159.85931396 2.35688782
55
+ v 7.26350307 156.78773499 3.69919276
56
+ v 4.03413010 151.59210205 -2.67911196
57
+ v 5.13297701 148.05513000 4.37623549
58
+ v 2.65578270 146.21435547 6.00741529
59
+ v 5.99915314 150.13146973 2.00101423
60
+ v 14.35209465 126.69233704 -8.56925392
61
+ v 12.94260311 138.07189941 8.24148369
62
+ v 15.15691566 145.82058716 -6.43584061
63
+ v 6.80274773 136.59588623 11.39419937
64
+ v 16.17856026 146.54795837 -0.04233695
65
+ v 21.64597511 142.46154785 2.46649885
66
+ v 22.46770287 142.53205872 -4.64267445
67
+ v 15.79642391 137.45022583 -10.67056274
68
+ v 8.80438328 148.07191467 -7.13171291
69
+ v 16.77529526 125.29798126 -3.84707928
70
+ v 16.75297737 129.15855408 8.44582748
71
+ v 9.48873997 126.96875000 15.31827259
72
+ v 5.75988293 111.06945038 -9.28915501
73
+ v 11.70995903 110.61968994 -7.97347927
74
+ v 12.35213280 97.66931915 -11.33522415
75
+ v 15.89435101 110.66032410 -3.53993177
76
+ v 17.18901443 98.21879578 -5.21805000
77
+ v 15.53003693 110.58561707 6.93215084
78
+ v 9.51782990 110.30020142 13.98818970
79
+ v 18.02158737 98.28098297 5.98351765
80
+ v 5.52895164 98.07816315 -13.66227531
81
+ v 9.77538681 97.33262634 12.62118530
82
+ v 8.79389763 135.12405396 -12.59514809
83
+ v 12.20609856 146.17858887 1.18389344
84
+ v 20.30633736 133.94830322 3.98550510
85
+ v 19.51426888 130.97050476 -2.16005421
86
+ v 20.04141426 132.08071899 -7.58880663
87
+ v 27.01042938 137.74952698 -3.96306348
88
+ v 25.44848251 136.98837280 2.38623476
89
+ v 19.13416862 85.68416595 6.40200472
90
+ v 19.67422295 84.57188416 -2.90073276
91
+ v 12.35614204 80.94895935 -8.23965645
92
+ v 2.91570807 79.21669006 -5.02264214
93
+ v 1.34856105 79.28565979 4.71136236
94
+ v 9.56175613 83.78540039 12.06651688
95
+ v 53.43836212 113.61102295 14.08658981
96
+ v 56.56444550 109.66576385 12.22203445
97
+ v 56.71775055 110.59195709 13.92386341
98
+ v 55.86066437 111.32291412 16.13799667
99
+ v 54.03722763 111.40134430 17.46838379
100
+ v 52.77238846 108.22270203 14.24533463
101
+ v 56.95050812 105.08840942 13.27689743
102
+ v 57.67414856 106.43202972 12.62006950
103
+ v 58.45194244 107.60689545 13.95723343
104
+ v 58.50717163 108.70809174 15.74811077
105
+ v 57.91786194 109.48098755 17.99660683
106
+ v 56.28570175 109.44392395 19.70902443
107
+ v 57.15665436 105.17353821 15.16427803
108
+ v 51.97931290 107.24462891 20.26030350
109
+ v 51.80212784 108.60663605 20.58830833
110
+ v 57.16942596 105.88970947 16.84202194
111
+ v 53.95196152 107.64468384 21.10037422
112
+ v 56.47528458 106.53314209 18.65262032
113
+ v 59.02365875 103.96133423 14.40133667
114
+ v 59.76410294 105.15591431 15.67636490
115
+ v 60.13077545 106.06590271 17.77570343
116
+ v 59.30287933 106.89019775 19.73707962
117
+ v 58.47375870 107.41496277 21.42365456
118
+ v 58.00305557 106.40937042 21.65460587
119
+ v 59.81988525 105.26615906 18.08451080
120
+ v 59.30020142 104.55081177 16.12774277
121
+ v 58.86619186 105.76465607 20.03188324
122
+ v 61.26793289 103.77033997 19.75878143
123
+ v 61.54691696 105.11570740 20.93947029
124
+ v 60.79926300 104.29452515 21.06893730
125
+ v 63.39978790 103.22711182 22.36280441
126
+ v 62.87060547 102.51445007 22.41769409
127
+ v 63.23643875 102.15755463 21.23368263
128
+ v 64.97113037 101.30489349 22.33739281
129
+ v 65.29236603 101.76620483 22.45171356
130
+ v 64.53121185 101.47343445 22.99083328
131
+ v 64.82241058 101.97389221 23.16209793
132
+ v 60.18143463 105.85148621 22.89770508
133
+ v 59.45738220 104.97747803 22.69704819
134
+ v 60.15821075 104.67700195 21.59041405
135
+ v 61.50219727 104.50748444 24.02244568
136
+ v 60.97847366 103.81912994 24.00730896
137
+ v 61.53809738 103.40454102 22.93847084
138
+ v 62.93658829 102.61989594 24.03377724
139
+ v 63.33475113 103.10246277 24.17765808
140
+ v 62.52485657 102.84911346 24.62942886
141
+ v 62.83255386 103.32019806 24.80877304
142
+ v 62.07540894 104.09508514 18.33690262
143
+ v 61.65749741 102.81876373 17.40263748
144
+ v 61.41816711 103.36863708 18.70213509
145
+ v 63.60524750 102.36944580 19.27437592
146
+ v 63.02436066 101.78334808 19.54994774
147
+ v 63.29376221 101.36763763 18.27829742
148
+ v 64.32782745 100.60639191 19.98765373
149
+ v 64.57946777 100.31163025 19.31448174
150
+ v 65.01018524 100.65655518 19.31124496
151
+ v 64.78156281 100.94828796 20.01457596
152
+ v 60.63112640 103.32516479 16.27017021
153
+ v 61.11441040 103.89047241 15.77290726
154
+ v 60.30725479 102.73503113 15.13293648
155
+ v 62.33058167 102.48978424 16.28523636
156
+ v 61.87433624 101.99139404 16.80174637
157
+ v 61.59629822 101.41039276 15.73289013
158
+ v 62.92537689 101.05876923 17.17155266
159
+ v 63.00787354 100.52017975 16.42248917
160
+ v 63.41054916 100.77281189 16.32980537
161
+ v 63.45371246 101.08361816 16.98884010
162
+ v 51.91946793 107.56434631 22.58216667
163
+ v 52.06513596 106.61811066 22.25206566
164
+ v 53.64317703 107.07995605 22.89180374
165
+ v 52.97402573 106.43168640 25.20468330
166
+ v 52.84350967 107.09536743 25.35215950
167
+ v 51.74992752 106.70360565 24.98805237
168
+ v 51.95806885 106.14369202 24.95171928
169
+ v 62.05607224 104.26313019 23.12063980
170
+ v 60.80032349 105.62020874 21.84347534
171
+ v 63.78952026 103.02033997 21.34733200
172
+ v 61.98308563 104.71447754 19.79071999
173
+ v 63.76453781 102.05308533 18.38547897
174
+ v 62.21471024 103.65002441 17.25656128
175
+ v 62.24136734 102.03684998 15.52336597
176
+ v 61.07238007 103.50170898 14.89530563
177
+ v 59.70740128 104.62441254 14.11748981
178
+ v 53.26042557 108.97376251 20.98348999
179
+ v 53.07146454 108.03335571 22.85389900
180
+ v 55.96366882 107.84006500 20.38205147
181
+ v 53.82003784 110.03176880 19.60144615
182
+ v 54.75553894 111.43631744 10.27265263
183
+ v 37.58525848 122.15583801 -3.15860033
184
+ v 35.33766937 119.17197418 -3.25094461
185
+ v 33.02293015 117.81751251 0.62045729
186
+ v 34.42385864 121.81600952 3.44744921
187
+ v 37.31094742 124.95536804 3.13135076
188
+ v 53.18741989 110.09970856 10.08683777
189
+ v 51.20825577 110.38431549 12.15847588
190
+ v 51.07786942 112.63738251 14.47809792
191
+ v 54.71590805 112.94965363 12.05955601
192
+ v 38.82189178 124.76553345 -0.67842650
193
+ v 51.84812927 107.58807373 18.57875061
194
+ v 51.85197830 108.03208160 16.34364510
195
+ v 54.60863495 107.17626953 15.64114857
196
+ v 54.45499420 107.78453064 20.28181839
197
+ v 51.60578156 109.51104736 18.77284431
198
+ v 54.05800629 106.95270538 17.70573997
199
+ v 51.45625305 110.56800842 15.79239464
200
+ v 52.09320831 109.30036163 13.16573429
201
+ v 54.30587769 108.15345001 11.30984020
202
+ v 15.00088978 7.14629459 -5.54620218
203
+ v 9.03719330 47.50702286 -2.63771057
204
+ v 17.88500786 13.49072647 -2.54369426
205
+ v 14.73390579 47.50540161 0.90244901
206
+ v 20.61874962 12.55002594 -6.89265060
207
+ v 18.72999001 49.17055130 -2.46849298
208
+ v 21.35470772 7.81221914 -6.98164749
209
+ v 19.18989372 12.15617466 -9.35404110
210
+ v 17.53762817 11.84721184 -10.53265381
211
+ v 15.58839226 11.78482437 -9.03133297
212
+ v 19.56419945 6.97279739 -9.74922180
213
+ v 17.66975594 6.52705383 -11.21733475
214
+ v 16.08925629 6.45059776 -9.08887482
215
+ v 18.15110397 9.55401611 -1.58166409
216
+ v 8.76815796 49.08409882 -7.92628336
217
+ v 13.84381676 51.16987610 -10.21704197
218
+ v 18.42738914 50.87158966 -8.04082680
219
+ v 14.98722458 12.19365406 -6.03913069
220
+ v 16.69658089 0.33653906 7.80596924
221
+ v 24.51317596 0.29144299 4.49537039
222
+ v 24.20194244 2.64405346 4.43404484
223
+ v 16.16193962 2.84213448 7.62981892
224
+ v 20.09386444 3.82277584 5.98266697
225
+ v 24.59157562 1.04880416 7.93115950
226
+ v 24.74430084 0.28742486 7.50674534
227
+ v 21.31675339 0.39067560 11.41250801
228
+ v 16.97012520 1.84469330 12.31910133
229
+ v 17.05047607 0.58545154 12.15754128
230
+ v 20.54434967 -0.01465580 5.28890514
231
+ v 21.00399208 1.92971742 11.18031502
232
+ v 21.73746681 0.59838712 -7.31756735
233
+ v 16.11884689 1.15694809 -5.89527798
234
+ v 16.33346367 0.98196977 -9.84180546
235
+ v 18.29343224 0.73253381 -11.43710518
236
+ v 20.76914215 0.79364657 -10.17305946
237
+ v 19.42973900 0.02291853 -6.83368015
238
+ v 32.10017014 131.04632568 -2.38571525
239
+ v 31.01911163 130.60102844 1.93718469
240
+ v 27.65014267 127.51773834 3.50330138
241
+ v 26.16343307 124.26586151 -1.17790401
242
+ v 27.70417976 125.38633728 -5.69719458
243
+ v 30.67440605 128.43276978 -5.88471270
244
+ v 46.42700195 116.35452271 3.41962433
245
+ v 44.31628418 113.81649780 3.38142133
246
+ v 42.81024933 113.25511169 6.62114334
247
+ v 43.24219131 116.41262817 9.25353813
248
+ v 45.34690475 119.01235199 8.68661404
249
+ v 46.87958908 118.93370056 5.79959488
250
+ v 0.00000000 170.48275757 10.60114002
251
+ v 0.00000000 165.67184448 13.08020210
252
+ v 0.00000040 172.58039856 3.61058927
253
+ v 0.00000871 170.55838013 -2.62355232
254
+ v 0.00001620 166.90112305 -5.04047871
255
+ v -0.00000822 162.30085754 -5.32399940
256
+ v 0.00000014 154.81781006 -3.63641596
257
+ v -0.00000362 151.89758301 -4.05541563
258
+ v -0.00002063 147.42192078 -8.22846699
259
+ v -0.00001856 133.96888733 -11.56155682
260
+ v -0.00001171 111.00953674 -8.93142128
261
+ v -0.00000168 98.32096863 -13.39424419
262
+ v -0.00000186 82.23284912 -4.15728188
263
+ v -0.00000179 81.19035339 5.35476017
264
+ v -0.00000064 87.09713745 11.81717682
265
+ v -0.00000435 97.31720734 15.44957733
266
+ v -0.00000953 110.03072357 17.39150238
267
+ v -0.00001127 126.99459076 15.09161568
268
+ v -0.00001095 135.56526184 11.96467113
269
+ v -0.00001510 145.56173706 6.31578255
270
+ v 0.00000257 149.85084534 9.16619968
271
+ v -0.00000007 150.89947510 12.58763409
272
+ v -0.00000007 154.96121216 14.19593048
273
+ v 0.00000016 155.75230408 13.91590786
274
+ v 0.00000067 156.27239990 14.35803509
275
+ v -0.00000035 157.99909973 14.18085766
276
+ v 0.00000725 158.59199524 15.29075909
277
+ v 0.00000004 161.38304138 14.13892555
278
+ v -0.00000000 162.73606873 13.20080280
279
+ v -0.00000002 164.05990601 13.23726082
280
+ v -0.00001090 119.94038391 16.05790901
281
+ v 8.54571724 119.34547424 13.64171982
282
+ v 14.25802517 119.82495880 6.85353088
283
+ v 14.99169731 118.90055847 -2.85887003
284
+ v 12.36296082 119.51426697 -7.18169165
285
+ v 5.95811844 121.57730103 -10.52219963
286
+ v -0.00001504 121.68761444 -9.88596916
287
+ v 5.50891161 65.75942230 -5.87026072
288
+ v 12.11058521 66.51130676 -8.96857834
289
+ v 18.25641251 67.72827911 -4.86445522
290
+ v 18.94192505 68.27494812 2.53187728
291
+ v 10.76150417 68.80754089 8.62218285
292
+ v 4.46946192 66.13342285 1.75856447
293
+ v 10.62260151 31.51332283 -6.18412971
294
+ v 16.19191742 31.97746277 -1.38874865
295
+ v 21.88733101 32.98069763 -5.19421101
296
+ v 20.96317863 33.25065613 -10.47307205
297
+ v 15.67575645 32.83581543 -12.72336483
298
+ v 10.92557526 32.15386200 -9.72300911
299
+ v 17.24796677 140.95716858 4.94616127
300
+ v 54.12169647 107.08302307 12.45810890
301
+ v 55.34896088 106.28337860 14.30641174
302
+ v 24.09582710 135.11126709 -8.42392159
303
+ v 20.60242081 139.35293579 -8.59044361
304
+ v -7.00926447 157.20454407 4.41645241
305
+ v -7.41320992 159.93046570 3.96769547
306
+ v -8.02834129 161.81506348 3.51396060
307
+ v -7.71562672 157.14881897 2.80745554
308
+ v -2.11030126 151.31095886 12.09629726
309
+ v -2.08244562 150.21667480 8.50155258
310
+ v -4.67009020 154.78413391 -0.80085695
311
+ v -1.26834023 158.97560120 14.50586033
312
+ v -5.08444548 169.42932129 -0.96812111
313
+ v -0.73630416 162.67109680 12.77306366
314
+ v -4.38977957 151.81127930 7.02104998
315
+ v -7.42488384 165.76206970 5.89370823
316
+ v -1.28428912 160.66194153 13.17580795
317
+ v -2.58244324 159.34757996 12.63513947
318
+ v -5.12824392 154.77626038 10.57160378
319
+ v -5.28234386 157.85272217 11.22543621
320
+ v -1.93807149 161.97993469 11.87946796
321
+ v -1.63153052 162.19120789 11.83549595
322
+ v -6.00734854 162.74040222 9.80867672
323
+ v -4.77642155 162.19696045 10.99352360
324
+ v -4.40829802 162.57218933 11.66743469
325
+ v -3.07648659 161.69796753 12.12496471
326
+ v -4.62093639 161.95024109 11.15440464
327
+ v -5.81209898 165.44323730 -2.53650331
328
+ v -3.49701285 164.01362610 12.52966499
329
+ v -3.16701603 162.88748169 12.33050060
330
+ v -1.36003196 163.81082153 13.00516415
331
+ v -3.11280966 169.97669983 9.96627903
332
+ v -5.71054411 163.32601929 10.57106400
333
+ v -5.43079472 161.67053223 -2.87125850
334
+ v -1.20193863 156.13609314 13.97113419
335
+ v -2.45243263 155.73193359 13.00902176
336
+ v -2.83656073 155.20169067 12.58699703
337
+ v -2.21061826 154.88403320 13.03202820
338
+ v -1.28727126 154.95089722 13.82441044
339
+ v -5.49733210 168.78497314 8.26215935
340
+ v -4.39457035 165.79716492 11.39317799
341
+ v -8.61304665 160.12678528 0.85173720
342
+ v -8.80191803 162.00326538 1.83837879
343
+ v -4.03664637 152.70640564 10.80151939
344
+ v -6.63973808 158.32962036 8.77689648
345
+ v -2.06216979 162.56201172 11.92606831
346
+ v -6.00563240 154.01350403 5.86400270
347
+ v -3.41539955 171.83744812 3.98621845
348
+ v -6.64694214 162.63641357 8.47797585
349
+ v -8.31393909 158.34347534 1.66540956
350
+ v -0.90657699 155.76997375 13.70701122
351
+ v -2.14602518 155.54118347 12.88399887
352
+ v -2.49527669 155.32948303 12.68269920
353
+ v -6.08448648 164.35888672 9.44290638
354
+ v -2.06042123 165.75898743 12.84942818
355
+ v -1.69611406 158.19328308 13.07868004
356
+ v -7.19837141 159.85931396 2.35688782
357
+ v -7.26350260 156.78773499 3.69919300
358
+ v -4.03413296 151.59210205 -2.67910504
359
+ v -5.13298321 148.05509949 4.37630606
360
+ v -2.65579414 146.21429443 6.00758553
361
+ v -5.99913502 150.13145447 2.00109291
362
+ v -14.35211754 126.69233704 -8.56925392
363
+ v -12.94261265 138.07191467 8.24147987
364
+ v -15.15691948 145.82058716 -6.43584299
365
+ v -6.80276632 136.59588623 11.39419937
366
+ v -16.17856598 146.54797363 -0.04233960
367
+ v -21.64597893 142.46156311 2.46649504
368
+ v -22.46770477 142.53207397 -4.64267540
369
+ v -15.79643345 137.45024109 -10.67056274
370
+ v -8.80440140 148.07192993 -7.13171387
371
+ v -16.77531242 125.29798126 -3.84707785
372
+ v -16.75299454 129.15856934 8.44582844
373
+ v -9.48875904 126.96873474 15.31827259
374
+ v -5.75990629 111.06945038 -9.28915501
375
+ v -11.70998192 110.61968994 -7.97347593
376
+ v -12.35213852 97.66931152 -11.33522797
377
+ v -15.89437485 110.66032410 -3.53992820
378
+ v -17.18901825 98.21878815 -5.21805191
379
+ v -15.53005981 110.58562469 6.93215466
380
+ v -9.51784992 110.30020142 13.98819160
381
+ v -18.02159500 98.28097534 5.98351574
382
+ v -5.52895546 98.07815552 -13.66227722
383
+ v -9.77539539 97.33264160 12.62118435
384
+ v -8.79392624 135.12405396 -12.59514809
385
+ v -12.20610905 146.17858887 1.18389094
386
+ v -20.30633926 133.94830322 3.98550415
387
+ v -19.51426697 130.97052002 -2.16005516
388
+ v -20.04141617 132.08073425 -7.58880663
389
+ v -27.01043320 137.74952698 -3.96306610
390
+ v -25.44848442 136.98834229 2.38623190
391
+ v -19.13417244 85.68415833 6.40199852
392
+ v -19.67422676 84.57188416 -2.90073729
393
+ v -12.35614777 80.94894409 -8.23965931
394
+ v -2.91571140 79.21669006 -5.02264643
395
+ v -1.34856403 79.28565979 4.71135759
396
+ v -9.56176090 83.78540039 12.06650925
397
+ v -53.43836212 113.61102295 14.08658600
398
+ v -56.56445312 109.66576385 12.22203064
399
+ v -56.71775818 110.59195709 13.92386055
400
+ v -55.86067200 111.32291412 16.13799286
401
+ v -54.03723145 111.40134430 17.46838188
402
+ v -52.77239227 108.22270203 14.24533272
403
+ v -56.95050430 105.08840942 13.27689266
404
+ v -57.67414856 106.43203735 12.62006378
405
+ v -58.45195007 107.60690308 13.95722961
406
+ v -58.50717545 108.70809174 15.74810791
407
+ v -57.91786957 109.48098755 17.99660301
408
+ v -56.28570557 109.44392395 19.70902252
409
+ v -57.15665436 105.17353821 15.16427326
410
+ v -51.97931671 107.24463654 20.26029205
411
+ v -51.80213547 108.60665894 20.58829689
412
+ v -57.16942978 105.88970947 16.84201813
413
+ v -53.95196915 107.64469910 21.10036469
414
+ v -56.47529602 106.53314209 18.65261459
415
+ v -59.02365112 103.96132660 14.40132713
416
+ v -59.76409912 105.15591431 15.67636299
417
+ v -60.13078308 106.06590271 17.77570343
418
+ v -59.30288696 106.89020538 19.73708344
419
+ v -58.47377014 107.41497040 21.42366028
420
+ v -58.00306320 106.40937805 21.65461540
421
+ v -59.81988144 105.26615906 18.08451080
422
+ v -59.30019379 104.55081940 16.12773895
423
+ v -58.86619568 105.76464844 20.03188705
424
+ v -61.26793289 103.77032471 19.75877762
425
+ v -61.54691315 105.11568451 20.93946457
426
+ v -60.79926300 104.29450989 21.06893158
427
+ v -63.39978027 103.22709656 22.36280441
428
+ v -62.87060547 102.51444244 22.41769409
429
+ v -63.23642731 102.15754700 21.23368263
430
+ v -64.97111511 101.30489349 22.33740234
431
+ v -65.29235077 101.76621246 22.45172501
432
+ v -64.53119659 101.47343445 22.99084282
433
+ v -64.82239532 101.97389221 23.16210747
434
+ v -60.18144226 105.85150146 22.89771271
435
+ v -59.45738602 104.97747803 22.69705582
436
+ v -60.15821838 104.67701721 21.59042358
437
+ v -61.50219727 104.50749207 24.02244949
438
+ v -60.97847366 103.81913757 24.00731659
439
+ v -61.53810120 103.40454865 22.93848038
440
+ v -62.93659592 102.61992645 24.03378487
441
+ v -63.33475876 103.10249329 24.17766762
442
+ v -62.52485657 102.84914398 24.62943840
443
+ v -62.83256149 103.32022858 24.80878067
444
+ v -62.07541656 104.09510040 18.33690643
445
+ v -61.65750504 102.81877136 17.40263748
446
+ v -61.41817093 103.36864471 18.70213699
447
+ v -63.60525131 102.36945343 19.27437592
448
+ v -63.02436829 101.78337097 19.54994774
449
+ v -63.29376221 101.36764526 18.27829933
450
+ v -64.32781982 100.60641479 19.98766136
451
+ v -64.57946014 100.31164551 19.31448936
452
+ v -65.01018524 100.65657043 19.31125259
453
+ v -64.78155518 100.94829559 20.01458359
454
+ v -60.63113403 103.32515717 16.27017021
455
+ v -61.11442184 103.89045715 15.77290726
456
+ v -60.30725861 102.73501587 15.13293457
457
+ v -62.33058548 102.48979187 16.28524590
458
+ v -61.87434769 101.99141693 16.80175591
459
+ v -61.59630585 101.41040802 15.73289871
460
+ v -62.92539215 101.05879974 17.17155266
461
+ v -63.00788879 100.52019501 16.42248917
462
+ v -63.41056442 100.77282715 16.32980728
463
+ v -63.45372772 101.08363342 16.98884010
464
+ v -51.91946793 107.56435394 22.58216095
465
+ v -52.06513977 106.61812592 22.25205612
466
+ v -53.64318466 107.07996368 22.89179420
467
+ v -52.97402191 106.43167877 25.20467758
468
+ v -52.84350586 107.09536743 25.35215378
469
+ v -51.74992371 106.70360565 24.98804665
470
+ v -51.95806503 106.14369202 24.95171356
471
+ v -62.05607605 104.26313782 23.12064743
472
+ v -60.80033112 105.62022400 21.84348297
473
+ v -63.78951263 103.02030945 21.34733200
474
+ v -61.98308563 104.71447754 19.79071808
475
+ v -63.76454163 102.05309296 18.38548088
476
+ v -62.21471405 103.65003204 17.25656319
477
+ v -62.24137115 102.03686523 15.52337646
478
+ v -61.07238770 103.50170898 14.89530373
479
+ v -59.70740128 104.62440491 14.11748123
480
+ v -53.26043320 108.97377777 20.98347855
481
+ v -53.07146454 108.03335571 22.85388947
482
+ v -55.96367645 107.84006500 20.38204956
483
+ v -53.82003784 110.03176117 19.60144234
484
+ v -54.75554276 111.43630981 10.27264977
485
+ v -37.58526611 122.15582275 -3.15859437
486
+ v -35.33767319 119.17195892 -3.25093889
487
+ v -33.02293015 117.81749725 0.62046176
488
+ v -34.42385864 121.81599426 3.44745135
489
+ v -37.31094742 124.95535278 3.13135433
490
+ v -53.18741989 110.09970856 10.08683586
491
+ v -51.20826340 110.38431549 12.15847206
492
+ v -51.07786942 112.63737488 14.47809505
493
+ v -54.71591568 112.94964600 12.05955410
494
+ v -38.82189560 124.76551819 -0.67842126
495
+ v -51.84812927 107.58807373 18.57874489
496
+ v -51.85197449 108.03208160 16.34364510
497
+ v -54.60864258 107.17626953 15.64114571
498
+ v -54.45500183 107.78453827 20.28181076
499
+ v -51.60578156 109.51104736 18.77284050
500
+ v -54.05800629 106.95270538 17.70573616
501
+ v -51.45625687 110.56800079 15.79239273
502
+ v -52.09321594 109.30036163 13.16573143
503
+ v -54.30588531 108.15345001 11.30983639
504
+ v -15.00088787 7.14629459 -5.54620266
505
+ v -9.03719044 47.50702667 -2.63771009
506
+ v -17.88500595 13.49072647 -2.54369354
507
+ v -14.73390484 47.50539780 0.90244895
508
+ v -20.61874390 12.55002594 -6.89265013
509
+ v -18.72998428 49.17055130 -2.46849108
510
+ v -21.35470390 7.81221867 -6.98164892
511
+ v -19.18988800 12.15617466 -9.35404110
512
+ v -17.53762436 11.84721279 -10.53265285
513
+ v -15.58838844 11.78482533 -9.03133202
514
+ v -19.56419563 6.97279739 -9.74922180
515
+ v -17.66975021 6.52705431 -11.21733570
516
+ v -16.08925247 6.45059824 -9.08887482
517
+ v -18.14980125 9.55443573 -1.58181274
518
+ v -8.76815414 49.08409882 -7.92628193
519
+ v -13.84381485 51.16987610 -10.21704102
520
+ v -18.42738533 50.87158966 -8.04082489
521
+ v -14.98722172 12.19365406 -6.03913021
522
+ v -16.69733810 0.33610976 7.80738068
523
+ v -24.51290894 0.29158637 4.49510717
524
+ v -24.20193672 2.64405012 4.43403816
525
+ v -16.16193008 2.84213257 7.62981415
526
+ v -20.09386063 3.82277298 5.98266077
527
+ v -24.59193802 1.04839909 7.93197060
528
+ v -24.74610519 0.29228172 7.50010204
529
+ v -21.31622505 0.39278227 11.41202736
530
+ v -16.97011757 1.84468806 12.31909752
531
+ v -17.05066490 0.58461207 12.15770721
532
+ v -20.54670143 -0.01325684 5.28845024
533
+ v -21.00398827 1.92971265 11.18030739
534
+ v -21.72554016 0.60355461 -7.31446648
535
+ v -16.11877632 1.15689850 -5.89530230
536
+ v -16.33350563 0.98197663 -9.84186745
537
+ v -18.29346275 0.73248839 -11.43722725
538
+ v -20.77364731 0.79162246 -10.17386246
539
+ v -19.42363739 0.02848397 -6.83465481
540
+ v -32.10017776 131.04632568 -2.38572025
541
+ v -31.01911354 130.60101318 1.93717957
542
+ v -27.65014267 127.51774597 3.50329685
543
+ v -26.16343689 124.26585388 -1.17790878
544
+ v -27.70418739 125.38633728 -5.69719839
545
+ v -30.67441177 128.43276978 -5.88471794
546
+ v -46.42699432 116.35452271 3.41961956
547
+ v -44.31628036 113.81648254 3.38141704
548
+ v -42.81025314 113.25510406 6.62113857
549
+ v -43.24219513 116.41262817 9.25353336
550
+ v -45.34690094 119.01234436 8.68660927
551
+ v -46.87958908 118.93370056 5.79959011
552
+ v -8.54574013 119.34546661 13.64172173
553
+ v -14.25804996 119.82495880 6.85353422
554
+ v -14.99172497 118.90056610 -2.85886645
555
+ v -12.36298943 119.51426697 -7.18168926
556
+ v -5.95814753 121.57730103 -10.52219772
557
+ v -5.50890827 65.75942230 -5.87026930
558
+ v -12.11058235 66.51130676 -8.96858597
559
+ v -18.25640869 67.72826385 -4.86446333
560
+ v -18.94192505 68.27494812 2.53186965
561
+ v -10.76150227 68.80753326 8.62217331
562
+ v -4.46945858 66.13342285 1.75855601
563
+ v -10.62259674 31.51332283 -6.18412733
564
+ v -16.19191360 31.97746277 -1.38874674
565
+ v -21.88732529 32.98069382 -5.19420910
566
+ v -20.96317291 33.25065613 -10.47307014
567
+ v -15.67575073 32.83581543 -12.72336197
568
+ v -10.92556953 32.15386581 -9.72300720
569
+ v -17.24797058 140.95718384 4.94615936
570
+ v -54.12170029 107.08302307 12.45810604
571
+ v -55.34896088 106.28338623 14.30640793
572
+ v -24.09583092 135.11126709 -8.42392254
573
+ v -20.60242081 139.35293579 -8.59044266
574
+ v -3.73078799 156.21582031 12.39494896
575
+ v -4.30724335 154.80300903 11.64877129
576
+ v -3.35732555 153.58679199 11.99589443
577
+ v -1.79249573 152.90124512 13.11233902
578
+ v -0.00000012 152.13348389 13.69438457
579
+ v 1.79249573 152.90124512 13.11233902
580
+ v 3.35732555 153.58679199 11.99589443
581
+ v 4.30724335 154.80302429 11.64877129
582
+ v 3.73078799 156.21582031 12.39494896
583
+ v -4.88916445 157.74873352 -1.75319588
584
+ v 0.00000022 158.05984497 -4.33909178
585
+ v 4.88916540 157.74873352 -1.75319612
586
+ v 6.00088644 153.95372009 2.54716110
587
+ v -6.00088501 153.95372009 2.54716039
588
+ v -7.38238764 167.29005432 2.32785010
589
+ v -5.83504105 169.91587830 5.26228905
590
+ v 7.38238764 167.29003906 2.32785010
591
+ v 5.83504105 169.91587830 5.26228905
592
+ v 9.08172417 143.83937073 5.02291965
593
+ v 4.65760565 141.60554504 7.93151283
594
+ v -0.00001854 140.80328369 8.84359360
595
+ v -4.65763950 141.60554504 7.93151236
596
+ v -9.08174515 143.83937073 5.02291775
597
+ f 49 32 48
598
+ f 32 49 33
599
+ f 33 49 34
600
+ f 34 49 48
601
+ f 23 20 21
602
+ f 17 42 18
603
+ f 98 180 105
604
+ f 98 189 198
605
+ f 586 360 345
606
+ f 351 334 335
607
+ f 334 351 350
608
+ f 350 351 336
609
+ f 336 351 335
610
+ f 325 323 322
611
+ f 319 320 344
612
+ f 400 407 482
613
+ f 400 500 491
614
+ f 58 585 43
615
+ f 2 53 39
616
+ f 2 39 3
617
+ f 249 250 51
618
+ f 249 51 28
619
+ f 27 278 277
620
+ f 27 277 10
621
+ f 36 590 44
622
+ f 36 44 28
623
+ f 29 50 37
624
+ f 29 37 25
625
+ f 25 26 21
626
+ f 25 21 29
627
+ f 7 55 256
628
+ f 7 256 255
629
+ f 11 56 58
630
+ f 11 58 43
631
+ f 29 21 20
632
+ f 29 20 19
633
+ f 8 275 274
634
+ f 8 274 52
635
+ f 56 11 6
636
+ f 56 6 57
637
+ f 6 269 268
638
+ f 6 268 57
639
+ f 273 31 52
640
+ f 273 52 274
641
+ f 52 31 32
642
+ f 52 32 581
643
+ f 579 580 33
644
+ f 579 33 34
645
+ f 581 32 33
646
+ f 581 33 580
647
+ f 578 579 34
648
+ f 578 34 35
649
+ f 577 578 35
650
+ f 577 35 271
651
+ f 19 45 50
652
+ f 19 50 29
653
+ f 9 24 253
654
+ f 9 253 252
655
+ f 3 39 589
656
+ f 3 589 12
657
+ f 253 24 30
658
+ f 253 30 254
659
+ f 38 30 24
660
+ f 38 24 39
661
+ f 36 37 50
662
+ f 36 50 12
663
+ f 50 45 3
664
+ f 50 3 12
665
+ f 7 585 58
666
+ f 7 58 55
667
+ f 1 54 53
668
+ f 1 53 2
669
+ f 4 46 53
670
+ f 4 53 54
671
+ f 26 25 27
672
+ f 26 27 42
673
+ f 51 27 25
674
+ f 51 25 37
675
+ f 28 51 37
676
+ f 28 37 36
677
+ f 41 45 19
678
+ f 41 19 20
679
+ f 40 11 43
680
+ f 40 43 15
681
+ f 11 40 5
682
+ f 11 5 6
683
+ f 6 5 270
684
+ f 6 270 269
685
+ f 12 589 590
686
+ f 12 590 36
687
+ f 252 251 44
688
+ f 252 44 9
689
+ f 251 249 28
690
+ f 251 28 44
691
+ f 16 15 43
692
+ f 16 43 41
693
+ f 7 255 583
694
+ f 7 583 584
695
+ f 7 584 46
696
+ f 7 46 4
697
+ f 277 276 13
698
+ f 277 13 10
699
+ f 47 31 273
700
+ f 47 273 272
701
+ f 31 47 48
702
+ f 31 48 32
703
+ f 34 48 47
704
+ f 34 47 35
705
+ f 271 35 47
706
+ f 271 47 272
707
+ f 278 27 51
708
+ f 278 51 250
709
+ f 13 8 52
710
+ f 13 52 14
711
+ f 8 13 276
712
+ f 8 276 275
713
+ f 38 39 53
714
+ f 38 53 46
715
+ f 18 42 27
716
+ f 18 27 10
717
+ f 18 10 13
718
+ f 18 13 17
719
+ f 14 22 17
720
+ f 14 17 13
721
+ f 22 26 42
722
+ f 22 42 17
723
+ f 22 23 21
724
+ f 22 21 26
725
+ f 593 267 62
726
+ f 593 62 592
727
+ f 592 62 60
728
+ f 592 60 591
729
+ f 55 58 82
730
+ f 55 82 67
731
+ f 256 55 67
732
+ f 256 67 257
733
+ f 63 64 65
734
+ f 63 65 61
735
+ f 61 66 81
736
+ f 61 81 67
737
+ f 81 258 257
738
+ f 81 257 67
739
+ f 61 65 302
740
+ f 61 302 66
741
+ f 65 64 87
742
+ f 65 87 86
743
+ f 86 301 302
744
+ f 86 302 65
745
+ f 267 266 70
746
+ f 267 70 62
747
+ f 60 62 70
748
+ f 60 70 69
749
+ f 259 71 79
750
+ f 259 79 260
751
+ f 72 73 79
752
+ f 72 79 71
753
+ f 74 75 73
754
+ f 74 73 72
755
+ f 78 75 74
756
+ f 78 74 76
757
+ f 76 77 80
758
+ f 76 80 78
759
+ f 265 264 80
760
+ f 265 80 77
761
+ f 75 78 88
762
+ f 75 88 89
763
+ f 75 89 90
764
+ f 75 90 73
765
+ f 73 90 91
766
+ f 73 91 79
767
+ f 78 80 93
768
+ f 78 93 88
769
+ f 279 280 70
770
+ f 279 70 266
771
+ f 280 281 69
772
+ f 280 69 70
773
+ f 282 68 69
774
+ f 282 69 281
775
+ f 68 282 283
776
+ f 68 283 59
777
+ f 283 284 81
778
+ f 283 81 59
779
+ f 285 258 81
780
+ f 285 81 284
781
+ f 262 92 93
782
+ f 262 93 263
783
+ f 92 262 261
784
+ f 92 261 91
785
+ f 261 260 79
786
+ f 261 79 91
787
+ f 93 80 264
788
+ f 93 264 263
789
+ f 298 64 63
790
+ f 298 63 82
791
+ f 69 68 84
792
+ f 69 84 83
793
+ f 85 84 68
794
+ f 85 68 59
795
+ f 59 81 66
796
+ f 59 66 85
797
+ f 67 82 63
798
+ f 67 63 61
799
+ f 190 96 95
800
+ f 190 95 181
801
+ f 187 181 95
802
+ f 187 95 200
803
+ f 189 98 97
804
+ f 189 97 94
805
+ f 190 94 97
806
+ f 190 97 96
807
+ f 96 103 102
808
+ f 96 102 95
809
+ f 102 101 200
810
+ f 102 200 95
811
+ f 105 104 97
812
+ f 105 97 98
813
+ f 97 104 103
814
+ f 97 103 96
815
+ f 180 177 110
816
+ f 180 110 195
817
+ f 196 192 107
818
+ f 196 107 108
819
+ f 163 110 177
820
+ f 163 177 178
821
+ f 162 161 108
822
+ f 162 108 107
823
+ f 163 178 165
824
+ f 163 165 164
825
+ f 165 166 167
826
+ f 165 167 164
827
+ f 114 113 102
828
+ f 114 102 103
829
+ f 106 119 118
830
+ f 106 118 109
831
+ f 118 120 111
832
+ f 118 111 109
833
+ f 122 171 114
834
+ f 122 114 115
835
+ f 141 173 113
836
+ f 141 113 114
837
+ f 113 152 175
838
+ f 113 175 176
839
+ f 115 116 131
840
+ f 115 131 169
841
+ f 112 153 151
842
+ f 112 151 119
843
+ f 143 118 119
844
+ f 143 119 142
845
+ f 120 118 121
846
+ f 120 121 123
847
+ f 132 135 134
848
+ f 132 134 131
849
+ f 169 131 134
850
+ f 169 134 168
851
+ f 133 136 135
852
+ f 133 135 132
853
+ f 168 134 140
854
+ f 168 140 138
855
+ f 136 137 139
856
+ f 136 139 135
857
+ f 134 135 139
858
+ f 134 139 140
859
+ f 138 140 139
860
+ f 138 139 137
861
+ f 122 124 170
862
+ f 122 170 171
863
+ f 123 121 126
864
+ f 123 126 125
865
+ f 130 128 170
866
+ f 130 170 124
867
+ f 129 125 126
868
+ f 129 126 127
869
+ f 124 125 129
870
+ f 124 129 130
871
+ f 130 129 127
872
+ f 130 127 128
873
+ f 141 144 172
874
+ f 141 172 173
875
+ f 143 142 146
876
+ f 143 146 145
877
+ f 150 149 172
878
+ f 150 172 144
879
+ f 147 145 146
880
+ f 147 146 148
881
+ f 144 145 147
882
+ f 144 147 150
883
+ f 148 146 172
884
+ f 148 172 149
885
+ f 150 147 148
886
+ f 150 148 149
887
+ f 154 174 175
888
+ f 154 175 152
889
+ f 156 155 151
890
+ f 156 151 153
891
+ f 154 155 157
892
+ f 154 157 160
893
+ f 157 158 159
894
+ f 157 159 160
895
+ f 168 136 133
896
+ f 168 133 169
897
+ f 122 115 120
898
+ f 122 120 123
899
+ f 170 126 121
900
+ f 170 121 171
901
+ f 141 114 118
902
+ f 141 118 143
903
+ f 152 113 119
904
+ f 152 119 151
905
+ f 101 176 112
906
+ f 101 112 100
907
+ f 299 200 101
908
+ f 299 101 100
909
+ f 137 136 168
910
+ f 137 168 138
911
+ f 127 126 170
912
+ f 127 170 128
913
+ f 177 180 196
914
+ f 177 196 108
915
+ f 178 177 108
916
+ f 178 108 161
917
+ f 178 161 166
918
+ f 178 166 165
919
+ f 171 121 118
920
+ f 171 118 114
921
+ f 173 142 119
922
+ f 173 119 113
923
+ f 153 112 176
924
+ f 153 176 175
925
+ f 169 133 120
926
+ f 169 120 115
927
+ f 117 132 131
928
+ f 117 131 116
929
+ f 133 132 117
930
+ f 133 117 120
931
+ f 103 104 115
932
+ f 103 115 114
933
+ f 105 116 115
934
+ f 105 115 104
935
+ f 100 112 119
936
+ f 100 119 106
937
+ f 300 194 99
938
+ f 300 99 299
939
+ f 156 153 175
940
+ f 156 175 174
941
+ f 158 156 174
942
+ f 158 174 159
943
+ f 151 155 154
944
+ f 151 154 152
945
+ f 146 142 173
946
+ f 146 173 172
947
+ f 141 143 145
948
+ f 141 145 144
949
+ f 123 125 124
950
+ f 123 124 122
951
+ f 166 161 162
952
+ f 166 162 167
953
+ f 244 183 182
954
+ f 244 182 243
955
+ f 244 245 184
956
+ f 244 184 183
957
+ f 246 185 184
958
+ f 246 184 245
959
+ f 247 186 185
960
+ f 247 185 246
961
+ f 247 248 191
962
+ f 247 191 186
963
+ f 248 243 182
964
+ f 248 182 191
965
+ f 242 237 191
966
+ f 242 191 182
967
+ f 191 237 238
968
+ f 191 238 186
969
+ f 186 238 239
970
+ f 186 239 185
971
+ f 185 239 240
972
+ f 185 240 184
973
+ f 241 242 182
974
+ f 241 182 183
975
+ f 163 162 107
976
+ f 163 107 110
977
+ f 164 167 162
978
+ f 164 162 163
979
+ f 105 179 117
980
+ f 105 117 116
981
+ f 180 195 179
982
+ f 180 179 105
983
+ f 194 197 193
984
+ f 194 193 99
985
+ f 193 197 195
986
+ f 193 195 192
987
+ f 240 241 183
988
+ f 240 183 184
989
+ f 197 111 179
990
+ f 197 179 195
991
+ f 300 106 109
992
+ f 300 109 194
993
+ f 111 197 194
994
+ f 111 194 109
995
+ f 180 98 198
996
+ f 180 198 196
997
+ f 192 196 198
998
+ f 192 198 193
999
+ f 198 199 99
1000
+ f 198 99 193
1001
+ f 198 189 188
1002
+ f 198 188 199
1003
+ f 188 187 200
1004
+ f 188 200 199
1005
+ f 156 158 157
1006
+ f 156 157 155
1007
+ f 154 160 159
1008
+ f 154 159 174
1009
+ f 117 179 111
1010
+ f 117 111 120
1011
+ f 176 101 102
1012
+ f 176 102 113
1013
+ f 204 293 294
1014
+ f 204 294 206
1015
+ f 294 295 217
1016
+ f 294 217 206
1017
+ f 215 202 291
1018
+ f 215 291 286
1019
+ f 292 202 215
1020
+ f 292 215 297
1021
+ f 296 216 217
1022
+ f 296 217 295
1023
+ f 296 297 215
1024
+ f 296 215 216
1025
+ f 208 211 212
1026
+ f 208 212 209
1027
+ f 209 212 213
1028
+ f 209 213 210
1029
+ f 203 214 207
1030
+ f 203 207 205
1031
+ f 216 215 286
1032
+ f 216 286 287
1033
+ f 216 287 288
1034
+ f 216 288 217
1035
+ f 218 210 213
1036
+ f 218 213 201
1037
+ f 205 207 211
1038
+ f 205 211 208
1039
+ f 289 206 217
1040
+ f 289 217 288
1041
+ f 206 289 290
1042
+ f 206 290 204
1043
+ f 203 218 201
1044
+ f 203 201 214
1045
+ f 292 293 204
1046
+ f 292 204 202
1047
+ f 290 291 202
1048
+ f 290 202 204
1049
+ f 224 221 223
1050
+ f 224 223 230
1051
+ f 221 224 225
1052
+ f 221 225 220
1053
+ f 226 230 227
1054
+ f 226 227 228
1055
+ f 228 227 222
1056
+ f 228 222 219
1057
+ f 227 230 223
1058
+ f 227 223 222
1059
+ f 224 230 226
1060
+ f 224 226 225
1061
+ f 220 225 226
1062
+ f 220 226 229
1063
+ f 226 228 219
1064
+ f 226 219 229
1065
+ f 213 233 232
1066
+ f 213 232 201
1067
+ f 212 234 233
1068
+ f 212 233 213
1069
+ f 235 234 212
1070
+ f 235 212 211
1071
+ f 207 231 235
1072
+ f 207 235 211
1073
+ f 201 232 219
1074
+ f 201 219 222
1075
+ f 207 221 220
1076
+ f 207 220 231
1077
+ f 223 221 207
1078
+ f 223 207 214
1079
+ f 201 222 223
1080
+ f 201 223 214
1081
+ f 219 232 236
1082
+ f 219 236 229
1083
+ f 233 234 236
1084
+ f 233 236 232
1085
+ f 236 234 235
1086
+ f 236 235 231
1087
+ f 231 220 229
1088
+ f 231 229 236
1089
+ f 54 585 7
1090
+ f 54 7 4
1091
+ f 2 3 45
1092
+ f 2 45 41
1093
+ f 41 43 1
1094
+ f 41 1 2
1095
+ f 238 237 86
1096
+ f 238 86 87
1097
+ f 238 87 83
1098
+ f 238 83 239
1099
+ f 240 239 83
1100
+ f 240 83 84
1101
+ f 240 84 85
1102
+ f 240 85 241
1103
+ f 242 241 85
1104
+ f 242 85 301
1105
+ f 237 242 301
1106
+ f 237 301 86
1107
+ f 187 244 243
1108
+ f 187 243 181
1109
+ f 188 245 244
1110
+ f 188 244 187
1111
+ f 189 246 245
1112
+ f 189 245 188
1113
+ f 247 246 189
1114
+ f 247 189 94
1115
+ f 248 247 94
1116
+ f 248 94 190
1117
+ f 243 248 190
1118
+ f 243 190 181
1119
+ f 265 77 280
1120
+ f 265 280 279
1121
+ f 77 76 281
1122
+ f 77 281 280
1123
+ f 74 282 281
1124
+ f 74 281 76
1125
+ f 282 74 72
1126
+ f 282 72 283
1127
+ f 284 283 72
1128
+ f 284 72 71
1129
+ f 71 259 285
1130
+ f 71 285 284
1131
+ f 286 91 90
1132
+ f 286 90 287
1133
+ f 287 90 89
1134
+ f 287 89 288
1135
+ f 88 289 288
1136
+ f 88 288 89
1137
+ f 290 289 88
1138
+ f 290 88 93
1139
+ f 291 290 93
1140
+ f 291 93 92
1141
+ f 203 293 292
1142
+ f 203 292 218
1143
+ f 294 293 203
1144
+ f 294 203 205
1145
+ f 295 294 205
1146
+ f 295 205 208
1147
+ f 296 295 208
1148
+ f 296 208 209
1149
+ f 210 297 296
1150
+ f 210 296 209
1151
+ f 218 292 297
1152
+ f 218 297 210
1153
+ f 286 291 92
1154
+ f 286 92 91
1155
+ f 192 195 110
1156
+ f 192 110 107
1157
+ f 83 87 64
1158
+ f 83 64 298
1159
+ f 69 83 298
1160
+ f 69 298 60
1161
+ f 298 82 591
1162
+ f 298 591 60
1163
+ f 299 99 199
1164
+ f 299 199 200
1165
+ f 100 106 300
1166
+ f 100 300 299
1167
+ f 301 85 66
1168
+ f 301 66 302
1169
+ f 341 355 304
1170
+ f 341 304 305
1171
+ f 353 250 249
1172
+ f 353 249 330
1173
+ f 329 312 277
1174
+ f 329 277 278
1175
+ f 338 330 346
1176
+ f 338 346 588
1177
+ f 341 587 311
1178
+ f 341 311 326
1179
+ f 331 327 339
1180
+ f 331 339 352
1181
+ f 323 328 327
1182
+ f 323 327 331
1183
+ f 309 255 256
1184
+ f 309 256 357
1185
+ f 276 315 310
1186
+ f 276 310 275
1187
+ f 360 358 313
1188
+ f 360 313 345
1189
+ f 331 321 322
1190
+ f 331 322 323
1191
+ f 310 354 274
1192
+ f 310 274 275
1193
+ f 358 359 308
1194
+ f 358 308 313
1195
+ f 308 359 268
1196
+ f 308 268 269
1197
+ f 273 274 354
1198
+ f 273 354 333
1199
+ f 354 573 334
1200
+ f 354 334 333
1201
+ f 575 336 335
1202
+ f 575 335 574
1203
+ f 573 574 335
1204
+ f 573 335 334
1205
+ f 576 337 336
1206
+ f 576 336 575
1207
+ f 577 271 337
1208
+ f 577 337 576
1209
+ f 352 347 321
1210
+ f 352 321 331
1211
+ f 253 326 311
1212
+ f 253 311 252
1213
+ f 332 326 253
1214
+ f 332 253 254
1215
+ f 340 341 326
1216
+ f 340 326 332
1217
+ f 338 314 352
1218
+ f 338 352 339
1219
+ f 305 347 352
1220
+ f 305 352 314
1221
+ f 303 304 355
1222
+ f 303 355 356
1223
+ f 306 356 355
1224
+ f 306 355 348
1225
+ f 328 344 329
1226
+ f 328 329 327
1227
+ f 327 329 353
1228
+ f 327 353 339
1229
+ f 339 353 330
1230
+ f 339 330 338
1231
+ f 345 313 342
1232
+ f 345 342 317
1233
+ f 307 342 313
1234
+ f 307 313 308
1235
+ f 270 307 308
1236
+ f 270 308 269
1237
+ f 588 346 311
1238
+ f 588 311 587
1239
+ f 346 251 252
1240
+ f 346 252 311
1241
+ f 330 249 251
1242
+ f 330 251 346
1243
+ f 318 343 345
1244
+ f 318 345 317
1245
+ f 309 306 348
1246
+ f 309 348 582
1247
+ f 309 582 583
1248
+ f 309 583 255
1249
+ f 277 312 315
1250
+ f 277 315 276
1251
+ f 349 272 273
1252
+ f 349 273 333
1253
+ f 350 349 333
1254
+ f 350 333 334
1255
+ f 349 350 336
1256
+ f 349 336 337
1257
+ f 271 272 349
1258
+ f 271 349 337
1259
+ f 353 329 278
1260
+ f 353 278 250
1261
+ f 354 310 315
1262
+ f 354 315 316
1263
+ f 340 348 355
1264
+ f 340 355 341
1265
+ f 320 312 329
1266
+ f 320 329 344
1267
+ f 315 312 320
1268
+ f 315 320 319
1269
+ f 316 315 319
1270
+ f 316 319 324
1271
+ f 325 322 343
1272
+ f 325 343 318
1273
+ f 344 328 324
1274
+ f 344 324 319
1275
+ f 324 328 323
1276
+ f 324 323 325
1277
+ f 593 594 364
1278
+ f 593 364 267
1279
+ f 594 595 362
1280
+ f 594 362 364
1281
+ f 357 369 384
1282
+ f 357 384 360
1283
+ f 369 357 256
1284
+ f 369 256 257
1285
+ f 367 366 365
1286
+ f 367 365 363
1287
+ f 363 369 383
1288
+ f 363 383 368
1289
+ f 257 258 383
1290
+ f 257 383 369
1291
+ f 363 368 572
1292
+ f 363 572 367
1293
+ f 367 388 389
1294
+ f 367 389 366
1295
+ f 572 571 388
1296
+ f 572 388 367
1297
+ f 372 266 267
1298
+ f 372 267 364
1299
+ f 362 371 372
1300
+ f 362 372 364
1301
+ f 259 260 381
1302
+ f 259 381 373
1303
+ f 381 375 374
1304
+ f 381 374 373
1305
+ f 375 377 376
1306
+ f 375 376 374
1307
+ f 376 377 380
1308
+ f 376 380 378
1309
+ f 378 380 382
1310
+ f 378 382 379
1311
+ f 382 264 265
1312
+ f 382 265 379
1313
+ f 390 380 377
1314
+ f 390 377 391
1315
+ f 392 391 377
1316
+ f 392 377 375
1317
+ f 393 392 375
1318
+ f 393 375 381
1319
+ f 395 382 380
1320
+ f 395 380 390
1321
+ f 279 266 372
1322
+ f 279 372 551
1323
+ f 551 372 371
1324
+ f 551 371 552
1325
+ f 371 370 553
1326
+ f 371 553 552
1327
+ f 370 361 554
1328
+ f 370 554 553
1329
+ f 383 555 554
1330
+ f 383 554 361
1331
+ f 383 258 285
1332
+ f 383 285 555
1333
+ f 262 263 395
1334
+ f 262 395 394
1335
+ f 261 262 394
1336
+ f 261 394 393
1337
+ f 261 393 381
1338
+ f 261 381 260
1339
+ f 264 382 395
1340
+ f 264 395 263
1341
+ f 595 384 568
1342
+ f 595 568 362
1343
+ f 371 385 386
1344
+ f 371 386 370
1345
+ f 387 361 370
1346
+ f 387 370 386
1347
+ f 368 383 361
1348
+ f 368 361 387
1349
+ f 369 363 365
1350
+ f 369 365 384
1351
+ f 397 398 492
1352
+ f 397 492 483
1353
+ f 489 502 397
1354
+ f 489 397 483
1355
+ f 399 400 491
1356
+ f 399 491 396
1357
+ f 492 398 399
1358
+ f 492 399 396
1359
+ f 398 397 404
1360
+ f 398 404 405
1361
+ f 502 403 404
1362
+ f 502 404 397
1363
+ f 399 406 407
1364
+ f 399 407 400
1365
+ f 399 398 405
1366
+ f 399 405 406
1367
+ f 412 479 482
1368
+ f 412 482 497
1369
+ f 498 410 409
1370
+ f 498 409 494
1371
+ f 465 480 479
1372
+ f 465 479 412
1373
+ f 410 463 464
1374
+ f 410 464 409
1375
+ f 465 466 467
1376
+ f 465 467 480
1377
+ f 467 466 469
1378
+ f 467 469 468
1379
+ f 404 415 416
1380
+ f 404 416 405
1381
+ f 408 411 420
1382
+ f 408 420 421
1383
+ f 413 422 420
1384
+ f 413 420 411
1385
+ f 416 473 424
1386
+ f 416 424 417
1387
+ f 415 475 443
1388
+ f 415 443 416
1389
+ f 415 478 477
1390
+ f 415 477 454
1391
+ f 433 418 417
1392
+ f 433 417 471
1393
+ f 414 421 453
1394
+ f 414 453 455
1395
+ f 445 444 421
1396
+ f 445 421 420
1397
+ f 423 420 422
1398
+ f 423 422 425
1399
+ f 436 437 434
1400
+ f 436 434 433
1401
+ f 436 433 471
1402
+ f 436 471 470
1403
+ f 435 434 437
1404
+ f 435 437 438
1405
+ f 442 436 470
1406
+ f 442 470 440
1407
+ f 438 437 441
1408
+ f 438 441 439
1409
+ f 436 442 441
1410
+ f 436 441 437
1411
+ f 441 442 440
1412
+ f 441 440 439
1413
+ f 424 473 472
1414
+ f 424 472 426
1415
+ f 428 423 425
1416
+ f 428 425 427
1417
+ f 472 430 432
1418
+ f 472 432 426
1419
+ f 431 429 428
1420
+ f 431 428 427
1421
+ f 426 432 431
1422
+ f 426 431 427
1423
+ f 432 430 429
1424
+ f 432 429 431
1425
+ f 443 475 474
1426
+ f 443 474 446
1427
+ f 448 444 445
1428
+ f 448 445 447
1429
+ f 474 451 452
1430
+ f 474 452 446
1431
+ f 449 450 448
1432
+ f 449 448 447
1433
+ f 446 452 449
1434
+ f 446 449 447
1435
+ f 450 451 474
1436
+ f 450 474 448
1437
+ f 452 451 450
1438
+ f 452 450 449
1439
+ f 477 476 456
1440
+ f 477 456 454
1441
+ f 453 457 458
1442
+ f 453 458 455
1443
+ f 456 462 459
1444
+ f 456 459 457
1445
+ f 461 460 459
1446
+ f 461 459 462
1447
+ f 470 471 435
1448
+ f 470 435 438
1449
+ f 424 425 422
1450
+ f 424 422 417
1451
+ f 472 473 423
1452
+ f 472 423 428
1453
+ f 443 445 420
1454
+ f 443 420 416
1455
+ f 454 453 421
1456
+ f 454 421 415
1457
+ f 414 478 403
1458
+ f 414 403 402
1459
+ f 403 502 569
1460
+ f 403 569 402
1461
+ f 470 438 439
1462
+ f 470 439 440
1463
+ f 472 428 429
1464
+ f 472 429 430
1465
+ f 498 482 479
1466
+ f 498 479 410
1467
+ f 410 479 480
1468
+ f 410 480 463
1469
+ f 468 463 480
1470
+ f 468 480 467
1471
+ f 473 416 420
1472
+ f 473 420 423
1473
+ f 475 415 421
1474
+ f 475 421 444
1475
+ f 478 414 455
1476
+ f 478 455 477
1477
+ f 471 417 422
1478
+ f 471 422 435
1479
+ f 419 418 433
1480
+ f 419 433 434
1481
+ f 419 434 435
1482
+ f 419 435 422
1483
+ f 405 416 417
1484
+ f 405 417 406
1485
+ f 407 406 417
1486
+ f 407 417 418
1487
+ f 421 414 402
1488
+ f 421 402 408
1489
+ f 401 496 570
1490
+ f 401 570 569
1491
+ f 477 455 458
1492
+ f 477 458 476
1493
+ f 476 458 460
1494
+ f 476 460 461
1495
+ f 456 457 453
1496
+ f 456 453 454
1497
+ f 475 444 448
1498
+ f 475 448 474
1499
+ f 443 446 447
1500
+ f 443 447 445
1501
+ f 426 427 425
1502
+ f 426 425 424
1503
+ f 468 469 464
1504
+ f 468 464 463
1505
+ f 484 485 546
1506
+ f 484 546 545
1507
+ f 546 485 486
1508
+ f 546 486 547
1509
+ f 486 487 548
1510
+ f 486 548 547
1511
+ f 487 488 549
1512
+ f 487 549 548
1513
+ f 549 488 493
1514
+ f 549 493 550
1515
+ f 550 493 484
1516
+ f 550 484 545
1517
+ f 493 539 544
1518
+ f 493 544 484
1519
+ f 493 488 540
1520
+ f 493 540 539
1521
+ f 488 487 541
1522
+ f 488 541 540
1523
+ f 487 486 542
1524
+ f 487 542 541
1525
+ f 484 544 543
1526
+ f 484 543 485
1527
+ f 465 412 409
1528
+ f 465 409 464
1529
+ f 466 465 464
1530
+ f 466 464 469
1531
+ f 407 418 419
1532
+ f 407 419 481
1533
+ f 481 497 482
1534
+ f 481 482 407
1535
+ f 495 499 496
1536
+ f 495 496 401
1537
+ f 497 499 495
1538
+ f 497 495 494
1539
+ f 485 543 542
1540
+ f 485 542 486
1541
+ f 481 413 499
1542
+ f 481 499 497
1543
+ f 411 408 570
1544
+ f 411 570 496
1545
+ f 413 411 496
1546
+ f 413 496 499
1547
+ f 500 400 482
1548
+ f 500 482 498
1549
+ f 500 498 494
1550
+ f 500 494 495
1551
+ f 500 495 401
1552
+ f 500 401 501
1553
+ f 490 491 500
1554
+ f 490 500 501
1555
+ f 490 501 502
1556
+ f 490 502 489
1557
+ f 458 457 459
1558
+ f 458 459 460
1559
+ f 456 476 461
1560
+ f 456 461 462
1561
+ f 413 481 419
1562
+ f 413 419 422
1563
+ f 404 403 478
1564
+ f 404 478 415
1565
+ f 564 563 506
1566
+ f 564 506 508
1567
+ f 564 508 519
1568
+ f 564 519 565
1569
+ f 517 556 561
1570
+ f 517 561 504
1571
+ f 517 504 562
1572
+ f 517 562 567
1573
+ f 519 518 566
1574
+ f 519 566 565
1575
+ f 566 518 517
1576
+ f 566 517 567
1577
+ f 514 513 510
1578
+ f 514 510 511
1579
+ f 515 514 511
1580
+ f 515 511 512
1581
+ f 509 516 505
1582
+ f 509 505 507
1583
+ f 518 557 556
1584
+ f 518 556 517
1585
+ f 558 557 518
1586
+ f 558 518 519
1587
+ f 515 512 520
1588
+ f 515 520 503
1589
+ f 513 509 507
1590
+ f 513 507 510
1591
+ f 519 508 559
1592
+ f 519 559 558
1593
+ f 508 506 560
1594
+ f 508 560 559
1595
+ f 505 516 503
1596
+ f 505 503 520
1597
+ f 562 504 506
1598
+ f 562 506 563
1599
+ f 504 561 560
1600
+ f 504 560 506
1601
+ f 526 532 525
1602
+ f 526 525 523
1603
+ f 523 522 527
1604
+ f 523 527 526
1605
+ f 528 530 529
1606
+ f 528 529 532
1607
+ f 524 529 530
1608
+ f 524 530 521
1609
+ f 525 532 529
1610
+ f 525 529 524
1611
+ f 526 527 528
1612
+ f 526 528 532
1613
+ f 522 531 528
1614
+ f 522 528 527
1615
+ f 521 530 528
1616
+ f 521 528 531
1617
+ f 515 503 534
1618
+ f 515 534 535
1619
+ f 514 515 535
1620
+ f 514 535 536
1621
+ f 514 536 537
1622
+ f 514 537 513
1623
+ f 509 513 537
1624
+ f 509 537 533
1625
+ f 521 534 503
1626
+ f 521 503 524
1627
+ f 509 533 522
1628
+ f 509 522 523
1629
+ f 509 523 525
1630
+ f 509 525 516
1631
+ f 503 516 525
1632
+ f 503 525 524
1633
+ f 538 534 521
1634
+ f 538 521 531
1635
+ f 535 534 538
1636
+ f 535 538 536
1637
+ f 538 533 537
1638
+ f 538 537 536
1639
+ f 533 538 531
1640
+ f 533 531 522
1641
+ f 303 356 586
1642
+ f 303 586 345
1643
+ f 304 343 347
1644
+ f 304 347 305
1645
+ f 303 345 343
1646
+ f 303 343 304
1647
+ f 540 389 388
1648
+ f 540 388 539
1649
+ f 385 389 540
1650
+ f 385 540 541
1651
+ f 542 386 385
1652
+ f 542 385 541
1653
+ f 387 386 542
1654
+ f 387 542 543
1655
+ f 544 571 387
1656
+ f 544 387 543
1657
+ f 539 388 571
1658
+ f 539 571 544
1659
+ f 489 483 545
1660
+ f 489 545 546
1661
+ f 490 489 546
1662
+ f 490 546 547
1663
+ f 491 490 547
1664
+ f 491 547 548
1665
+ f 491 548 549
1666
+ f 491 549 396
1667
+ f 396 549 550
1668
+ f 396 550 492
1669
+ f 492 550 545
1670
+ f 492 545 483
1671
+ f 265 279 551
1672
+ f 265 551 379
1673
+ f 379 551 552
1674
+ f 379 552 378
1675
+ f 552 553 376
1676
+ f 552 376 378
1677
+ f 374 376 553
1678
+ f 374 553 554
1679
+ f 555 373 374
1680
+ f 555 374 554
1681
+ f 373 555 285
1682
+ f 373 285 259
1683
+ f 392 393 556
1684
+ f 392 556 557
1685
+ f 391 392 557
1686
+ f 391 557 558
1687
+ f 558 559 390
1688
+ f 558 390 391
1689
+ f 560 395 390
1690
+ f 560 390 559
1691
+ f 561 394 395
1692
+ f 561 395 560
1693
+ f 505 520 562
1694
+ f 505 562 563
1695
+ f 564 507 505
1696
+ f 564 505 563
1697
+ f 507 564 565
1698
+ f 507 565 510
1699
+ f 510 565 566
1700
+ f 510 566 511
1701
+ f 512 511 566
1702
+ f 512 566 567
1703
+ f 520 512 567
1704
+ f 520 567 562
1705
+ f 556 393 394
1706
+ f 556 394 561
1707
+ f 494 409 412
1708
+ f 494 412 497
1709
+ f 366 389 385
1710
+ f 366 385 568
1711
+ f 568 385 371
1712
+ f 568 371 362
1713
+ f 568 384 365
1714
+ f 568 365 366
1715
+ f 501 401 569
1716
+ f 501 569 502
1717
+ f 402 569 570
1718
+ f 402 570 408
1719
+ f 368 387 571
1720
+ f 368 571 572
1721
+ f 354 316 318
1722
+ f 354 318 573
1723
+ f 318 317 574
1724
+ f 318 574 573
1725
+ f 342 575 574
1726
+ f 342 574 317
1727
+ f 307 576 575
1728
+ f 307 575 342
1729
+ f 307 270 577
1730
+ f 307 577 576
1731
+ f 5 578 577
1732
+ f 5 577 270
1733
+ f 579 578 5
1734
+ f 579 5 40
1735
+ f 580 579 40
1736
+ f 580 40 15
1737
+ f 16 581 580
1738
+ f 16 580 15
1739
+ f 52 581 16
1740
+ f 52 16 14
1741
+ f 16 23 22
1742
+ f 16 22 14
1743
+ f 318 316 324
1744
+ f 318 324 325
1745
+ f 41 20 23
1746
+ f 41 23 16
1747
+ f 343 322 321
1748
+ f 343 321 347
1749
+ f 348 340 332
1750
+ f 348 332 582
1751
+ f 582 332 254
1752
+ f 582 254 583
1753
+ f 584 583 254
1754
+ f 584 254 30
1755
+ f 46 584 30
1756
+ f 46 30 38
1757
+ f 1 43 585
1758
+ f 1 585 54
1759
+ f 356 306 309
1760
+ f 356 309 586
1761
+ f 309 357 360
1762
+ f 309 360 586
1763
+ f 305 314 587
1764
+ f 305 587 341
1765
+ f 314 338 588
1766
+ f 314 588 587
1767
+ f 39 24 9
1768
+ f 39 9 589
1769
+ f 590 589 9
1770
+ f 590 9 44
1771
+ f 82 58 56
1772
+ f 82 56 591
1773
+ f 57 592 591
1774
+ f 57 591 56
1775
+ f 268 593 592
1776
+ f 268 592 57
1777
+ f 594 593 268
1778
+ f 594 268 359
1779
+ f 595 594 359
1780
+ f 595 359 358
1781
+ f 384 595 358
1782
+ f 384 358 360
1783
+
assets/MHR/mhr_model_lod1.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:352e271a6c42729c68554ceaea0c955e866970160c31e35506d782dc0f7377bc
3
+ size 696110248
assets/MHR/mhr_model_lod6.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:28839b7ee0eb38eb3943cf26cff61a306de78f86227a0f17bb044252c7bc06ac
3
+ size 2080751
assets/SMPL/SOMA_wrap.obj ADDED
The diff for this file is too large to render. See raw diff
 
assets/SMPL/base_body.obj ADDED
The diff for this file is too large to render. See raw diff
 
assets/SMPL/smpl_anim.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1126c0b377f00b2678a91a2e0dd0eb712d27ed700eea6edc76ed46e779769a84
3
+ size 1009136
assets/SMPLX/SOMA_wrap.obj ADDED
The diff for this file is too large to render. See raw diff
 
assets/SMPLX/base_body.obj ADDED
The diff for this file is too large to render. See raw diff
 
assets/SOMA_neutral.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:515f7d5bb74be4e370e9adf5e779760ec3581556374c0b33212a32d13ab3b53f
3
+ size 27488638
assets/correctives_model.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3b0f82928dc25c952e0a23af59dbc9c02854ccb4c4c1c988f70bbffd7c284636
3
+ size 95437256
assets/example_animation.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f424385dae3128278e74e81e0789ee4048753199d04fef77c27ba5457bd3819d
3
+ size 5601024
assets/images/banner.png ADDED
assets/images/hand-left-in-action.gif ADDED
assets/images/hand-right-in-action.gif ADDED

Git LFS Details

  • SHA256: bbfae80f7e0334a569be58bb6ba1a41f76c7fd998c0f339674ee69c1f160a2a2
  • Pointer size: 131 Bytes
  • Size of remote file: 130 kB
assets/images/mhr2soma.gif ADDED

Git LFS Details

  • SHA256: d3ea90a5e41d6fd4d64bd28916a2e51d2da5ac38bed1f2b00e58a4be392109cf
  • Pointer size: 131 Bytes
  • Size of remote file: 543 kB
assets/images/smpl2soma.gif ADDED

Git LFS Details

  • SHA256: 8ec04d057a47fe9ad0bb5e8723aa7c7ce821ffacc0d79e1868efba122d5c18dd
  • Pointer size: 132 Bytes
  • Size of remote file: 1.41 MB
assets/images/soma-in-action.gif ADDED

Git LFS Details

  • SHA256: 08e59d9cbc65830113b4c647ed9220827065544e8aa782b8ad2dfb5d5408127d
  • Pointer size: 132 Bytes
  • Size of remote file: 3.46 MB
assets/images/soma_correctives.gif ADDED

Git LFS Details

  • SHA256: d071c2042768b15de8e1b5877f1f767e0e50abf791d370dec28100535d7c335a
  • Pointer size: 132 Bytes
  • Size of remote file: 4.82 MB
docs/BIAS.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ Field | Response
2
+ :-----|:--------
3
+ Participation considerations from adversely impacted groups ([protected classes](https://www.senate.ca.gov/content/protected-classes)) in model design and testing: | The SOMA native shape PCA was fitted on a combination of SizeUSA (large-scale U.S. anthropometric survey) and TripleGangers (303 individuals, commercially purchased). While SizeUSA covers a broad range of age, sex, and BMI groups, both datasets reflect body shapes predominantly from North American/Western populations and may under-represent shapes common in other geographic regions (e.g., South/Southeast Asia, Sub-Saharan Africa). SOMA mitigates this by adding additional data from GarmentMeasurements which contains some european population and by supporting the ANNY backend, which derives body shapes from anthropometric measurements rather than 3D scan data, enabling representation of human body shapes from infants to elders without inheriting scan-collection demographic biases.
4
+ Measures taken to mitigate against unwanted bias: | (1) **Multi-backend design:** SOMA's unified framework supports six identity backends. The ANNY backend is explicitly constructed from anthropometric phenotypes (age, height, weight, body composition) rather than scans, avoiding demographic sampling biases that affect scan-collected datasets. Developers requiring globally diverse or age-spanning body shape representation are encouraged to use ANNY. (2) **Shape space coverage:** The SOMA-shape PCA backend samples from the full statistical range of the SizeUSA, TripleGanger and GarmentMeasurment scan distribution; no demographic subgroup is excluded. (3) **Evaluation coverage:** Quantitative benchmarks sample 100 random identities spanning the full shape space extremes per backend, ensuring evaluation is not biased toward mean/average bodies.
5
+ Bias Metric (If Measured): | No formal demographic bias metric has been measured for the SOMA-shape against external demographic benchmarks.
6
+ Which characteristic (feature) shows the greatest difference in performance?: | Not applicable.
7
+ Representation in training data: | SizeUSA and TripleGangers (303 individuals) together represent predominantly the U.S./Western population and do not collectively or exhaustively represent all global demographic groups proportionally. For instance, East Asian, South Asian, and Sub-Saharan African body proportions may be under-represented. To mitigate this for applications requiring global diversity, we recommend using the ANNY identity backend or fine-tuning the SOMA native shape PCA with supplementary scan data representative of the target population.
docs/EXPLAINABILITY.md ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Field | Response
2
+ :-----|:--------
3
+ Intended Task/Domain: | 3D Human Body Modeling — parametric body shape and pose synthesis for computer vision, animation, robotics, and human simulation.
4
+ Model Type: | Analytical / Parametric (Pose) pipeline. Core components are closed-form (no learned neural network layers in the primary forward pass). Optional: shallow two layer MLP for pose-dependent surface correctives.
5
+ Intended Users: | Computer vision researchers; graphics and animation engineers; machine learning engineers; robotics researchers and companies.
6
+ Output: | 3D mesh vertices `(B, N_h, 3)` in meters and joint positions `(B, 77, 3)` in meters. Deterministic given fixed inputs — no sampling or stochastic components.
7
+ Describe how the model works: | SOMA processes identity and pose inputs through four sequential analytical stages: (1) **Barycentric Topology Transfer** — a pre-computed sparse barycentric correspondence matrix maps the source model's rest-shape mesh to SOMA's canonical 18,095-vertex topology in O(V_h) time via a single sparse matrix-vector product. (2) **RBF Skeleton Fitting** — Radial Basis Function (RBF) regression with Kabsch rotation alignment adapts all 77 joint transforms to the new identity's rest shape in one linear solve per identity, recovering anatomically correct joint positions and orientations. (3) **Linear Blend Skinning (LBS)** — standard LBS drives the canonical mesh to the target pose given axis-angle or rotation matrix pose parameters; a GPU-accelerated path via NVIDIA Warp processes batches at > 7,000 meshes/second on an A100. All four stages are fully differentiable.
8
+ Name the adversely impacted groups this has been tested to deliver comparable outcomes regardless of: | None
9
+ Technical Limitations & Mitigation: | (1) **LBS surface artifacts** — standard LBS produces known candy-wrapper and volume-loss artifacts at joints under extreme flexion (e.g., elbow > 120°, shoulder abduction > 90°). Mitigation: optional pose-dependent corrective MLP reduces these artifacts. (2) **Fixed topology** — SOMA uses a fixed canonical mesh and 77-joint skeleton; it cannot dynamically adapt to application-specific topologies without re-running offline registration. (3) **Backend engineering overhead** — adding a new identity backend requires authoring a `BaseIdentityModel` wrapper and performing a one-time offline SOMA wrap mesh registration.
10
+ Verified to have met prescribed NVIDIA quality standards: | Yes.
11
+ Performance Metrics: | Not applicable.
12
+ Potential Known Risks: | (1) **Out-of-distribution shape inputs** — identity coefficients far outside the training shape space distribution may produce physically implausible body meshes (intersecting limbs, extreme proportions). No clamping is applied; downstream applications should validate output geometry. (2) **LBS artifacts under extreme poses** — highly non-rigid poses may produce surface artifacts that are visually unrealistic; applications requiring photorealistic rendering under extreme motion should pair SOMA with a pose corrective or neural rendering module. (3) **Misuse for synthetic identity generation** — SOMA can generate arbitrary human body shapes; developers should not use it to impersonate specific real individuals without consent.
13
+ Licensing: | [Apache 2.0](../../LICENSE)
docs/PRIVACY.md ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Field | Response
2
+ :-----|:--------
3
+ Generatable or reverse engineerable personal data? | No — SOMA generates anonymous 3D body meshes defined by continuous numerical shape coefficients. The canonical mesh topology is fixed and the released PCA shape space represents aggregate population-level statistics; it does not encode any specific individual's biometric identity and cannot be reverse-mapped to a participant. Shape coefficients do not correspond to real, identifiable individuals unless explicitly constructed to do so by the caller. The model does not process or output images, video, or biometric identifiers at inference time.
4
+ Personal data used to create this model? | Partial — the SOMA native shape PCA was computed from two purchased 3D body scan datasets: (1) **SizeUSA**, consisting of whole-body scans of consenting human participants collected by TC², and dataset was processed to remove personally identifying markers before NVIDIA received them. (2) **TripleGangers**, containing body scans of 303 consenting individuals purchased from TripleGangers. GarmentMeasurement shape data was derived synthetically from their model and contains no personal data. Additionally, **Bones RigPlay** is a motion capture dataset of 350,000 animation sequences recorded from real human performers, used to train the optional pose-dependent corrective MLP. However, the data was retargeted to a fixed skeleton, removing any person-specific biometric signals.
5
+ Was consent obtained for any personal data used? | Yes — SizeUSA participants consented to the collection and use of their body scan data for research and commercial purposes as part of the TC² data collection protocol. TripleGangers participants consented to scanning under agreements that explicitly permit use of the scans for AI model development.
6
+ Description of methods implemented in data acquisition or processing, if any, to address the prevalence of personal data in the training data: | SizeUSA scans were delivered to NVIDIA as anonymous 3D body meshes without face geometry and texture maps. TripleGangers scans include full-body and face geometry; however, TripleGangers' participant agreements explicitly permit use of the scans for AI model development. Both datasets were processed without participant names, contact information, or other personal data. PCA fitting was performed on the mesh data, producing statistical shape vectors that cannot be reverse-mapped to individual participants. The resulting shape space (64 principal components) represents population-level body shape variation and not any specific individual's geometry. Bones RigPlay motion sequences are used only as skeletal animation data for training the optional corrective MLP; the retargeting process discards performer-specific kinematics and no visual appearance, face, texture, or identity information from any real performers is included.
7
+ How often is dataset reviewed? | Dataset is initially reviewed upon addition, and subsequent reviews are conducted as needed or upon request for changes.
8
+ Is a mechanism in place to honor data subject right of access or deletion of personal data? | Not Applicable — SOMA's release artifacts (model weights, PCA components) do not store raw scan data or any personal data. The PCA shape components are aggregate statistical transforms computed over all participants; no individual scan can be recovered from the released model. Data subject rights requests pertaining to the underlying SizeUSA dataset should be directed to TC² in accordance with their privacy policy.
9
+ If personal data was collected for the development of the model, was it collected directly by NVIDIA? | No — body scan data was collected by TC² (SizeUSA) and TripleGangers (two third-party data providers) and purchased by NVIDIA under commercial licenses. NVIDIA did not directly collect body scans.
10
+ If personal data was collected for the development of the model by NVIDIA, do you maintain or have access to disclosures made to data subjects? | Not Applicable — data was collected by TC² (SizeUSA) and TripleGangers; NVIDIA holds the commercial license agreements but not the participant consent forms, which remain with the respective data providers.
11
+ If personal data was collected for the development of this AI model, was it minimized to only what was required? | Yes — only the 3D mesh geometry necessary for fitting the shape PCA were used. No facial texture, personal identifiers, or fine-grained biometric data were used.
12
+ Was data from user interactions with the AI model (e.g. user input and prompts) used to train the model? | No
13
+ Is there provenance for all datasets used in training? | Yes — SizeUSA: commercially licensed from TC²; TripleGangers: commercially licensed from TripleGangers (303 individuals); GarmentMeasurement: internally derived synthetic dataset using their source code which is released with GPL 3.0 license; Bones RigPlay: commercially licensed (purchased by NVIDIA), used for the optional pose corrective MLP.
14
+ Does data labeling (annotation, metadata) comply with privacy laws? | Yes
15
+ Is data compliant with data subject requests for data correction or removal, if such a request was made? | Not applicable with the released model — raw scan data is not included in the released artifacts. Requests relating to the source dataset should be directed to TC² or TripleGanger.
16
+ Applicable Privacy Policy | https://www.nvidia.com/en-us/about-nvidia/privacy-policy/
docs/SAFETY_and_SECURITY.md ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ Field | Response
2
+ :-----|:--------
3
+ Model Application Field(s): | Media & Entertainment; Industrial/Machinery and Robotics; Healthcare (Biomechanics Research); Computer Vision Research; Animation and Simulation
4
+ Describe the life critical impact (if present). | None; this should not operate in safety-critical control loops (autonomous vehicles, medical devices, industrial safety systems).
5
+ Use Case Restrictions: | Abide by the [Apache 2.0 License](../../LICENSE). SOMA must not be used to: (1) impersonate specific real individuals without their explicit consent; (2) generate synthetic body data intended to deceive biometric identification systems; (3) produce outputs that violate applicable laws or regulations in the deployment jurisdiction. Integration into safety-critical systems (medical devices, autonomous vehicles, industrial machinery) requires additional validation by the integrating team.
6
+ Model and dataset restrictions: | The Principle of Least Privilege (PoLP) is applied, limiting access for dataset generation and model development. Dataset access restrictions were enforced during PCA fitting and corrective MLP training. The released model artifacts (PCA components, skinning weights, rig data) do not contain raw scan data; access to the underlying SizeUSA dataset remains restricted to authorized NVIDIA personnel under the commercial license agreement. Bones RigPlay motion capture data (used for optional corrective MLP training) is commercially licensed (purchased by NVIDIA) and contains no real-person video or personally identifiable information; all motion sequences were retargeted to a fixed skeleton.
7
+ Security considerations: | SOMA processes numerical tensors (shape coefficients and pose parameters) only; it does not accept image, video, text, or executable inputs, substantially limiting its attack surface. The model does not make network calls at inference time. The NVIDIA Warp custom kernel is compiled and linked at package installation; users should verify package integrity via the official distribution channel (GitHub / Hugging Face). Report security vulnerabilities to NVIDIA [here](https://www.nvidia.com/en-us/support/submit-security-vulnerability/).
8
+ Description of methods to address potentially harmful data in training data: | The body scan datasets used for shape PCA fitting contain 3D geometric data only — no images, text, audio, or personally identifiable information. No screening for harmful content (CSAM, NCII, hate speech) is applicable to abstract 3D body geometry data. The GarmentMeasurement distillation data is synthetically generated using their source code and contains no personal or harmful content. Bones RigPlay motion capture sequences (used for optional corrective MLP training) were retargeted to a fixed skeleton prior to use, removing performer-specific biometrics; the dataset contains no visual appearance data or personally identifiable information.
9
+ Responsible AI practices: | SOMA is designed to represent diverse human body shapes; misuse for stereotyping, body shaming, or generating distorted body shapes to mock or demean individuals is contrary to the intended use. The ANNY backend is specifically recommended for applications requiring age-spanning (infant and children) or globally diverse body shapes to avoid reinforcing demographic biases from scan-collected datasets. Developers are responsible for implementing appropriate content guardrails in any user-facing application built on top of SOMA.
docs/model_card.md ADDED
@@ -0,0 +1,152 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Model Overview
2
+
3
+ ### Description:
4
+ SOMA (Unifying Parametric Human Body Models) is a unified framework that decouples identity representation from pose parameterization by mapping any supported parametric body model to a single canonical mesh topology and skeleton, enabling a shared Linear Blend Skinning (LBS) pipeline across all backends. SOMA supports six identity backends (SOMA-shape, SMPL, SMPL-X, MHR, ANNY, and GarmentMeasurements), unified under a canonical mesh topology and SOMA skeleton.
5
+
6
+ This model is ready for commercial use.
7
+
8
+ ### License/Terms of Use:
9
+ SOMA is released under the [Apache 2.0 License](../../LICENSE).
10
+
11
+ ### Deployment Geography:
12
+ Global
13
+
14
+ ### Use Case:
15
+ SOMA is intended for use by computer vision researchers, graphics and animation engineers, machine learning engineers, and robotics researchers and companies. Specific use cases include:
16
+ - **Pose estimation and human reconstruction** — unified pose interface enables seamless identity substitution across backends without retraining.
17
+ - **Motion generation and animation** — apply motion capture sequences to any supported identity model using the same axis-angle pose parameterization.
18
+ - **Avatar synthesis and digital humans** — freely mix identity sources with SOMA's pose representation.
19
+ - **Simulation and robotics** — lightweight analytical forward pass enables real-time simulation pipelines with diverse body shapes.
20
+
21
+ ### Expected Release Date:
22
+ GitHub: 03/16/2026 <br>
23
+
24
+ ## Reference(s):
25
+ - SOMA: Unifying Parametric Human Body Models.
26
+ - SMPL: A Skinned Multi-Person Linear Model — Loper et al., 2015
27
+ - SMPL-X: Expressive Body Capture: 3D Hands, Face, and Body from a Single Image — Pavlakos et al., 2019
28
+ - MHR: Momentum Human Rig, Meta
29
+ - ANNY: Anthropometric body model spanning full human lifespan
30
+
31
+ ## Model Architecture:
32
+ **Architecture Type:** Analytical / Parametric; optional shallow Multilayer Perceptron (MLP) for pose-dependent surface correctives <br>
33
+
34
+ **Network Architecture:** The core pipeline uses no learned neural network components. It is composed of three closed-form analytical modules:
35
+ 1. **Barycentric Mesh Transfer** — sparse barycentric correspondence matrix pre-computed per backend; runtime topology transfer is a single sparse matrix-vector product in O(V_h) time.
36
+ 2. **RBF Skeleton Fitting** — Radial Basis Function regression with Kabsch rotation alignment yields the 77-joint identity-adapted skeleton transforms in a single linear solve per identity.
37
+ 3. **Linear Blend Skinning (LBS)** — standard LBS with joint-orient (T-pose-relative) parameterization; GPU-accelerated via NVIDIA Warp custom kernels with `torch.export`-compatible interface.
38
+
39
+ Optional: shallow pose-dependent corrective MLP (2 hidden layers, ReLU activations) for surface artifact reduction. <br>
40
+
41
+ **This model was developed independently by NVIDIA.** <br>
42
+
43
+ **Number of model parameters:**
44
+ - Core analytical pipeline: 0 learned parameters (closed-form)
45
+ - Principal Component Analysis (PCA) for SOMA-shape model: 128 principal components × ~18,000 vertices × 3 = ~3.1 × 10⁶ coefficients (pre-fitted, not gradient-trained)
46
+ - Optional pose corrective Multilayer Perceptron (MLP) layers: ~1 × 10^8 parameters (if enabled)
47
+
48
+ ## Computational Load
49
+ **Throughput:** > 7,033 posed meshes/second on NVIDIA A100 80GB (batch size 128, GPU Warp path) <br>
50
+ **Latency:** 2.1 ms per mesh (batch = 1, GPU); 12.1 ms (batch = 1, CPU 32-core) <br>
51
+ **Skeleton fitting:** < 1.68 ms (batch = 1) <br>
52
+ **Training compute:** N/A — core pipeline requires no gradient-based training; PCA shape space fitted offline from body scan data.
53
+
54
+ ## Input(s):
55
+ **Input Type(s):** Numerical tensors (floating-point) <br>
56
+
57
+ **Input Format(s):**
58
+ - Identity coefficients: floating-point tensor, shape `(B, K)` where `K = 128` for SOMA-shape backend or backend-specific dimensionality for SMPL/SMPL-X/MHR/ANNY/Garment
59
+ - Pose parameters: axis-angle vectors `(B, 77, 3)` or rotation matrices `(B, 77, 3, 3)` covering 77 articulated joints (excludes root dummy joint)
60
+ - Optional root translation: `(B, 3)` in meters
61
+
62
+ **Input Parameters:** One-Dimensional (1D) coefficient vectors; Three-Dimensional (3D) pose tensors <br>
63
+
64
+ **Other Properties Related to Input:**
65
+ - Identity coefficients should lie within the shape space of the respective backend (no hard clipping, but extreme out-of-distribution values may produce artifact geometry).
66
+ - Pose parameters follow standard axis-angle convention; no clamping is applied.
67
+ - All inputs are standard float32 PyTorch tensors. No pre-processing beyond normalization within each backend's identity model is required.
68
+
69
+ ## Output(s):
70
+ **Output Type(s):** Numerical tensors (3D geometry) <br>
71
+
72
+ **Output Format(s):** PyTorch float32 tensors <br>
73
+
74
+ **Output Parameters:** Three-Dimensional (3D) <br>
75
+
76
+ - Posed mesh vertices: `(B, N_h, 3)` where `N_h ≈ 18,095` — world-space vertex positions in **meters**
77
+ - Joint positions: `(B, 77, 3)` — world-space 3D joint positions in **meters**
78
+ - Rest-shape vertices: `(B, N_h, 3)` in meters (intermediate output, available on request)
79
+
80
+ **Other Properties Related to Output:** All outputs are in meters. Vertex count `N_h` is fixed by the SOMA canonical topology (mid-resolution LOD, approximately 18,095 vertices). Joint count is fixed at 77.
81
+
82
+ Our AI models are designed and/or optimized to run on NVIDIA GPU-accelerated systems. By leveraging NVIDIA's hardware (GPU cores) and software frameworks (CUDA libraries, NVIDIA Warp), the model achieves real-time throughput exceeding 7,000 meshes per second at batch size 128 on an A100 GPU.
83
+
84
+ ## Software Integration:
85
+ **Runtime Engine(s):**
86
+ * NVIDIA Warp (GPU-accelerated LBS kernel, `torch.export`-compatible) <br>
87
+ * PyTorch (CPU and GPU fallback) <br>
88
+ * N/A — No dependency on TAO, Riva, NeMo, or other NVIDIA SDK runtimes
89
+
90
+ **Supported Hardware Microarchitecture Compatibility:**
91
+ * NVIDIA Ampere (A100, A30, A40, A10, RTX 3000-series) — tested on A100 80GB <br>
92
+ * NVIDIA Hopper (H100) — forward compatible via Warp/CUDA <br>
93
+ * NVIDIA Ada Lovelace (RTX 4000-series, L40) <br>
94
+ * NVIDIA Turing (T4, RTX 2000-series) <br>
95
+ * NVIDIA Volta (V100) <br>
96
+ * Any NVIDIA GPU with CUDA support — model is lightweight and runs on any NVIDIA GPU <br>
97
+ * CPU only (PyTorch fallback, no CUDA required)
98
+
99
+ **Preferred/Supported Operating System(s):**
100
+ * Linux <br>
101
+ * Windows (via PyTorch CPU/GPU path) <br>
102
+
103
+ ## Model Version(s):
104
+ - **SOMA v1.0** — initial public release; includes full-body layer (`SOMALayer`, 77 joints, ~18k vertices) and all six identity backends.
105
+
106
+ ## Training, Testing, and Evaluation Datasets:
107
+
108
+ ## Training Dataset:
109
+
110
+ **SOMA-shape Identity Model (Shape PCA):**
111
+ - **SizeUSA** — commercially licensed 3D body scan dataset; largest anthropometric survey of the U.S. population, covering diverse body shapes across age, sex, and BMI groups. Used to compute the 128-component PCA shape space for the SOMA-native identity backend.
112
+ - **TripleGangers** — commercially licensed 3D body scan dataset purchased from TripleGangers, containing body scans of 303 individuals. Contributes additional shape diversity to the SOMA-shape PCA.
113
+ - **GarmentMeasurement PCA model** — body shape data distilled from the GarmentMeasurement parametric model to augment the shape space with garment-relevant proportions.
114
+
115
+ **Shallow MLP for Pose Correctives:**
116
+
117
+ - **Bones RigPlay Dataset**: 80,000 (pose,mesh) pairs samples from Bones RigPlay motion capture dataset owned by NVIDIA.
118
+
119
+ **Data Modality**
120
+ - Other: 3D meshes and 3D motion data
121
+
122
+ **Non-Audio, Image, Text Training Data Size**: 20,000 3D meshes and 80,000 (pose,mesh) pairs. <br>
123
+
124
+ **Data Collection Method:** Automatic/Sensors (structured-light 3D body scanners) for SizeUSA and TripleGangers; Synthetic for GarmentMeasurement distillation; motion capture for Bones RigPlay. <br>
125
+ **Labeling Method:** Automatic/Sensors (body landmarks auto-detected from scans) <br>
126
+
127
+ **Dataset License(s):** SizeUSA — commercially licensed (purchased by NVIDIA); TripleGangers — commercially licensed (purchased by NVIDIA); GarmentMeasurement — Generated using the source code; Bones RigPlay - commercially licensed (purchased by NVIDIA)
128
+
129
+ ### Testing Dataset:
130
+ Not applicable
131
+
132
+ ### Evaluation Dataset:
133
+ Not applicable
134
+
135
+ Data Collection Method: Synthetic <br>
136
+ Labeling Method: Automatic <br>
137
+ **Dataset License(s):** N/A
138
+
139
+ # Inference:
140
+ **Acceleration Engine:** NVIDIA Warp (custom LBS kernel, `torch.export`-compatible); PyTorch (fallback) <br>
141
+ **Test Hardware:**
142
+ * NVIDIA A100 80GB (primary GPU benchmark hardware)
143
+ * 32-core AMD EPYC 7763 (CPU benchmark hardware)
144
+
145
+ ## Ethical Considerations:
146
+ NVIDIA believes Trustworthy AI is a shared responsibility and we have established policies and practices to enable development for a wide array of AI applications. When downloaded or used in accordance with our terms of service, developers should work with their internal model team to ensure this model meets requirements for the relevant industry and use case and addresses unforeseen product misuse.
147
+
148
+ SOMA produces 3D human body meshes in a purely geometric and anonymous form; it does not process images, video, or any personally identifiable data at inference time. Input shape coefficients do not correspond to real individuals unless explicitly constructed to do so. Developers integrating SOMA into applications that may reconstruct or represent real individuals should ensure they have obtained appropriate consent and comply with applicable privacy regulations.
149
+
150
+ For more detailed information on ethical considerations for this model, please see the Model Card++ subcards: [BIAS.md](BIAS.md), [EXPLAINABILITY.md](EXPLAINABILITY.md), [SAFETY_and_SECURITY.md](SAFETY_and_SECURITY.md), and [PRIVACY.md](PRIVACY.md).
151
+
152
+ Please report model quality, risk, or security vulnerabilities [here](https://www.nvidia.com/en-us/support/submit-security-vulnerability/).
out/omomo_sub1_clothesstand_000_soma.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0bff375b5b0798f40eeef18eed44b714c229084f57a67c7afa3408d5bdadb52f
3
+ size 135868
out/omomo_sub1_clothesstand_000_soma_smoke.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:076f766f9999bbdf072f61b102aed2a0e4780759daf37badc05bb21ace7b0377
3
+ size 17995
out/smplx2soma_smoke.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:75683e4c2d9ff2f26952655163dfd86704d99ee7ccf5b62e86b9fff2538edde1
3
+ size 8284
out/soma2smpl_betafit_smoke.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:588a3812cba8fc535fc571814385e164b9e45798c9b2924fea05f144d22511c2
3
+ size 5836
out/soma2smpl_cached_beta_smoke.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7829523fc645cfa3f2d358f016ebbbc93a21d405b5367d5bc74bbd7b2aba016e
3
+ size 4492
out/soma2smpl_neutral_smoke.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1452e76b3db1c21aadce68ac4f7038d6f41bba7a153c6acd2dda365476a29c46
3
+ size 5836
out/soma2smpl_smoke.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ee656df107fdbacd52b4140b7a224946a16de4a12d2a9cb74fdd561cd0e7d39f
3
+ size 8524
out/soma2smpl_smplx2soma_beta_smoke.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9fe4ae3b3d196ccd4d0a23677745930b703c89862da124df7fd3f1578976a10a
3
+ size 5836
py_soma_x.egg-info/PKG-INFO ADDED
@@ -0,0 +1,404 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Metadata-Version: 2.4
2
+ Name: py-soma-x
3
+ Version: 0.1.0
4
+ Summary: SOMA body layer
5
+ Home-page: https://github.com/NVlabs/SOMA-X
6
+ Author: NVIDIA Corporation
7
+ License: Apache-2.0
8
+ Project-URL: Bug Tracker, https://github.com/NVlabs/SOMA-X/issues
9
+ Project-URL: Source Code, https://github.com/NVlabs/SOMA-X
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Intended Audience :: Science/Research
13
+ Classifier: License :: OSI Approved :: Apache Software License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Topic :: Scientific/Engineering
16
+ Requires-Python: >=3.8
17
+ Description-Content-Type: text/markdown
18
+ License-File: LICENSE
19
+ Requires-Dist: numpy
20
+ Requires-Dist: scipy
21
+ Requires-Dist: torch
22
+ Requires-Dist: trimesh
23
+ Requires-Dist: warp-lang
24
+ Requires-Dist: rtree
25
+ Requires-Dist: cholespy
26
+ Requires-Dist: huggingface_hub
27
+ Provides-Extra: smpl
28
+ Requires-Dist: smplx; extra == "smpl"
29
+ Provides-Extra: anny
30
+ Requires-Dist: anny; extra == "anny"
31
+ Requires-Dist: Pillow; extra == "anny"
32
+ Provides-Extra: dev
33
+ Requires-Dist: pytest; extra == "dev"
34
+ Requires-Dist: ruff; extra == "dev"
35
+ Requires-Dist: pre-commit; extra == "dev"
36
+ Provides-Extra: demo
37
+ Requires-Dist: pyrender; extra == "demo"
38
+ Requires-Dist: tqdm; extra == "demo"
39
+ Requires-Dist: imageio[ffmpeg]; extra == "demo"
40
+ Provides-Extra: all
41
+ Requires-Dist: smplx; extra == "all"
42
+ Requires-Dist: anny; extra == "all"
43
+ Requires-Dist: Pillow; extra == "all"
44
+ Dynamic: license-file
45
+
46
+
47
+
48
+ <p align="center">
49
+ <img src="./assets/images/banner.png" alt="Banner" width="100%">
50
+ </p>
51
+
52
+ [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
53
+ [![Technical Report](https://img.shields.io/badge/arXiv-2603.16858-b31b1b.svg)](https://arxiv.org/abs/2603.16858)
54
+
55
+ ## Overview
56
+
57
+ Parametric human body models, including SMPL, SMPL-X, MHR, Anny, and GarmentMeasurements, are central to a wide range of tasks in human reconstruction, animation, and simulation. However, these models are inherently incompatible: each defines its own mesh topology, joint hierarchy, and parameterization, precluding seamless integration. As a result, leveraging complementary strengths across models (such as combining Anny’s age-range control with SMPL-based motion data) necessitates bespoke adapters for every model pair, hindering interoperability and limiting practical applications.
58
+
59
+ We present **SOMA**—a canonical body topology and rig that acts as a universal pivot for all supported parametric human body models. Instead of replacing existing models, **SOMA unifies them** by mapping their diverse rest shapes onto a single, shared representation. This approach allows any supported identity model to be animated with a unified animation pipeline, eliminating the need for custom adapters or model-specific retargeting. With SOMA, you can mix and match identity sources and pose data at inference time without additional engineering. The entire pipeline remains end-to-end differentiable and GPU-accelerated via NVIDIA Warp.
60
+
61
+
62
+ See SOMA in action:
63
+
64
+ <p align="center">
65
+ <img src="assets/images/soma-in-action.gif" alt="SOMA in Action" width="1000"/>
66
+ </p>
67
+
68
+ ## Supported Identity Models
69
+
70
+ SOMA currently supports five distinct identity models, each offering unique capabilities:
71
+
72
+ 1. [MHR](https://github.com/facebookresearch/MHR): The default identity model in SOMA, providing high-fidelity body shape representation.
73
+ 2. [Anny](https://github.com/naver/anny): Particularly well-suited for modeling children, broadening applicability to younger subjects.
74
+ 3. [SMPL-Family](https://smpl.is.tue.mpg.de/): Supports both SMPL and SMPL-X models, enabling interoperability with established standards in the field.
75
+ 4. **SOMA-shape**: A proprietary PCA-based model developed as part of this project, designed to offer SMPL-like functionality with 128 PCA coefficients for identity representation.
76
+ 5. [GarmentMeasurement](https://github.com/mbotsch/GarmentMeasurements): A PCA-based identity model trained on the CAESARS dataset, suitable for specialized use cases involving garment fitting and measurement.
77
+
78
+ We welcome community contributions to extend support for additional identity models.
79
+
80
+ ## Unified Pose Correctives (Beta)
81
+ Thanks to SOMA's unified framework, pose-dependent corrective deformations that mitigate LBS artifacts are seamlessly available for all supported identity models, including those that do not provide correctives themselves (e.g., Anny and GarmentMeasurement).
82
+ <p align="center">
83
+ <img src="assets/images/soma_correctives.gif" alt="SOMA Pose Correctives" width="800"/>
84
+ </p>
85
+
86
+ ## Related projects that already support SOMA
87
+ SOMA is part of a larger effort to enable human animation, robotics, physical AI, and other applications. We also provide the following works with SOMA support:
88
+
89
+ * [GEM](https://github.com/NVlabs/GEM-X) - SOMA-based video pose estimation.
90
+ * [Kimodo](https://github.com/nv-tlabs/kimodo) - SOMA-based controllable text-to-motion generation method for **human(oid)s**.
91
+ * [BONES-SEED Dataset](https://huggingface.co/datasets/bones-studio/seed) - a large scale human(oid) motion capture dataset in SOMA format. Also provides retargeted G1 data.
92
+ * [SOMA Retargeter](https://github.com/NVIDIA/soma-retargeter) - for SOMA to G1 retargeting.
93
+ * [ProtoMotion](https://github.com/NVlabs/ProtoMotions) - simulation and learning framework for training physically simulated digital human(oid)s
94
+ * [GEAR SONIC](https://github.com/NVlabs/GR00T-WholeBodyControl) - a humanoid behavior foundation model. (coming soon)
95
+
96
+ ## Installation
97
+
98
+ ### Install from PyPI
99
+
100
+ ```bash
101
+ pip install py-soma-x
102
+ ```
103
+
104
+ With optional extras:
105
+ ```bash
106
+ pip install "py-soma-x[smpl]" # SMPL/SMPL-X support
107
+ pip install "py-soma-x[anny]" # Anny support
108
+ ```
109
+
110
+ Assets are automatically downloaded from HuggingFace on first use (cached in `~/.cache/huggingface/hub/`).
111
+
112
+ > **Note:** SMPL/SMPL-X requires `chumpy`, which must be installed separately:
113
+ > ```bash
114
+ > pip install --no-build-isolation chumpy
115
+ > ```
116
+ > If that fails, install from source:
117
+ > ```bash
118
+ > pip install --no-build-isolation git+https://github.com/mattloper/chumpy@580566eafc9ac68b2614b64d6f7aaa8
119
+ > ```
120
+ >
121
+ > SMPL/SMPL-X model files (`SMPL_NEUTRAL.pkl`, `SMPLX_NEUTRAL.npz`) require a separate license and must be downloaded from [SMPL](https://smpl.is.tue.mpg.de/) / [SMPL-X](https://smpl-x.is.tue.mpg.de/). Pass the model path explicitly:
122
+ > ```python
123
+ > soma = SOMALayer(
124
+ > identity_model_type="smpl",
125
+ > identity_model_kwargs={"model_path": "/path/to/SMPL_NEUTRAL.pkl"},
126
+ > )
127
+ > ```
128
+
129
+ <details>
130
+
131
+ <summary>Developer installation (clone with Git LFS)</summary>
132
+
133
+ ### Clone with Git LFS (Required for Assets)
134
+ This repository uses Git LFS for large asset files (e.g., assets/Nova_neutral.npz). You must install Git LFS to download the actual data; otherwise, you will encounter file loading errors.
135
+
136
+ 1. Install Git LFS (if not installed):
137
+ ````bash
138
+ git lfs install
139
+ ````
140
+
141
+ 2. Clone and Pull Data:
142
+ ```bash
143
+ git clone https://github.com/NVlabs/SOMA-X.git
144
+ cd SOMA-X
145
+ git lfs pull
146
+ ```
147
+ _(If you already cloned the repo, just run `git lfs pull` to fetch the missing assets.)_
148
+
149
+ ### Prepare Python environment
150
+
151
+ **Linux:**
152
+ ```bash
153
+ pip install uv
154
+ uv venv .venv
155
+ source .venv/bin/activate # or: . .venv/bin/activate
156
+ # Install PyTorch with CUDA — adjust the version (cu124, cu126, cu130, …)
157
+ # to match your GPU and driver. See https://pytorch.org/get-started/locally/
158
+ uv pip install torch --index-url https://download.pytorch.org/whl/cu124
159
+ uv pip install ".[dev]"
160
+ ```
161
+
162
+ **Windows (PowerShell):**
163
+ ```powershell
164
+ pip install uv
165
+ uv venv .venv
166
+ Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser # one-time setup
167
+ .\.venv\Scripts\activate
168
+ # Install PyTorch with CUDA — adjust the version (cu124, cu126, cu130, …)
169
+ # to match your GPU and driver. See https://pytorch.org/get-started/locally/
170
+ uv pip install torch --index-url https://download.pytorch.org/whl/cu124
171
+ uv pip install ".[dev]"
172
+ ```
173
+ Then run tests: `pytest tests/ -v`.
174
+
175
+ ### Optional Dependencies
176
+
177
+ **For SMPL and SMPLX support:**
178
+
179
+ ```bash
180
+ uv pip install ".[smpl]"
181
+ pip install --no-build-isolation chumpy
182
+ ```
183
+ _NOTE: `chumpy` (required by `smplx` at runtime) has a broken PyPI build and must be installed with `--no-build-isolation`. If that fails, install from source: `pip install --no-build-isolation git+https://github.com/mattloper/chumpy@580566eafc9ac68b2614b64d6f7aaa8`_
184
+
185
+ You also need to download `SMPL_NEUTRAL.pkl` or `SMPLX_NEUTRAL.npz` separately:
186
+ 1. Visit the [SMPL](https://smpl.is.tue.mpg.de/) or [SMPLX](https://smpl-x.is.tue.mpg.de/) website.
187
+ 2. Register and download the SMPL (v1.1.0 for Python) or [SMPL-X](https://download.is.tue.mpg.de/download.php?domain=smplx&sfile=smplx_lockedhead_20230207.zip) (with removed head bun) model files.
188
+ 3. Extract and copy `SMPL_NEUTRAL.pkl` to `./assets/SMPL/SMPL_NEUTRAL.pkl` and `SMPLX_NEUTRAL.npz` to `./assets/SMPLX/SMPLX_NEUTRAL.npz`.
189
+
190
+ **Note:** The SMPL models are subject to a separate license and cannot be redistributed with this repository.
191
+
192
+ **For [Anny](https://github.com/naver/anny) support:**
193
+ ```bash
194
+ uv pip install ".[anny]"
195
+ ```
196
+
197
+ **For [GarmentMeasurement](https://github.com/mbotsch/GarmentMeasurements) support:**
198
+ ```bash
199
+ git clone https://github.com/mbotsch/GarmentMeasurements
200
+ python tools/convert_gm_pca_to_npz.py ./GarmentMeasurements/data/pca/point.pca assets/GarmentMeasurements/point.npz
201
+ rm -rf GarmentMeasurements
202
+ ```
203
+ </details>
204
+
205
+
206
+ ## Usage
207
+
208
+ ```python
209
+ import torch
210
+ from soma import SOMALayer
211
+
212
+ # Initialize the layer — assets are auto-downloaded from HuggingFace
213
+ soma = SOMALayer(
214
+ identity_model_type="mhr", # or "soma" "smpl", "smplx", "anny", "garment"
215
+ device="cuda"
216
+ )
217
+
218
+ # Or use a local assets directory
219
+ # soma = SOMALayer(data_root="./assets", identity_model_type="mhr", device="cuda")
220
+
221
+ # Forward pass
222
+ # poses: (B, num_joints, 3)
223
+ # identity: (B, num_coeffs)
224
+ # scale_params: (B, num_scales) - Optional, depending on model type (required for MHR)
225
+ output = soma(poses, identity, scale_params=scale_params)
226
+ vertices = output["vertices"]
227
+ ```
228
+
229
+ ## Running the Demo
230
+
231
+ Install the demo environment (includes pyrender, tqdm, imageio with ffmpeg for video output):
232
+
233
+ ```bash
234
+ uv pip install ".[demo]"
235
+ ```
236
+
237
+ If you want to run all identity models (soma, mhr, anny, smpl, smplx, garment), install the full set and use the same build steps as for tests:
238
+
239
+ ```bash
240
+ uv pip install -e ".[all,demo]"
241
+ pip install --no-build-isolation chumpy
242
+ ```
243
+
244
+ Then run the demo script:
245
+
246
+ ```bash
247
+ # Run all models (default: soma, mhr, anny, smpl, smplx, garment)
248
+ python tools/demo_soma_vis.py --data-root ./assets --output-dir ./out
249
+
250
+ # Run specific models only
251
+ python tools/demo_soma_vis.py --data-root ./assets --output-dir ./out --identity-model-type soma, mhr, smplx
252
+
253
+ # Run a single model
254
+ python tools/demo_soma_vis.py --data-root ./assets --output-dir ./out --identity-model-type anny
255
+
256
+ # Run MHR with random shapes
257
+ python tools/demo_soma_vis.py --data-root ./assets --output-dir ./out --identity-model-type mhr --random-shape
258
+ ```
259
+
260
+ This will generate example animation videos for the selected models in the `out/` directory.
261
+
262
+ **Demo Options:**
263
+ - `--identity-model-type`: Comma-separated list of models to use (options: `soma`, `mhr`, `anny`, `smplx`, `smpl`, `garment`, default: `soma,mhr,anny,smpl,smplx,garment`)
264
+ - `--random-shape`: Generate random body shapes instead of using neutral shapes
265
+ - `--motion-file`: Path to custom motion file (default: `assets/ROM5.npy`)
266
+ - `--image-size`: Render resolution (default: 1920)
267
+ - `--device`: Device to use (default: `cuda:0`)
268
+
269
+ ## Conversion of pose parameters from other models to SOMA
270
+ We provide conversion tools for converting from SMPL and MHR pose parameters to SOMA.
271
+ Both tools use `PoseInversion.fit()`, which supports two complementary solvers — both initialized by a single-pass skeleton transfer fit for fast convergence:
272
+
273
+ - **Analytical** (default): iterative inverse-LBS with Newton-Schulz refinement. Extremely fast (~1200 FPS) with comparable accuracy.
274
+ - **Autograd FK**: 6D rotation optimization by backpropagating FK + LBS. Slow but controllable (e.g. extra weights on extremities).
275
+
276
+ The two can be combined: the analytical solve warm-starts autograd refinement — best of both worlds.
277
+
278
+ ### SMPL to SOMA
279
+
280
+ <img src="assets/images/smpl2soma.gif" alt="SMPL to SOMA conversion" width="400"/>
281
+
282
+ ```bash
283
+ # Convert SMPL animation to SOMA (renders comparison video)
284
+ python -m tools.smpl2soma
285
+
286
+ # Export SOMA poses as .npz
287
+ python -m tools.smpl2soma --output-npz out/smpl_soma.npz
288
+
289
+ # Tune analytical iterations (defaults: --body-iters 2 --full-iters 1)
290
+ python -m tools.smpl2soma --body-iters 3 --full-iters 1 --batch-size 64
291
+
292
+ # Analytical + autograd FK refinement (best accuracy)
293
+ python -m tools.smpl2soma --body-iters 2 --full-iters 1 --autograd-iters 10
294
+ ```
295
+
296
+ **Benchmark** (402 SMPL frames, RTX 5000 Ada):
297
+
298
+ | Method | Speed | Mean | Median | Max |
299
+ |---|---|---|---|---|
300
+ | Analytical (body=2, full=1) — **default** | **1279 FPS** | 0.65 cm | 0.52 cm | 17.8 cm |
301
+ | Autograd FK (10 iters, lr=5e-3) | 199 FPS | 1.04 cm | 0.97 cm | 18.1 cm |
302
+ | Autograd FK (100 iters) | 18 FPS | 0.49 cm | 0.39 cm | 16.8 cm |
303
+
304
+ ### MHR to SOMA
305
+
306
+ <img src="assets/images/mhr2soma.gif" alt="MHR to SOMA conversion" width="400"/>
307
+
308
+ For [SAM 3D Body](https://huggingface.co/datasets/facebook/sam-3d-body-dataset) or similar MHR-format data.
309
+
310
+ ```bash
311
+ # Convert a directory of SAM 3D Body parquet files
312
+ python -m tools.mhr2soma --input path/to/sam_3d_body/data/coco_train
313
+
314
+ # Convert and export as .npz
315
+ python -m tools.mhr2soma --input path/to/parquet_dir --output-npz out/mhr_soma.npz
316
+
317
+ # Tune analytical iterations (defaults: --body-iters 2 --full-iters 1)
318
+ python -m tools.mhr2soma --input path/to/parquet_dir --max-samples 100 --body-iters 3
319
+
320
+ # Analytical + autograd FK refinement (best accuracy)
321
+ python -m tools.mhr2soma --input path/to/parquet_dir --autograd-iters 10
322
+ ```
323
+
324
+ **Benchmark** (200 SAM 3D Body samples, RTX 5000 Ada):
325
+
326
+ | Method | Speed | Mean | Median | Max |
327
+ |---|---|---|---|---|
328
+ | Analytical (body=2, full=1) — **default** | **342 FPS** | 0.61 cm | 0.34 cm | 14.8 cm |
329
+ | Autograd FK (10 iters, lr=5e-3) | 161 FPS | 1.05 cm | 0.76 cm | 13.5 cm |
330
+ | Autograd FK (100 iters) | 16 FPS | 0.48 cm | 0.22 cm | 13.3 cm |
331
+
332
+ > **Note:** The `mhr2soma` tool's end-to-end throughput (~50 samp/s) is dominated by MHR identity model evaluation, not SOMA inversion. The MHR TorchScript model is called twice per sample (once to produce the rest shape, once for posed vertices). The SOMA inversion itself runs at 342 FPS.
333
+
334
+ ### AMASS dataset to SOMA
335
+
336
+ Convert [AMASS](https://amass.is.tue.mpg.de/) motion sequences (SMPL format `.npz` files) to SOMA.
337
+
338
+ > **Prerequisites:** Download the AMASS dataset from [amass.is.tue.mpg.de](https://amass.is.tue.mpg.de/) and place `SMPL_NEUTRAL.pkl` in `assets/SMPL/` (see SMPL installation above).
339
+
340
+ ```bash
341
+ # Single file — converts and renders a comparison video
342
+ python -m tools.convert_amass_to_soma --input path/to/amass_sequence.npz
343
+
344
+ # Single file — export .npz only (skip rendering)
345
+ python -m tools.convert_amass_to_soma --input path/to/amass_sequence.npz --output-npz out/soma.npz --no-render
346
+
347
+ # Batch convert entire dataset (mirrors folder structure)
348
+ python -m tools.convert_amass_to_soma --input-dir /data/amass/ --output-dir out/amass_soma/
349
+
350
+ # Shuffle file order (useful when running multiple workers in parallel)
351
+ python -m tools.convert_amass_to_soma --input-dir /data/amass/ --output-dir out/amass_soma/ --shuffle
352
+
353
+ # Tune analytical iterations
354
+ python -m tools.convert_amass_to_soma --input path/to/seq.npz --body-iters 3 --full-iters 1
355
+
356
+ # Analytical + autograd FK refinement (best accuracy)
357
+ python -m tools.convert_amass_to_soma --input path/to/seq.npz --autograd-iters 10
358
+ ```
359
+
360
+ The output `.npz` files contain:
361
+ - `poses`: `(N, J, 3)` rotation vectors per joint
362
+ - `root_translation`: `(N, 3)` root position in meters
363
+ - `joint_names`: list of SOMA joint names
364
+ - `per_vertex_error`: `(N, V)` reconstruction error per vertex
365
+ - `identity_coeffs` / `scale_params`: identity parameters used
366
+
367
+
368
+ **Benchmark** (A100):
369
+
370
+ | Method | Speed | Mean | Median | Max |
371
+ |---|---|---|---|---|
372
+ | Analytical (body=2, full=1) — **default** | **17393 FPS** | 0.53 cm | 0.32 cm | 8.8 cm |
373
+ | Autograd FK (10 iters, lr=5e-3) | 435 FPS | 0.78 cm | 0.64 cm | 8.8 cm |
374
+
375
+
376
+
377
+
378
+
379
+ ## Citation
380
+ If you use this code in your work, please cite:
381
+
382
+ ```bibtex
383
+ @article{soma2026,
384
+ title={SOMA: Unifying Parametric Human Body Models},
385
+ author={Jun Saito and Jiefeng Li and Michael de Ruyter and Miguel Guerrero and Edy Lim and Ehsan Hassani and Roger Blanco Ribera and Hyejin Moon and Magdalena Dadela and Marco Di Lucca and Qiao Wang and Xueting Li and Jan Kautz and Simon Yuen and Umar Iqbal},
386
+ eprint={2603.16858},
387
+ archivePrefix={arXiv},
388
+ year={2026},
389
+ url={https://arxiv.org/abs/2603.16858},
390
+ }
391
+ ```
392
+
393
+ ## Acknowledgements
394
+ - [SMPL-Body](https://smpl.is.tue.mpg.de/bodylicense.html) was used to create an interpolator between SMPL and SOMA mesh topologies, courtesy of the Max Planck Institute for Intelligent Systems.
395
+ - [MHR](https://github.com/facebookresearch/MHR) was used to learn the pose corrective model.
396
+ - [Anny](https://github.com/naver/anny) for [WARP](https://github.com/NVIDIA/warp)-based sparse linear blend skinning.
397
+ - [GarmentMeasurement](https://github.com/mbotsch/GarmentMeasurements) was used to augment the data in our shape model.
398
+
399
+
400
+ ## License
401
+
402
+ This codebase is licensed under [Apache-2.0](LICENSE).
403
+
404
+ This project will download and install additional third-party open source software projects. Review the license terms of these open source projects before use.