├── .gitattributes ├── .gitignore ├── DragAMove-test-batches ├── 00000.gif ├── 00000.pkl ├── 00000.png ├── 00001.gif ├── 00001.pkl ├── 00001.png ├── 00002.gif ├── 00002.pkl ├── 00002.png ├── 00003.gif ├── 00003.pkl ├── 00003.png ├── 00004.gif ├── 00004.pkl ├── 00004.png ├── 00005.gif ├── 00005.pkl ├── 00005.png ├── 00006.gif ├── 00006.pkl ├── 00006.png ├── 00007.gif ├── 00007.pkl ├── 00007.png ├── 00008.gif ├── 00008.pkl ├── 00008.png ├── 00009.gif ├── 00009.pkl ├── 00009.png ├── 00010.gif ├── 00010.pkl ├── 00010.png ├── 00011.gif ├── 00011.pkl ├── 00011.png ├── 00012.gif ├── 00012.pkl ├── 00012.png ├── 00013.gif ├── 00013.pkl ├── 00013.png ├── 00014.gif ├── 00014.pkl ├── 00014.png ├── 00015.gif ├── 00015.pkl ├── 00015.png ├── 00016.gif ├── 00016.pkl ├── 00016.png ├── 00017.gif ├── 00017.pkl ├── 00017.png ├── 00018.gif ├── 00018.pkl ├── 00018.png ├── 00019.gif ├── 00019.pkl ├── 00019.png ├── 00020.gif ├── 00020.pkl ├── 00020.png ├── 00021.gif ├── 00021.pkl ├── 00021.png ├── 00022.gif ├── 00022.pkl ├── 00022.png ├── 00023.gif ├── 00023.pkl ├── 00023.png ├── 00024.gif ├── 00024.pkl ├── 00024.png ├── 00025.gif ├── 00025.pkl ├── 00025.png ├── 00026.gif ├── 00026.pkl ├── 00026.png ├── 00027.gif ├── 00027.pkl ├── 00027.png ├── 00028.gif ├── 00028.pkl ├── 00028.png ├── 00029.gif ├── 00029.pkl ├── 00029.png ├── 00030.gif ├── 00030.pkl ├── 00030.png ├── 00031.gif ├── 00031.pkl ├── 00031.png ├── 00032.gif ├── 00032.pkl ├── 00032.png ├── 00033.gif ├── 00033.pkl ├── 00033.png ├── 00034.gif ├── 00034.pkl ├── 00034.png ├── 00035.gif ├── 00035.pkl ├── 00035.png ├── 00036.gif ├── 00036.pkl ├── 00036.png ├── 00037.gif ├── 00037.pkl ├── 00037.png ├── 00038.gif ├── 00038.pkl ├── 00038.png ├── 00039.gif ├── 00039.pkl ├── 00039.png ├── 00040.gif ├── 00040.pkl ├── 00040.png ├── 00041.gif ├── 00041.pkl ├── 00041.png ├── 00042.gif ├── 00042.pkl ├── 00042.png ├── 00043.gif ├── 00043.pkl ├── 00043.png ├── 00044.gif ├── 00044.pkl ├── 00044.png ├── 00045.gif ├── 00045.pkl ├── 00045.png ├── 00046.gif ├── 00046.pkl ├── 00046.png ├── 00047.gif ├── 00047.pkl ├── 00047.png ├── 00048.gif ├── 00048.pkl ├── 00048.png ├── 00049.gif ├── 00049.pkl ├── 00049.png ├── 00050.gif ├── 00050.pkl ├── 00050.png ├── 00051.gif ├── 00051.pkl ├── 00051.png ├── 00052.gif ├── 00052.pkl ├── 00052.png ├── 00053.gif ├── 00053.pkl ├── 00053.png ├── 00054.gif ├── 00054.pkl ├── 00054.png ├── 00055.gif ├── 00055.pkl ├── 00055.png ├── 00056.gif ├── 00056.pkl ├── 00056.png ├── 00057.gif ├── 00057.pkl ├── 00057.png ├── 00058.gif ├── 00058.pkl ├── 00058.png ├── 00059.gif ├── 00059.pkl ├── 00059.png ├── 00060.gif ├── 00060.pkl ├── 00060.png ├── 00061.gif ├── 00061.pkl ├── 00061.png ├── 00062.gif ├── 00062.pkl ├── 00062.png ├── 00063.gif ├── 00063.pkl ├── 00063.png ├── 00064.gif ├── 00064.pkl ├── 00064.png ├── 00065.gif ├── 00065.pkl ├── 00065.png ├── 00066.gif ├── 00066.pkl ├── 00066.png ├── 00067.gif ├── 00067.pkl ├── 00067.png ├── 00068.gif ├── 00068.pkl ├── 00068.png ├── 00069.gif ├── 00069.pkl ├── 00069.png ├── 00070.gif ├── 00070.pkl ├── 00070.png ├── 00071.gif ├── 00071.pkl ├── 00071.png ├── 00072.gif ├── 00072.pkl ├── 00072.png ├── 00073.gif ├── 00073.pkl ├── 00073.png ├── 00074.gif ├── 00074.pkl ├── 00074.png ├── 00075.gif ├── 00075.pkl ├── 00075.png ├── 00076.gif ├── 00076.pkl ├── 00076.png ├── 00077.gif ├── 00077.pkl ├── 00077.png ├── 00078.gif ├── 00078.pkl ├── 00078.png ├── 00079.gif ├── 00079.pkl ├── 00079.png ├── 00080.gif ├── 00080.pkl ├── 00080.png ├── 00081.gif ├── 00081.pkl ├── 00081.png ├── 00082.gif ├── 00082.pkl ├── 00082.png ├── 00083.gif ├── 00083.pkl ├── 00083.png ├── 00084.gif ├── 00084.pkl ├── 00084.png ├── 00085.gif ├── 00085.pkl ├── 00085.png ├── 00086.gif ├── 00086.pkl ├── 00086.png ├── 00087.gif ├── 00087.pkl ├── 00087.png ├── 00088.gif ├── 00088.pkl ├── 00088.png ├── 00089.gif ├── 00089.pkl ├── 00089.png ├── 00090.gif ├── 00090.pkl ├── 00090.png ├── 00091.gif ├── 00091.pkl ├── 00091.png ├── 00092.gif ├── 00092.pkl ├── 00092.png ├── 00093.gif ├── 00093.pkl ├── 00093.png ├── 00094.gif ├── 00094.pkl ├── 00094.png ├── 00095.gif ├── 00095.pkl ├── 00095.png ├── 00096.gif ├── 00096.pkl ├── 00096.png ├── 00097.gif ├── 00097.pkl ├── 00097.png ├── 00098.gif ├── 00098.pkl ├── 00098.png ├── 00099.gif ├── 00099.pkl └── 00099.png ├── README.md ├── configs └── train-puppet-master.yaml ├── data ├── README.md ├── drag-sampling │ ├── render │ │ ├── light.py │ │ ├── material.py │ │ ├── mesh.py │ │ ├── mlptexture.py │ │ ├── obj.py │ │ ├── regularizer.py │ │ ├── render.py │ │ ├── renderutils │ │ │ ├── __init__.py │ │ │ ├── bsdf.py │ │ │ ├── c_src │ │ │ │ ├── bsdf.cu │ │ │ │ ├── bsdf.h │ │ │ │ ├── common.cpp │ │ │ │ ├── common.h │ │ │ │ ├── cubemap.cu │ │ │ │ ├── cubemap.h │ │ │ │ ├── loss.cu │ │ │ │ ├── loss.h │ │ │ │ ├── mesh.cu │ │ │ │ ├── mesh.h │ │ │ │ ├── normal.cu │ │ │ │ ├── normal.h │ │ │ │ ├── tensor.h │ │ │ │ ├── torch_bindings.cpp │ │ │ │ ├── vec3f.h │ │ │ │ └── vec4f.h │ │ │ ├── loss.py │ │ │ ├── ops.py │ │ │ └── tests │ │ │ │ ├── test_bsdf.py │ │ │ │ ├── test_cubemap.py │ │ │ │ ├── test_loss.py │ │ │ │ ├── test_mesh.py │ │ │ │ └── test_perf.py │ │ ├── texture.py │ │ └── util.py │ └── sample_drags.py ├── examples.zip ├── objaverse-animation-HQ.json ├── objaverse-animation.json ├── rendering │ └── blender_render_animation.py └── svd-cache │ ├── compute_latents.py │ └── extract_embeddings.py ├── dataset.py ├── network_utils.py ├── networks.py ├── requirements.txt ├── train.py └── utils.py /.gitattributes: -------------------------------------------------------------------------------- 1 | *.zip filter=lfs diff=lfs merge=lfs -text 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | package-lock.json 2 | *.DS_Store 3 | __pycache__/ 4 | runs/ -------------------------------------------------------------------------------- /DragAMove-test-batches/00000.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00000.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00000.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00000.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00000.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00001.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00001.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00001.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00001.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00001.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00002.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00002.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00002.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00002.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00002.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00003.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00003.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00003.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00003.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00003.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00004.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00004.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00004.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00004.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00004.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00005.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00005.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00005.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00005.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00005.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00006.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00006.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00006.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00006.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00006.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00007.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00007.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00007.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00007.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00007.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00008.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00008.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00008.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00008.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00008.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00008.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00009.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00009.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00009.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00009.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00009.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00009.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00010.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00010.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00010.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00010.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00010.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00011.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00011.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00011.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00011.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00011.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00012.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00012.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00012.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00012.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00012.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00012.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00013.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00013.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00013.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00013.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00013.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00013.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00014.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00014.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00014.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00014.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00014.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00014.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00015.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00015.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00015.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00015.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00015.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00015.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00016.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00016.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00016.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00016.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00016.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00016.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00017.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00017.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00017.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00017.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00017.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00017.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00018.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00018.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00018.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00018.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00018.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00018.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00019.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00019.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00019.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00019.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00019.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00019.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00020.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00020.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00020.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00020.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00020.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00021.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00021.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00021.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00021.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00021.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00022.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00022.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00022.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00022.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00022.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00022.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00023.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00023.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00023.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00023.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00023.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00024.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00024.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00024.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00024.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00024.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00025.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00025.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00025.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00025.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00025.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00025.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00026.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00026.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00026.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00026.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00026.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00026.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00027.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00027.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00027.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00027.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00027.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00027.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00028.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00028.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00028.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00028.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00028.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00028.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00029.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00029.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00029.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00029.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00029.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00029.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00030.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00030.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00030.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00030.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00030.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00031.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00031.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00031.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00031.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00031.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00031.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00032.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00032.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00032.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00032.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00032.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00032.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00033.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00033.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00033.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00033.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00033.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00033.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00034.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00034.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00034.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00034.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00034.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00034.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00035.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00035.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00035.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00035.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00035.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00035.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00036.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00036.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00036.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00036.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00036.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00036.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00037.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00037.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00037.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00037.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00037.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00037.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00038.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00038.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00038.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00038.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00038.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00038.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00039.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00039.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00039.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00039.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00039.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00039.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00040.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00040.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00040.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00040.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00040.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00040.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00041.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00041.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00041.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00041.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00041.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00041.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00042.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00042.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00042.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00042.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00042.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00042.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00043.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00043.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00043.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00043.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00043.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00043.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00044.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00044.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00044.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00044.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00044.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00044.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00045.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00045.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00045.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00045.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00045.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00045.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00046.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00046.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00046.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00046.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00046.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00046.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00047.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00047.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00047.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00047.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00047.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00047.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00048.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00048.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00048.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00048.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00048.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00048.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00049.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00049.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00049.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00049.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00049.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00049.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00050.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00050.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00050.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00050.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00050.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00050.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00051.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00051.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00051.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00051.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00051.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00051.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00052.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00052.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00052.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00052.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00052.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00052.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00053.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00053.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00053.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00053.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00053.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00053.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00054.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00054.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00054.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00054.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00054.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00054.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00055.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00055.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00055.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00055.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00055.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00055.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00056.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00056.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00056.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00056.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00056.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00056.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00057.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00057.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00057.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00057.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00057.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00057.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00058.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00058.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00058.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00058.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00058.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00058.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00059.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00059.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00059.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00059.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00059.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00059.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00060.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00060.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00060.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00060.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00060.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00060.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00061.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00061.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00061.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00061.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00061.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00061.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00062.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00062.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00062.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00062.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00062.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00062.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00063.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00063.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00063.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00063.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00063.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00063.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00064.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00064.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00064.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00064.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00064.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00064.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00065.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00065.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00065.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00065.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00065.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00065.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00066.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00066.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00066.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00066.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00066.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00066.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00067.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00067.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00067.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00067.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00067.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00067.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00068.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00068.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00068.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00068.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00068.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00068.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00069.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00069.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00069.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00069.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00069.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00069.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00070.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00070.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00070.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00070.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00070.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00070.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00071.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00071.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00071.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00071.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00071.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00071.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00072.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00072.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00072.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00072.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00072.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00072.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00073.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00073.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00073.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00073.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00073.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00073.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00074.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00074.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00074.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00074.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00074.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00074.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00075.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00075.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00075.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00075.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00075.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00075.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00076.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00076.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00076.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00076.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00076.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00076.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00077.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00077.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00077.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00077.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00077.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00077.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00078.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00078.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00078.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00078.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00078.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00078.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00079.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00079.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00079.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00079.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00079.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00079.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00080.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00080.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00080.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00080.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00080.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00080.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00081.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00081.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00081.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00081.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00081.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00081.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00082.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00082.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00082.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00082.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00082.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00082.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00083.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00083.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00083.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00083.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00083.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00083.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00084.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00084.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00084.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00084.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00084.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00084.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00085.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00085.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00085.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00085.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00085.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00085.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00086.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00086.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00086.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00086.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00086.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00086.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00087.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00087.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00087.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00087.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00087.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00087.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00088.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00088.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00088.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00088.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00088.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00088.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00089.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00089.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00089.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00089.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00089.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00089.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00090.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00090.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00090.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00090.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00090.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00090.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00091.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00091.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00091.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00091.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00091.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00091.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00092.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00092.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00092.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00092.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00092.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00092.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00093.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00093.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00093.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00093.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00093.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00093.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00094.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00094.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00094.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00094.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00094.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00094.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00095.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00095.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00095.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00095.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00095.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00095.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00096.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00096.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00096.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00096.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00096.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00096.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00097.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00097.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00097.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00097.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00097.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00097.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00098.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00098.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00098.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00098.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00098.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00098.png -------------------------------------------------------------------------------- /DragAMove-test-batches/00099.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00099.gif -------------------------------------------------------------------------------- /DragAMove-test-batches/00099.pkl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00099.pkl -------------------------------------------------------------------------------- /DragAMove-test-batches/00099.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RuiningLi/puppet-master/f24d70878463cf2a20e2cd805de6846553908cf5/DragAMove-test-batches/00099.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Puppet-Master 2 | Official implementation of 'Puppet-Master: Scaling Interactive Video Generation as a Motion Prior for Part-Level Dynamics' 3 | 4 |
5 | [arXiv] 6 | [Demo] 7 | [Project] 8 | [BibTeX] 9 |
10 | 11 | ### News 12 | - **2024-Sept-25** Training script released. 13 | - **2024-Aug-17** Pre-trained checkpoints and demo released on Hugging Face. Check [here](https://huggingface.co/spaces/rayli/Puppet-Master) for demo and [here](https://huggingface.co/spaces/rayli/Puppet-Master/tree/main) for code. 14 | 15 | ### Examples 16 | 17 | ##### Man-Made Objects 18 |  19 | 20 | ##### Animals 21 |  22 | 23 | ##### Humans 24 |  25 | 26 | ### Objaverse-Animation & Objaverse-Animation-HQ 27 | See the `data` folder. 28 | 29 | ### Training 30 | We provide a minimum viable training script to demonstrate how to use our dataset to fine-tune Stable Video Diffusion. 31 | 32 | You can use the following command: 33 | ``` 34 | accelerate launch --num_processes 1 --mixed_precision fp16 train.py --config configs/train-puppet-master.yaml 35 | ``` 36 | 37 | To reduce the memory overhead, we cache all the latents and CLIP embeddings of the rendered frames. 38 | 39 | Note this is only a working example. Our final model is trained using a combined dataset of Objaverse-Animation-HQ and [Drag-a-Move](https://github.com/RuiningLi/DragAPart/tree/main/Drag-a-Move). 40 | 41 | ### Inference 42 | We provide an interactive demo [here](https://huggingface.co/spaces/rayli/Puppet-Master). Check it out! 43 | 44 | ### Evaluation 45 | Our evaluation utilizes an unseen test set of [Drag-a-Move](https://github.com/RuiningLi/DragAPart/tree/main/Drag-a-Move), consisting of 100 examples. 46 | The whole test set is provided in `DragAMove-test-batches` folder. 47 | The test examples can be read directly from the `xxxxx.pkl` files and are in the same format as those loaded from `DragVideoDataset` implemented in `dataset.py`. 48 | 49 | ### TODO 50 | - [x] Release pre-trained checkpoint & inference code. 51 | - [x] Release training code. 52 | - [x] Release Objaverse-Animation & Objaverse-Animation rendering script. 53 | 54 | ### Citation 55 | 56 | ``` 57 | @article{li2024puppetmaster, 58 | title = {Puppet-Master: Scaling Interactive Video Generation as a Motion Prior for Part-Level Dynamics}, 59 | author = {Li, Ruining and Zheng, Chuanxia and Rupprecht, Christian and Vedaldi, Andrea}, 60 | journal = {arXiv preprint arXiv:2408.04631}, 61 | year = {2024} 62 | } 63 | ``` 64 | -------------------------------------------------------------------------------- /configs/train-puppet-master.yaml: -------------------------------------------------------------------------------- 1 | pretrained_model_name_or_local_dir: stabilityai/stable-video-diffusion-img2vid 2 | 3 | results_dir: ./runs 4 | num_max_drags: 5 5 | test_dir: ./DragAMove-test-batches 6 | 7 | random_seed: 1024 8 | num_steps: 1500000 9 | global_batch_size: 1 10 | num_workers: 2 11 | log_every: 50 12 | visualize_every: 200 13 | ckpt_every: 50000 14 | vae: "ema" 15 | learning_rate: 1.e-5 16 | 17 | log_sigma_std: 1.6 18 | log_sigma_mean: 0.7 19 | 20 | zero_init: true 21 | 22 | model_args: 23 | cond_dropout_prob: 0.1 24 | drag_token_cross_attn: true 25 | use_modulate: true 26 | pos_embed_dim: 64 27 | drag_embedder_out_channels: [256, 320, 320] 28 | 29 | dataset_args: 30 | latent_dist_roots: /pattern/of/all/precomputed/latents/files/at/the/object/level/*/* 31 | embedding_roots: /pattern/of/all/precomputed/embedding/files/at/the/object/level/*/* 32 | drag_roots: /pattern/of/all/precomputed/drag/samples/at/the/object/level/*/* 33 | num_max_drags: 5 34 | 35 | non_first_frame_weight: 1 36 | weight_increasing: true 37 | enable_gradient_checkpointing: true 38 | gradient_accumulation_steps: 64 39 | max_grad_norm: 1 -------------------------------------------------------------------------------- /data/README.md: -------------------------------------------------------------------------------- 1 | # Objaverse-Animation & Objaverse-Animation-HQ 2 | 3 |  4 | 5 | ### Filtering 6 | The `objaverse-animation.json` and `objaverse-animation-HQ.json` provide the IDs of the animated 3D models in Objaverse. 7 | 8 | ### Rendering 9 | 1. The rendering script is tested on Linux with Blender 3.2.2: 10 | ``` 11 | wget https://download.blender.org/release/Blender3.2/blender-3.2.2-linux-x64.tar.xz && \ 12 | tar -xf blender-3.2.2-linux-x64.tar.xz && \ 13 | rm blender-3.2.2-linux-x64.tar.xz 14 | ``` 15 | 16 | 2. Download the Objaverse dataset ([instructions](https://objaverse.allenai.org/)). 17 | 18 | 3. Use the following command 19 | ``` 20 | /path/to/blender-3.2.2-linux-x64/blender -noaudio -b -P blender_render_animation.py -- --object_path /path/to/glb --output_dir /path/to/output/directory --only_northern_hemisphere --engine CYCLES --num_renders 12 --max_n_frames 32 --uniform_azimuth --render 21 | ``` 22 | 23 | ### Exporting Meshes 24 | The script also allows you to export a sequence of vertex-aligned .obj meshes for each animated 3D model, which can be useful for other applications: 25 | ``` 26 | /path/to/blender-3.2.2-linux-x64/blender -noaudio -b -P blender_render_animation.py -- --object_path /path/to/glb --output_dir /path/to/output/directory --only_northern_hemisphere --engine CYCLES --max_n_frames 32 --export_mesh 27 | ``` 28 | 29 | ### Sampling drags 30 | 0. Before proceeding, make sure you have the animations rendered and mesh exported. We use the mesh to sample 3D trajectories and use the camera matrices saved from rendering to project the trajectories to the image space. 31 | 32 | 1. Use the following command 33 | ``` 34 | python sample_drags.py --render_root /path/to/the/render/root --save_dir /path/to/the/dir/to/save/the/results --num_renders 12 --render_part_mask --sample_drags --num_samples 20 --visualize 35 | ``` 36 | 37 | Notes: 38 | - The `--render_root` is the `output_dir` specified in blender rendering. 39 | - The `--num_renders` value should be consistent with the one used in blender rendering. 40 | - `--visualize` flag should be disabled for efficiency concern. 41 | 42 | ### Pre-Computing Image Embeddings & VAE Latents 43 | 44 | Please refer to the scripts under `svd-cache` folder. -------------------------------------------------------------------------------- /data/drag-sampling/render/material.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 2 | # 3 | # NVIDIA CORPORATION, its affiliates and licensors retain all intellectual 4 | # property and proprietary rights in and to this material, related 5 | # documentation and any modifications thereto. Any use, reproduction, 6 | # disclosure or distribution of this material and related documentation 7 | # without an express license agreement from NVIDIA CORPORATION or 8 | # its affiliates is strictly prohibited. 9 | 10 | import os 11 | import numpy as np 12 | import torch 13 | 14 | from . import util 15 | from . import texture 16 | 17 | ###################################################################################### 18 | # Wrapper to make materials behave like a python dict, but register textures as 19 | # torch.nn.Module parameters. 20 | ###################################################################################### 21 | class Material(torch.nn.Module): 22 | def __init__(self, mat_dict): 23 | super(Material, self).__init__() 24 | self.mat_keys = set() 25 | for key in mat_dict.keys(): 26 | self.mat_keys.add(key) 27 | self[key] = mat_dict[key] 28 | 29 | def __contains__(self, key): 30 | return hasattr(self, key) 31 | 32 | def __getitem__(self, key): 33 | return getattr(self, key) 34 | 35 | def __setitem__(self, key, val): 36 | self.mat_keys.add(key) 37 | setattr(self, key, val) 38 | 39 | def __delitem__(self, key): 40 | self.mat_keys.remove(key) 41 | delattr(self, key) 42 | 43 | def keys(self): 44 | return self.mat_keys 45 | 46 | ###################################################################################### 47 | # .mtl material format loading / storing 48 | ###################################################################################### 49 | @torch.no_grad() 50 | def load_mtl(fn, clear_ks=True, device="cuda"): 51 | import re 52 | mtl_path = os.path.dirname(fn) 53 | 54 | # Read file 55 | with open(fn, 'r') as f: 56 | lines = f.readlines() 57 | 58 | # Parse materials 59 | materials = [] 60 | for line in lines: 61 | split_line = re.split(' +|\t+|\n+', line.strip()) 62 | prefix = split_line[0].lower() 63 | data = split_line[1:] 64 | if 'newmtl' in prefix: 65 | material = Material({'name' : data[0]}) 66 | materials += [material] 67 | elif materials: 68 | if 'bsdf' in prefix or 'map_kd' in prefix or 'map_ks' in prefix or 'bump' in prefix: 69 | material[prefix] = data[0] 70 | else: 71 | material[prefix] = torch.tensor(tuple(float(d) for d in data), dtype=torch.float32, device=device) 72 | 73 | # Convert everything to textures. Our code expects 'kd' and 'ks' to be texture maps. So replace constants with 1x1 maps 74 | for mat in materials: 75 | if not 'bsdf' in mat: 76 | mat['bsdf'] = 'pbr' 77 | 78 | if 'map_kd' in mat: 79 | mat['kd'] = texture.load_texture2D(os.path.join(mtl_path, mat['map_kd']), channels=3) 80 | else: 81 | mat['kd'] = texture.Texture2D(mat['kd']) 82 | 83 | if 'map_ks' in mat: 84 | mat['ks'] = texture.load_texture2D(os.path.join(mtl_path, mat['map_ks']), channels=3) 85 | elif 'ks' in mat: 86 | mat['ks'] = texture.Texture2D(mat['ks']) 87 | 88 | if "map_ka" in mat: 89 | mat["ka"] = texture.load_texture2D(os.path.join(mtl_path, mat["map_ka"])) 90 | elif "ka" in mat: 91 | mat["ka"] = texture.Texture2D(mat["ka"]) 92 | 93 | if 'bump' in mat: 94 | mat['normal'] = texture.load_texture2D(os.path.join(mtl_path, mat['bump']), lambda_fn=lambda x: x * 2 - 1, channels=3) 95 | 96 | # Convert Kd from sRGB to linear RGB 97 | # mat['kd'] = texture.srgb_to_rgb(mat['kd']) 98 | 99 | if clear_ks and 'ks' in mat: 100 | # Override ORM occlusion (red) channel by zeros. We hijack this channel 101 | for mip in mat['ks'].getMips(): 102 | mip[..., 0] = 0.0 103 | 104 | return materials 105 | 106 | @torch.no_grad() 107 | def save_mtl(fn, material): 108 | folder = os.path.dirname(fn) 109 | with open(fn, "w") as f: 110 | f.write('newmtl defaultMat\n') 111 | if material is not None: 112 | f.write('bsdf %s\n' % material['bsdf']) 113 | if 'kd' in material.keys(): 114 | f.write('map_Kd texture_kd.png\n') 115 | texture.save_texture2D(os.path.join(folder, 'texture_kd.png'), texture.rgb_to_srgb(material['kd'])) 116 | if 'ks' in material.keys(): 117 | f.write('map_Ks texture_ks.png\n') 118 | texture.save_texture2D(os.path.join(folder, 'texture_ks.png'), material['ks']) 119 | if 'normal' in material.keys(): 120 | f.write('bump texture_n.png\n') 121 | texture.save_texture2D(os.path.join(folder, 'texture_n.png'), material['normal'], lambda_fn=lambda x:(util.safe_normalize(x)+1)*0.5) 122 | else: 123 | f.write('Kd 1 1 1\n') 124 | f.write('Ks 0 0 0\n') 125 | f.write('Ka 0 0 0\n') 126 | f.write('Tf 1 1 1\n') 127 | f.write('Ni 1\n') 128 | f.write('Ns 0\n') 129 | 130 | ###################################################################################### 131 | # Merge multiple materials into a single uber-material 132 | ###################################################################################### 133 | 134 | def _upscale_replicate(x, full_res, tex=""): 135 | x = x.permute(0, 3, 1, 2) 136 | x = torch.nn.functional.pad(x, (0, full_res[1] - x.shape[3], 0, full_res[0] - x.shape[2]), 'replicate') 137 | ret = x.permute(0, 2, 3, 1).contiguous() 138 | return ret 139 | 140 | def merge_materials(materials, texcoords, tfaces, mfaces): 141 | assert len(materials) > 0 142 | for mat in materials: 143 | assert mat['bsdf'] == materials[0]['bsdf'], "All materials must have the same BSDF (uber shader)" 144 | assert ('normal' in mat) is ('normal' in materials[0]), "All materials must have either normal map enabled or disabled" 145 | 146 | uber_material = Material({ 147 | 'name' : 'uber_material', 148 | 'bsdf' : materials[0]['bsdf'], 149 | }) 150 | 151 | textures = ['kd', 'ks', 'normal', 'ka'] 152 | 153 | # Find maximum texture resolution across all materials and textures 154 | max_res = None 155 | for mat in materials: 156 | for tex in textures: 157 | tex_res = np.array(mat[tex].getRes()) if tex in mat else np.array([1, 1]) 158 | max_res = np.maximum(max_res, tex_res) if max_res is not None else tex_res 159 | 160 | # Compute size of compund texture and round up to nearest PoT 161 | full_res = 2**np.ceil(np.log2(max_res * np.array([1, len(materials)]))).astype(np.int) 162 | thresh = 65536 163 | if full_res[1] > thresh: 164 | scale = thresh / full_res[1] 165 | full_res[1] = thresh 166 | max_res[1] = (max_res[1] * scale).astype(np.int) 167 | 168 | # Normalize texture resolution across all materials & combine into a single large texture 169 | for tex in textures: 170 | if tex in materials[0]: 171 | tex_data = torch.cat(tuple(util.scale_img_nhwc(mat[tex].data, tuple(max_res)) for mat in materials), dim=2) # Lay out all textures horizontally, NHWC so dim2 is x 172 | tex_data = _upscale_replicate(tex_data, full_res, tex) 173 | uber_material[tex] = texture.Texture2D(tex_data) 174 | 175 | # Compute scaling values for used / unused texture area 176 | s_coeff = [full_res[0] / max_res[0], full_res[1] / max_res[1]] 177 | 178 | # Recompute texture coordinates to cooincide with new composite texture 179 | new_tverts = {} 180 | new_tverts_data = [] 181 | for fi in range(len(tfaces)): 182 | matIdx = mfaces[fi] 183 | if matIdx is None: 184 | matIdx = 0 185 | for vi in range(3): 186 | ti = tfaces[fi][vi] 187 | if not (ti in new_tverts): 188 | new_tverts[ti] = {} 189 | if not (matIdx in new_tverts[ti]): # create new vertex 190 | if ti >= 0: 191 | new_tverts_data.append([(matIdx + float(texcoords[ti][0]) % 1) / s_coeff[1], float(texcoords[ti][1]) % 1 / s_coeff[0]]) # Offset texture coodrinate (x direction) by material id & scale to local space. Note, texcoords are (u,v) but texture is stored (w,h) so the indexes swap here 192 | else: 193 | new_tverts_data.append([(matIdx + 0.5) / s_coeff[1], 0.5 / s_coeff[0]]) 194 | new_tverts[ti][matIdx] = len(new_tverts_data) - 1 195 | tfaces[fi][vi] = new_tverts[ti][matIdx] # reindex vertex 196 | 197 | return uber_material, new_tverts_data, tfaces 198 | 199 | -------------------------------------------------------------------------------- /data/drag-sampling/render/mlptexture.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 2 | # 3 | # NVIDIA CORPORATION, its affiliates and licensors retain all intellectual 4 | # property and proprietary rights in and to this material, related 5 | # documentation and any modifications thereto. Any use, reproduction, 6 | # disclosure or distribution of this material and related documentation 7 | # without an express license agreement from NVIDIA CORPORATION or 8 | # its affiliates is strictly prohibited. 9 | 10 | import torch 11 | import tinycudann as tcnn 12 | import numpy as np 13 | 14 | ####################################################################################################################################################### 15 | # Small MLP using PyTorch primitives, internal helper class 16 | ####################################################################################################################################################### 17 | 18 | class _MLP(torch.nn.Module): 19 | def __init__(self, cfg, loss_scale=1.0): 20 | super(_MLP, self).__init__() 21 | self.loss_scale = loss_scale 22 | net = (torch.nn.Linear(cfg['n_input_dims'], cfg['n_neurons'], bias=False), torch.nn.ReLU()) 23 | for i in range(cfg['n_hidden_layers']-1): 24 | net = net + (torch.nn.Linear(cfg['n_neurons'], cfg['n_neurons'], bias=False), torch.nn.ReLU()) 25 | net = net + (torch.nn.Linear(cfg['n_neurons'], cfg['n_output_dims'], bias=False),) 26 | self.net = torch.nn.Sequential(*net).cuda() 27 | 28 | self.net.apply(self._init_weights) 29 | 30 | if self.loss_scale != 1.0: 31 | self.net.register_full_backward_hook(lambda module, grad_i, grad_o: (grad_i[0] * self.loss_scale, )) 32 | 33 | def forward(self, x): 34 | return self.net(x.to(torch.float32)) 35 | 36 | @staticmethod 37 | def _init_weights(m): 38 | if type(m) == torch.nn.Linear: 39 | torch.nn.init.kaiming_uniform_(m.weight, nonlinearity='relu') 40 | if hasattr(m.bias, 'data'): 41 | m.bias.data.fill_(0.0) 42 | 43 | ####################################################################################################################################################### 44 | # Outward visible MLP class 45 | ####################################################################################################################################################### 46 | 47 | class MLPTexture3D(torch.nn.Module): 48 | def __init__(self, AABB, channels = 3, internal_dims = 32, hidden = 2, min_max = None): 49 | super(MLPTexture3D, self).__init__() 50 | 51 | self.channels = channels 52 | self.internal_dims = internal_dims 53 | self.AABB = AABB 54 | self.min_max = min_max 55 | 56 | # Setup positional encoding, see https://github.com/NVlabs/tiny-cuda-nn for details 57 | desired_resolution = 4096 58 | base_grid_resolution = 16 59 | num_levels = 16 60 | per_level_scale = np.exp(np.log(desired_resolution / base_grid_resolution) / (num_levels-1)) 61 | 62 | enc_cfg = { 63 | "otype": "HashGrid", 64 | "n_levels": num_levels, 65 | "n_features_per_level": 2, 66 | "log2_hashmap_size": 19, 67 | "base_resolution": base_grid_resolution, 68 | "per_level_scale" : per_level_scale 69 | } 70 | 71 | gradient_scaling = 128.0 72 | self.encoder = tcnn.Encoding(3, enc_cfg) 73 | self.encoder.register_full_backward_hook(lambda module, grad_i, grad_o: (grad_i[0] / gradient_scaling, )) 74 | 75 | # Setup MLP 76 | mlp_cfg = { 77 | "n_input_dims" : self.encoder.n_output_dims, 78 | "n_output_dims" : self.channels, 79 | "n_hidden_layers" : hidden, 80 | "n_neurons" : self.internal_dims 81 | } 82 | self.net = _MLP(mlp_cfg, gradient_scaling) 83 | print("Encoder output: %d dims" % (self.encoder.n_output_dims)) 84 | 85 | # Sample texture at a given location 86 | def sample(self, texc): 87 | _texc = (texc.view(-1, 3) - self.AABB[0][None, ...]) / (self.AABB[1][None, ...] - self.AABB[0][None, ...]) 88 | _texc = torch.clamp(_texc, min=0, max=1) 89 | 90 | p_enc = self.encoder(_texc.contiguous()) 91 | out = self.net.forward(p_enc) 92 | 93 | # Sigmoid limit and scale to the allowed range 94 | out = torch.sigmoid(out) * (self.min_max[1][None, :] - self.min_max[0][None, :]) + self.min_max[0][None, :] 95 | 96 | return out.view(*texc.shape[:-1], self.channels) # Remap to [n, h, w, c] 97 | 98 | # In-place clamp with no derivative to make sure values are in valid range after training 99 | def clamp_(self): 100 | pass 101 | 102 | def cleanup(self): 103 | tcnn.free_temporary_memory() 104 | -------------------------------------------------------------------------------- /data/drag-sampling/render/regularizer.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 2 | # 3 | # NVIDIA CORPORATION, its affiliates and licensors retain all intellectual 4 | # property and proprietary rights in and to this material, related 5 | # documentation and any modifications thereto. Any use, reproduction, 6 | # disclosure or distribution of this material and related documentation 7 | # without an express license agreement from NVIDIA CORPORATION or 8 | # its affiliates is strictly prohibited. 9 | 10 | import torch 11 | import nvdiffrast.torch as dr 12 | 13 | from . import util 14 | from . import mesh 15 | 16 | ###################################################################################### 17 | # Computes the image gradient, useful for kd/ks smoothness losses 18 | ###################################################################################### 19 | def image_grad(buf, std=0.01): 20 | t, s = torch.meshgrid(torch.linspace(-1.0 + 1.0 / buf.shape[1], 1.0 - 1.0 / buf.shape[1], buf.shape[1], device="cuda"), 21 | torch.linspace(-1.0 + 1.0 / buf.shape[2], 1.0 - 1.0 / buf.shape[2], buf.shape[2], device="cuda"), 22 | indexing='ij') 23 | tc = torch.normal(mean=0, std=std, size=(buf.shape[0], buf.shape[1], buf.shape[2], 2), device="cuda") + torch.stack((s, t), dim=-1)[None, ...] 24 | tap = dr.texture(buf, tc, filter_mode='linear', boundary_mode='clamp') 25 | return torch.abs(tap[..., :-1] - buf[..., :-1]) * tap[..., -1:] * buf[..., -1:] 26 | 27 | ###################################################################################### 28 | # Computes the avergage edge length of a mesh. 29 | # Rough estimate of the tessellation of a mesh. Can be used e.g. to clamp gradients 30 | ###################################################################################### 31 | def avg_edge_length(v_pos, t_pos_idx): 32 | e_pos_idx = mesh.compute_edges(t_pos_idx) 33 | edge_len = util.length(v_pos[e_pos_idx[:, 0]] - v_pos[e_pos_idx[:, 1]]) 34 | return torch.mean(edge_len) 35 | 36 | ###################################################################################### 37 | # Laplacian regularization using umbrella operator (Fujiwara / Desbrun). 38 | # https://mgarland.org/class/geom04/material/smoothing.pdf 39 | ###################################################################################### 40 | def laplace_regularizer_const(v_pos, t_pos_idx): 41 | term = torch.zeros_like(v_pos) 42 | norm = torch.zeros_like(v_pos[..., 0:1]) 43 | 44 | v0 = v_pos[t_pos_idx[:, 0], :] 45 | v1 = v_pos[t_pos_idx[:, 1], :] 46 | v2 = v_pos[t_pos_idx[:, 2], :] 47 | 48 | term.scatter_add_(0, t_pos_idx[:, 0:1].repeat(1,3), (v1 - v0) + (v2 - v0)) 49 | term.scatter_add_(0, t_pos_idx[:, 1:2].repeat(1,3), (v0 - v1) + (v2 - v1)) 50 | term.scatter_add_(0, t_pos_idx[:, 2:3].repeat(1,3), (v0 - v2) + (v1 - v2)) 51 | 52 | two = torch.ones_like(v0) * 2.0 53 | norm.scatter_add_(0, t_pos_idx[:, 0:1], two) 54 | norm.scatter_add_(0, t_pos_idx[:, 1:2], two) 55 | norm.scatter_add_(0, t_pos_idx[:, 2:3], two) 56 | 57 | term = term / torch.clamp(norm, min=1.0) 58 | 59 | return torch.mean(term**2) 60 | 61 | ###################################################################################### 62 | # Smooth vertex normals 63 | ###################################################################################### 64 | def normal_consistency(v_pos, t_pos_idx): 65 | # Compute face normals 66 | v0 = v_pos[t_pos_idx[:, 0], :] 67 | v1 = v_pos[t_pos_idx[:, 1], :] 68 | v2 = v_pos[t_pos_idx[:, 2], :] 69 | 70 | face_normals = util.safe_normalize(torch.cross(v1 - v0, v2 - v0)) 71 | 72 | tris_per_edge = mesh.compute_edge_to_face_mapping(t_pos_idx) 73 | 74 | # Fetch normals for both faces sharind an edge 75 | n0 = face_normals[tris_per_edge[:, 0], :] 76 | n1 = face_normals[tris_per_edge[:, 1], :] 77 | 78 | # Compute error metric based on normal difference 79 | term = torch.clamp(util.dot(n0, n1), min=-1.0, max=1.0) 80 | term = (1.0 - term) * 0.5 81 | 82 | return torch.mean(torch.abs(term)) 83 | -------------------------------------------------------------------------------- /data/drag-sampling/render/renderutils/__init__.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 2 | # 3 | # NVIDIA CORPORATION, its affiliates and licensors retain all intellectual 4 | # property and proprietary rights in and to this material, related 5 | # documentation and any modifications thereto. Any use, reproduction, 6 | # disclosure or distribution of this material and related documentation 7 | # without an express license agreement from NVIDIA CORPORATION or 8 | # its affiliates is strictly prohibited. 9 | 10 | from .ops import xfm_points, xfm_vectors, image_loss, diffuse_cubemap, specular_cubemap, prepare_shading_normal, lambert, frostbite_diffuse, pbr_specular, pbr_bsdf, _fresnel_shlick, _ndf_ggx, _lambda_ggx, _masking_smith 11 | __all__ = ["xfm_vectors", "xfm_points", "image_loss", "diffuse_cubemap","specular_cubemap", "prepare_shading_normal", "lambert", "frostbite_diffuse", "pbr_specular", "pbr_bsdf", "_fresnel_shlick", "_ndf_ggx", "_lambda_ggx", "_masking_smith", ] 12 | -------------------------------------------------------------------------------- /data/drag-sampling/render/renderutils/bsdf.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 2 | # 3 | # NVIDIA CORPORATION, its affiliates and licensors retain all intellectual 4 | # property and proprietary rights in and to this material, related 5 | # documentation and any modifications thereto. Any use, reproduction, 6 | # disclosure or distribution of this material and related documentation 7 | # without an express license agreement from NVIDIA CORPORATION or 8 | # its affiliates is strictly prohibited. 9 | 10 | import math 11 | import torch 12 | 13 | NORMAL_THRESHOLD = 0.1 14 | 15 | ################################################################################ 16 | # Vector utility functions 17 | ################################################################################ 18 | 19 | def _dot(x, y): 20 | return torch.sum(x*y, -1, keepdim=True) 21 | 22 | def _reflect(x, n): 23 | return 2*_dot(x, n)*n - x 24 | 25 | def _safe_normalize(x): 26 | return torch.nn.functional.normalize(x, dim = -1) 27 | 28 | def _bend_normal(view_vec, smooth_nrm, geom_nrm, two_sided_shading): 29 | # Swap normal direction for backfacing surfaces 30 | if two_sided_shading: 31 | smooth_nrm = torch.where(_dot(geom_nrm, view_vec) > 0, smooth_nrm, -smooth_nrm) 32 | geom_nrm = torch.where(_dot(geom_nrm, view_vec) > 0, geom_nrm, -geom_nrm) 33 | 34 | t = torch.clamp(_dot(view_vec, smooth_nrm) / NORMAL_THRESHOLD, min=0, max=1) 35 | return torch.lerp(geom_nrm, smooth_nrm, t) 36 | 37 | 38 | def _perturb_normal(perturbed_nrm, smooth_nrm, smooth_tng, opengl): 39 | smooth_bitang = _safe_normalize(torch.cross(smooth_tng, smooth_nrm)) 40 | if opengl: 41 | shading_nrm = smooth_tng * perturbed_nrm[..., 0:1] - smooth_bitang * perturbed_nrm[..., 1:2] + smooth_nrm * torch.clamp(perturbed_nrm[..., 2:3], min=0.0) 42 | else: 43 | shading_nrm = smooth_tng * perturbed_nrm[..., 0:1] + smooth_bitang * perturbed_nrm[..., 1:2] + smooth_nrm * torch.clamp(perturbed_nrm[..., 2:3], min=0.0) 44 | return _safe_normalize(shading_nrm) 45 | 46 | def bsdf_prepare_shading_normal(pos, view_pos, perturbed_nrm, smooth_nrm, smooth_tng, geom_nrm, two_sided_shading, opengl): 47 | smooth_nrm = _safe_normalize(smooth_nrm) 48 | smooth_tng = _safe_normalize(smooth_tng) 49 | view_vec = _safe_normalize(view_pos - pos) 50 | shading_nrm = _perturb_normal(perturbed_nrm, smooth_nrm, smooth_tng, opengl) 51 | return _bend_normal(view_vec, shading_nrm, geom_nrm, two_sided_shading) 52 | 53 | ################################################################################ 54 | # Simple lambertian diffuse BSDF 55 | ################################################################################ 56 | 57 | def bsdf_lambert(nrm, wi): 58 | return torch.clamp(_dot(nrm, wi), min=0.0) / math.pi 59 | 60 | ################################################################################ 61 | # Frostbite diffuse 62 | ################################################################################ 63 | 64 | def bsdf_frostbite(nrm, wi, wo, linearRoughness): 65 | wiDotN = _dot(wi, nrm) 66 | woDotN = _dot(wo, nrm) 67 | 68 | h = _safe_normalize(wo + wi) 69 | wiDotH = _dot(wi, h) 70 | 71 | energyBias = 0.5 * linearRoughness 72 | energyFactor = 1.0 - (0.51 / 1.51) * linearRoughness 73 | f90 = energyBias + 2.0 * wiDotH * wiDotH * linearRoughness 74 | f0 = 1.0 75 | 76 | wiScatter = bsdf_fresnel_shlick(f0, f90, wiDotN) 77 | woScatter = bsdf_fresnel_shlick(f0, f90, woDotN) 78 | res = wiScatter * woScatter * energyFactor 79 | return torch.where((wiDotN > 0.0) & (woDotN > 0.0), res, torch.zeros_like(res)) 80 | 81 | ################################################################################ 82 | # Phong specular, loosely based on mitsuba implementation 83 | ################################################################################ 84 | 85 | def bsdf_phong(nrm, wo, wi, N): 86 | dp_r = torch.clamp(_dot(_reflect(wo, nrm), wi), min=0.0, max=1.0) 87 | dp_l = torch.clamp(_dot(nrm, wi), min=0.0, max=1.0) 88 | return (dp_r ** N) * dp_l * (N + 2) / (2 * math.pi) 89 | 90 | ################################################################################ 91 | # PBR's implementation of GGX specular 92 | ################################################################################ 93 | 94 | specular_epsilon = 1e-4 95 | 96 | def bsdf_fresnel_shlick(f0, f90, cosTheta): 97 | _cosTheta = torch.clamp(cosTheta, min=specular_epsilon, max=1.0 - specular_epsilon) 98 | return f0 + (f90 - f0) * (1.0 - _cosTheta) ** 5.0 99 | 100 | def bsdf_ndf_ggx(alphaSqr, cosTheta): 101 | _cosTheta = torch.clamp(cosTheta, min=specular_epsilon, max=1.0 - specular_epsilon) 102 | d = (_cosTheta * alphaSqr - _cosTheta) * _cosTheta + 1 103 | return alphaSqr / (d * d * math.pi) 104 | 105 | def bsdf_lambda_ggx(alphaSqr, cosTheta): 106 | _cosTheta = torch.clamp(cosTheta, min=specular_epsilon, max=1.0 - specular_epsilon) 107 | cosThetaSqr = _cosTheta * _cosTheta 108 | tanThetaSqr = (1.0 - cosThetaSqr) / cosThetaSqr 109 | res = 0.5 * (torch.sqrt(1 + alphaSqr * tanThetaSqr) - 1.0) 110 | return res 111 | 112 | def bsdf_masking_smith_ggx_correlated(alphaSqr, cosThetaI, cosThetaO): 113 | lambdaI = bsdf_lambda_ggx(alphaSqr, cosThetaI) 114 | lambdaO = bsdf_lambda_ggx(alphaSqr, cosThetaO) 115 | return 1 / (1 + lambdaI + lambdaO) 116 | 117 | def bsdf_pbr_specular(col, nrm, wo, wi, alpha, min_roughness=0.08): 118 | _alpha = torch.clamp(alpha, min=min_roughness*min_roughness, max=1.0) 119 | alphaSqr = _alpha * _alpha 120 | 121 | h = _safe_normalize(wo + wi) 122 | woDotN = _dot(wo, nrm) 123 | wiDotN = _dot(wi, nrm) 124 | woDotH = _dot(wo, h) 125 | nDotH = _dot(nrm, h) 126 | 127 | D = bsdf_ndf_ggx(alphaSqr, nDotH) 128 | G = bsdf_masking_smith_ggx_correlated(alphaSqr, woDotN, wiDotN) 129 | F = bsdf_fresnel_shlick(col, 1, woDotH) 130 | 131 | w = F * D * G * 0.25 / torch.clamp(woDotN, min=specular_epsilon) 132 | 133 | frontfacing = (woDotN > specular_epsilon) & (wiDotN > specular_epsilon) 134 | return torch.where(frontfacing, w, torch.zeros_like(w)) 135 | 136 | def bsdf_pbr(kd, arm, pos, nrm, view_pos, light_pos, min_roughness, BSDF): 137 | wo = _safe_normalize(view_pos - pos) 138 | wi = _safe_normalize(light_pos - pos) 139 | 140 | spec_str = arm[..., 0:1] # x component 141 | roughness = arm[..., 1:2] # y component 142 | metallic = arm[..., 2:3] # z component 143 | ks = (0.04 * (1.0 - metallic) + kd * metallic) * (1 - spec_str) 144 | kd = kd * (1.0 - metallic) 145 | 146 | if BSDF == 0: 147 | diffuse = kd * bsdf_lambert(nrm, wi) 148 | else: 149 | diffuse = kd * bsdf_frostbite(nrm, wi, wo, roughness) 150 | specular = bsdf_pbr_specular(ks, nrm, wo, wi, roughness*roughness, min_roughness=min_roughness) 151 | return diffuse + specular 152 | -------------------------------------------------------------------------------- /data/drag-sampling/render/renderutils/c_src/bsdf.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 3 | * 4 | * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual 5 | * property and proprietary rights in and to this material, related 6 | * documentation and any modifications thereto. Any use, reproduction, 7 | * disclosure or distribution of this material and related documentation 8 | * without an express license agreement from NVIDIA CORPORATION or 9 | * its affiliates is strictly prohibited. 10 | */ 11 | 12 | #pragma once 13 | 14 | #include "common.h" 15 | 16 | struct LambertKernelParams 17 | { 18 | Tensor nrm; 19 | Tensor wi; 20 | Tensor out; 21 | dim3 gridSize; 22 | }; 23 | 24 | struct FrostbiteDiffuseKernelParams 25 | { 26 | Tensor nrm; 27 | Tensor wi; 28 | Tensor wo; 29 | Tensor linearRoughness; 30 | Tensor out; 31 | dim3 gridSize; 32 | }; 33 | 34 | struct FresnelShlickKernelParams 35 | { 36 | Tensor f0; 37 | Tensor f90; 38 | Tensor cosTheta; 39 | Tensor out; 40 | dim3 gridSize; 41 | }; 42 | 43 | struct NdfGGXParams 44 | { 45 | Tensor alphaSqr; 46 | Tensor cosTheta; 47 | Tensor out; 48 | dim3 gridSize; 49 | }; 50 | 51 | struct MaskingSmithParams 52 | { 53 | Tensor alphaSqr; 54 | Tensor cosThetaI; 55 | Tensor cosThetaO; 56 | Tensor out; 57 | dim3 gridSize; 58 | }; 59 | 60 | struct PbrSpecular 61 | { 62 | Tensor col; 63 | Tensor nrm; 64 | Tensor wo; 65 | Tensor wi; 66 | Tensor alpha; 67 | Tensor out; 68 | dim3 gridSize; 69 | float min_roughness; 70 | }; 71 | 72 | struct PbrBSDF 73 | { 74 | Tensor kd; 75 | Tensor arm; 76 | Tensor pos; 77 | Tensor nrm; 78 | Tensor view_pos; 79 | Tensor light_pos; 80 | Tensor out; 81 | dim3 gridSize; 82 | float min_roughness; 83 | int BSDF; 84 | }; 85 | -------------------------------------------------------------------------------- /data/drag-sampling/render/renderutils/c_src/common.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2020-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 3 | * 4 | * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual 5 | * property and proprietary rights in and to this material, related 6 | * documentation and any modifications thereto. Any use, reproduction, 7 | * disclosure or distribution of this material and related documentation 8 | * without an express license agreement from NVIDIA CORPORATION or 9 | * its affiliates is strictly prohibited. 10 | */ 11 | 12 | #include