{"id":23296056,"url":"https://github.com/zju3dv/EasyVolcap","last_synced_at":"2025-08-22T01:32:35.561Z","repository":{"id":211449068,"uuid":"728582975","full_name":"zju3dv/EasyVolcap","owner":"zju3dv","description":"[SIGGRAPH Asia 2023 (Technical Communications)] EasyVolcap: Accelerating Neural Volumetric Video Research","archived":false,"fork":false,"pushed_at":"2024-09-27T02:03:16.000Z","size":5257,"stargazers_count":667,"open_issues_count":22,"forks_count":45,"subscribers_count":20,"default_branch":"main","last_synced_at":"2024-12-14T09:01:31.922Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zju3dv.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"license","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-12-07T08:53:42.000Z","updated_at":"2024-12-14T07:38:00.000Z","dependencies_parsed_at":"2023-12-29T06:25:00.866Z","dependency_job_id":"a9e53113-e506-45d1-bcac-2e4c2ace7ff8","html_url":"https://github.com/zju3dv/EasyVolcap","commit_stats":null,"previous_names":["zju3dv/easyvolcap"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zju3dv%2FEasyVolcap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zju3dv%2FEasyVolcap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zju3dv%2FEasyVolcap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zju3dv%2FEasyVolcap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zju3dv","download_url":"https://codeload.github.com/zju3dv/EasyVolcap/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230547632,"owners_count":18243227,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-20T07:01:29.706Z","updated_at":"2024-12-20T07:02:45.692Z","avatar_url":"https://github.com/zju3dv.png","language":"Python","funding_links":[],"categories":["3D视觉生成重建","Repos"],"sub_categories":["资源传输下载"],"readme":"\u003cimg src=\"https://github.com/dendenxu/easyvolcap.github.io.assets/assets/43734697/de41df46-25e6-456c-a253-90d7807b2a9a\" alt=\"logo\" width=\"33%\"/\u003e\n\n*****EasyVolcap***: Accelerating Neural Volumetric Video Research**\n\n![python](https://img.shields.io/github/languages/top/zju3dv/EasyVolcap)\n![star](https://img.shields.io/github/stars/zju3dv/EasyVolcap)\n[![license](https://img.shields.io/badge/license-zju3dv-white)](license)\n\n[Paper](https://dl.acm.org/doi/10.1145/3610543.3626173) | [arXiv](https://arxiv.org/abs/2312.06575) | [Example Dataset](https://drive.google.com/file/d/1XxeO7TnAPvDugnxguEF5Jp89ERS9CAia/view?usp=sharing) | [Pretrained Model](https://drive.google.com/file/d/1OFBFxes9kje02RARFpYpQ6SkmYlulYca/view?usp=sharing) | ***[4K4D](https://zju3dv.github.io/4k4d)***\n\n***News***:\n\n- 24.08.06 Multiple feature updates. See [changelog.md](docs/misc/changelog.md).\n- 24.02.27 [***4K4D***](https://zju3dv.github.io/4k4d) has been accepted to CVPR 2024.\n- 23.12.13 ***EasyVolcap*** will be presented at SIGGRAPH Asia 2023, Sydney.\n- 23.10.17 [***4K4D***](https://zju3dv.github.io/4k4d), a real-time 4D view synthesis algorithm developed using ***EasyVolcap***, has been made public.\n\n***EasyVolcap*** is a PyTorch library for accelerating neural volumetric video research, particularly in areas of **volumetric video capturing**, reconstruction, and rendering.\n\nhttps://github.com/zju3dv/EasyVolcap/assets/43734697/14fdfb46-5277-4963-ba75-067ea574c87a\n\n## Installation\n\n### Install Using `pip`\n\nInstall only the core dependencies for running the viewer locally:\n\n```shell\n# Editable install, with dependencies from requirements.txt\npip install -v -e . \n```\n\nOn Windows or older versions of Linux, you might end up with a CPU-only PyTorch installation by only running the above command since only the CPU version for Windows is available on PyPI ([more info](https://github.com/pmeier/light-the-torch?tab=readme-ov-file#why-do-i-need-it)).\n\nTo install a cuda-enabled PyTorch, append the above command with an extra search link:\n\n```shell\npip install -v -e . -f https://download.pytorch.org/whl/torch_stable.html\n# also try directly installing PyTorch with pip install torch --index-url https://download.pytorch.org/whl/cu118 or https://download.pytorch.org/whl/cu121 if you're still unable to install a CUDA enabled version of PyTorch, as per suggested on https://pytorch.org/get-started/locally/\n```\n\n### Development Install Using `pip`\n\nOr install all dependencies for development (this requires you to have a valid [CUDA building environment with PyTorch already installed](docs/design/install.md#cuda-related-compilations)).\n\nNote that you can just run these two in tandem to take care of `PyTorch` and `EasyVolcap` before compiling CUDA extensions:\n\n```shell\n# Editable install, with dependencies from requirements-devel.txt\npip install -v -e . # will install from requirements.txt\npip install -v -r requirements-devel.txt\n```\n\n### Updating ***EasyVolcap***\n\nAside from running `git pull`, you might also need to reregister the command lines and code path by running `pip install -e . --no-build-isolation --no-deps` again.\n\nA notable example is when updating to [***4K4D***](https://github.com/zju3dv/4K4D], you're required to rerun the editable install command to use that repository instead of this one.\n\n\n## Examples\n\nIn the following sections, we'll show examples of how to run ***EasyVolcap*** on a small multi-view video dataset with several of our implemented algorithms, including Instant-NGP+T, 3DGS+T, and ENeRFi (ENeRF Improved).\nIn the documentation [`static.md`](docs/misc/static.md), we also provide a complete example of how to prepare the dataset using COLMAP and run the above-mentioned three models using ***EasyVolcap***.\n\nThe example dataset for this section can be downloaded from [this Google Drive link](https://drive.google.com/file/d/1XxeO7TnAPvDugnxguEF5Jp89ERS9CAia/view?usp=sharing). After downloading the example dataset, place the unzipped files inside `data/enerf_outdoor` such that you can see files like:\n- `data/enerf_outdoor/actor1_4_subseq/images`\n- `data/enerf_outdoor/actor1_4_subseq/intri.yml`\n- `data/enerf_outdoor/actor1_4_subseq/extri.yml`\n\nThis dataset is a small subset of the [ENeRF-Outdoor](https://github.com/zju3dv/ENeRF/blob/master/docs/enerf_outdoor.md) dataset released by our team. For downloading the full dataset, please follow the guide in the [link]((https://github.com/zju3dv/ENeRF/blob/master/docs/enerf_outdoor.md)). \n\nBefore running the models, let's first prepare some shell variables for easy access.\n\n```shell\nexpname=actor1_4_subseq\ndata_root=data/enerf_outdoor/actor1_4_subseq\n```\n\n### Inferencing With ENeRFi\n\nhttps://github.com/dendenxu/easyvolcap.github.io.assets/assets/43734697/68401485-85fe-477f-9144-976bb2ee8d3c\n\nhttps://github.com/dendenxu/easyvolcap.github.io.assets/assets/43734697/6d60f2a4-6692-43e8-b682-aa27fcdf9516\n\nThe pre-trained model for ENeRFi on the DTU dataset can be downloaded from [this Google Drive link](https://drive.google.com/file/d/1OFBFxes9kje02RARFpYpQ6SkmYlulYca/view?usp=sharing). After downloading, rename the model to `latest.npz` and place it in `data/trained_model/enerfi_dtu`.\n\n```shell\n# Render ENeRFi with pretrained model\nevc-test -c configs/exps/enerfi/enerfi_${expname}.yaml,configs/specs/spiral.yaml,configs/specs/ibr.yaml runner_cfg.visualizer_cfg.save_tag=${expname} exp_name=enerfi_dtu\n\n# Render ENeRFi with GUI\nevc-gui -c configs/exps/enerfi/enerfi_${expname}.yaml exp_name=enerfi_dtu val_dataloader_cfg.dataset_cfg.ratio=0.5 # 2.5 FPS on 3060\n```\n\nIf more performance is desired:\n\n```shell\n# Slightly worst quality, faster rendering\nevc-gui -c configs/exps/enerfi/enerfi_${expname}.yaml exp_name=enerfi_dtu val_dataloader_cfg.dataset_cfg.ratio=0.5 model_cfg.sampler_cfg.n_planes=32,8 model_cfg.sampler_cfg.n_samples=4,1 # 3.6 FPS on 3060\n```\n\n```shell\n# Fine quality, faster rendering\nevc-gui -c configs/exps/enerfi/enerfi_${expname}.yaml,configs/specs/fp16.yaml exp_name=enerfi_dtu val_dataloader_cfg.dataset_cfg.ratio=0.5 # 3.6 FPS on 3060\n```\n\n```shell\n# Worst quality, fastest rendering\nevc-gui -c configs/exps/enerfi/enerfi_${expname}.yaml,configs/specs/fp16.yaml exp_name=enerfi_dtu val_dataloader_cfg.dataset_cfg.ratio=0.5 model_cfg.sampler_cfg.n_planes=32,8 model_cfg.sampler_cfg.n_samples=4,1 # 5.0 FPS on 3060\n```\n\n*Note that ***EasyVolcap*** supports WebSocket-based server-side rendering.* [More info](docs/design/websocket.md).\n\nTo use the WebSocket-based rendering, append the config `server.yaml` to any of the native rendering commands beginning with `evc-gui`.\n\n```shell\n# Run the rendering server, append `configs/specs/server.yaml` to the config file list\nevc-gui -c configs/exps/enerfi/enerfi_${expname}.yaml,configs/specs/server.yaml exp_name=enerfi_dtu val_dataloader_cfg.dataset_cfg.ratio=0.5 model_cfg.sampler_cfg.n_planes=32,8 model_cfg.sampler_cfg.n_samples=4,1\n```\n\nThen run the viewer in your desired viewing client, tested on Windows, MacOS and Linux.\n\n```shell\n# Separate WebSocket Client parameter and evc parameter with --, for now, the viewer can be configured with evc\n# Replace 10.76.5.252 with your server IP\n# Replace -c configs/datasets/enerf_outdoor/enerf_outdoor.yaml with what ever other config to use\n# The enerf_outdoor.yaml here provides a basic camera setup for the viewer\nevc-ws --host 10.76.5.252 --port 1024 -- -c configs/datasets/enerf_outdoor/enerf_outdoor.yaml viewer_cfg.window_size=\"768,1366\" \n```\n\n### Running Instant-NGP+T\n\n**Note that this example requires you to have `tiny-cuda-nn` installed. [Guide](docs/design/install.md#cuda-related-compilations).**\n\nWe extend Instant-NGP to be time-aware, as a baseline method. With the data preparation completed, we've got an `images` folder and a pair of `intri.yml` and `extri.yml` files, and we can run the l3mhet model.\nNote that this model is not built for dynamic scenes, we train it here mainly for extracting initialization point clouds and computing a tighter bounding box.\nSimilar procedures can be applied to other datasets if such initialization is required.\n\nWe need to write a config file for this model\n1. Write the data-folder-related stuff inside configs/datasets. Just copy and paste [`configs/datasets/enerf_outdoor/actor1_4_subseq.yaml`](configs/datasets/enerf_outdoor/actor1_4_subseq.yaml) and modify the `data_root` and `bounds` (bounding box), or maybe add a camera near-far threshold.\n2. Write the experiment config inside configs/exps. Just copy and paste [`configs/exps/l3mhet/l3mhet_actor1_4_subseq.yaml`](configs/exps/l3mhet/l3mhet_actor1_4_subseq.yaml) and modify the `dataset`-related line in `configs`.\n\n```shell\n# With your config files ready, you can run the following command to train the model\nevc-train -c configs/exps/l3mhet/l3mhet_${expname}.yaml\n\n# Now run the following command to render some output\nevc-test -c configs/exps/l3mhet/l3mhet_${expname}.yaml,configs/specs/spiral.yaml\n\n# And maybe render the model with GUI in lower resolution\nevc-gui -c configs/exps/l3mhet/l3mhet_${expname}.yaml viewer_cfg.render_ratio=0.15\n```\n[`configs/specs/spiral.yaml`](configs/specs/spiral.yaml): please check this file for more details, it's a collection of configs to tell the data loader and visualizer to generate a spiral path by interpolating the given cameras\n\n\n### Running 3DGS+T\n\n**Note that this example requires you to have `diff_gauss` or `diff_gaussian_rasterization` installed. [Guide](docs/design/install.md#cuda-related-compilations).**\n\nhttps://github.com/dendenxu/easyvolcap.github.io.assets/assets/43734697/acd83f13-ba34-449c-96ce-e7b7b0781de4\n\nThe original [3DGS](https://github.com/graphdeco-inria/gaussian-splatting) uses the sparse reconstruction result of COLMAP for initialization.\nHowever, we found that the sparse reconstruction result often contains a lot of floating points, which is hard to prune for 3DGS and could easily make the model fail to converge.\nThus, we opted to use the \"dense\" reconstruction result of our Instant-NGP+T implementation by computing the RGBD image for input views and concatenating them as the input of 3DGS. The script [`volume_fusion.py`](scripts/fusion/volume_fusion.py) controls this process and it should work similarly on all models that support depth output.\n\nThe following script block provides an example of how to prepare an initialization for our 3DGS+T implementation.\n\n```shell\n# Extract geometry (point cloud) for initialization from the l3mhet model\n# Tune image sample rate and resizing ratio for a denser or sparser estimation\npython scripts/fusion/volume_fusion.py -- -c configs/exps/l3mhet/l3mhet_${expname}.yaml val_dataloader_cfg.dataset_cfg.ratio=0.15\n\n# Move the rendering results to the dataset folder\nsource_folder=\"data/geometry/l3mhet_${expname}/POINT\"\ndestination_folder=\"${data_root}/vhulls\"\n\n# Create the destination directory if it doesn't exist\nmkdir -p ${destination_folder}\n\n# Loop through all .ply files in the source directory\nfor file in ${source_folder}/*.ply; do\n    number=$(echo $(basename ${file}) | sed -e 's/frame\\([0-9]*\\).ply/\\1/')\n    formatted_number=$(printf \"%06d\" ${number})\n    destination_file=\"${destination_folder}/${formatted_number}.ply\"\n    cp ${file} ${destination_file}\ndone\n```\n\nOur conventions for storing initialization point clouds:\n- Raw point clouds extracted using Instant-NGP or Space Carving are placed inside the `vhulls` folder. These files might be large. It's OK to directly optimize 3DGS+T on these.\n- We might perform some cleanup of the point clouds and store them in the `surfs` folder.\n  - For 3DGS+T, the cleaned-up point clouds might be easier to optimize since 3DGS is good at growing details but not so good at dealing with floaters (removing or splitting).\n  - For other representations, the cleaned-up point clouds work better than the visual hull (from Space Carving) but might not work so well as the raw point clouds of Instant-NGP.\n\nThen, prepare an experiment config like [`configs/exps/gaussiant/gaussiant_actor1_4_subseq.yaml`](configs/exps/gaussiant/gaussiant_actor1_4_subseq.yaml).\nThe [`colmap.yaml`](configs/specs/colmap.yaml) provides some heuristics for large-scale static scenes. Remove these if you're not planning on using COLMAP's parameters directly.\n\n```shell\n# Train a 3DGS model on the ${expname} dataset\nevc-train -c configs/exps/gaussiant/gaussiant_${expname}.yaml # might run out of VRAM, try reducing densify until iter\n\n# Perform rendering on the trained ${expname} dataset\nevc-test -c configs/exps/gaussiant/gaussiant_${expname}.yaml,configs/specs/superm.yaml,configs/specs/spiral.yaml\n\n# Perform rendering with GUI, do this on a machine with monitor, tested on Windows and Ubuntu\nevc-gui -c configs/exps/gaussiant/gaussiant_${expname}.yaml\n```\n\nThe [`superm.yaml`](configs/specs/superm.yaml) skips the loading of input images and other initializations for network-only rendering since all the information we need is contained inside the trained model.\n\n\n\n## Usage\n\n### Customizing ***EasyVolcap***\n\nMost of the time when we want to build a new set of algorithms on top of the framework, we only have to worry about the actual network itself.\nBefore writing your new volumetric video algorithm, we need a basic understanding of the network's input and output:\n\n**We use Python dictionaries for passing in and out network input and output.**\n\n1. The `batch` variable stores the network input you sampled from the dataset (e.g. camera parameters).\n2. The `output` key of the `batch` variable should contain the network output. For each network module's output definition, please refer to the [design documents](docs/design/main.md) for them (`camera`, `sampler`, `network`, `renderer`) or just see the definitions in [`volumetric_video_model.py`](easyvolcap/models/volumetric_video_model.py) (the `render_rays` function).\n\n\u003c!-- There are generally two ways of developing a new algorithm: --\u003e\n**We support purely customized network construction \u0026 usage and also a unified NeRF-like pipeline.**\n\n1. If your new network model's structure is similar to NeRF-based ones (i.e. with the separation of `sampler`, `network` and `renderer`), you can simply swap out parts of the [`volumetric_video_network.py`](easyvolcap/models/networks/volumetric_video_network.py) by writing a new config to swap the `type` parameter of the `***_cfg` dictionaries.\n2. If you'd like to build a completely new network model: to save you some hassle, we grant the `sampler` classes the ability to directly output the core network output (`rgb_map` stored in `batch.output`). Define your rendering function and network structure however you like and reuse other parts of the codebase. An example: [`gaussiant_sampler.py`](easyvolcap/models/samplers/gaussiant_sampler.py).\n\n- [ ] TODO: Replace the custom sampler with a custom network, an example: `TemporalForestGaussianSplatting`\n\n**A miminal custom module using all other ***EasyVolcap*** components should look something like this:**\n\n```python\nfrom easyvolcap.engine import SAMPLERS\nfrom easyvolcap.utils.net_utils import VolumetricVideoModule\nfrom easyvolcap.utils.console_utils import *\n\n@SAMPLERS.register_module() # make the custom module callable by class name\nclass CustomVolumetricVideoModule(VolumetricVideoModule):\n    def __init__(self,\n                 network, # ignore noop_network\n                 ... # configurable parameters\n                 ):\n        # Initialize custom network parameters\n        ...\n    \n    def forward(self, batch: dotdict):\n        # Perform network forwarding\n        ...\n\n        # Store output for further processing\n        batch.output.rgb_map = ... # store rendered image for loss (B, N, 3)\n```\n\nIn the respective config, select this module with:\n\n```yaml\nmodel_cfg:\n    sampler_cfg:\n        type: CustomVolumetricVideoModule\n```\n\n\n### Dataset Structure\n\n```shell\ndata/dataset/sequence # data_root \u0026 data_root\n├── intri.yml # required: intrinsics\n├── extri.yml # required: extrinsics\n└── images # required: source images\n    ├── 000000 # camera / frame\n    │   ├── 000000.jpg # image\n    │   ├── 000001.jpg # for dynamic dataset, more images can be placed here\n    │   ...\n    │   ├── 000298.jpg # for dynamic dataset, more images can be placed here\n    │   └── 000299.jpg # for dynamic dataset, more images can be placed here\n    ├── 000001\n    ├── 000002\n    ...\n    ├── 000058\n    └── 000059\n```\n\n***EasyVolcap*** is designed to work on the simplest data form: `images` and no more. The key data preprocessing are done in the `dataloader` and `dataset` modules. These steps are done in the data loader's initialization\n1. We might correct the camera pose with their center of attention and world-up vector (`dataloader_cfg.dataset_cfg.use_aligned_cameras=True`).\n2. We undistort read images from the disk using the intrinsic poses and store them as jpeg bytes in memory.\n\n### Importing ***EasyVolcap***\n\n***EasyVolcap*** now supports direct import from other locations and code bases.\nAfter installing, you can not only directly use utility modules and functions from `easyvolcap.utils`, but also import and build upon our core modules and classes.\n\n```python\n# Import the logging and debugging functions\nfrom easyvolcap.utils.console_utils import * # log, tqdm, @catch_throw\nfrom easyvolcap.utils.timer_utils import timer  # timer.record\nfrom easyvolcap.utils.data_utils import export_pts, export_mesh, export_npz\n...\n\n# Import the OpenGL-based viewer and build upon it\nfrom easyvolcap.runners.volumetric_video_viewer import VolumetricVideoViewer\n\nclass CustomViewer(VolumetricVideoViewer):\n    ...\n```\nThe import will work when actually running the code, but it might fail since some of the autocompletion modules [is not fully compatible with the newest editable install](https://code.visualstudio.com/docs/python/editing#_importresolvefailure).\n\nIf you see warnings when importing ***EasyVolcap*** in your editor like VSCode, you might want to add the path of your ***EasyVolcap*** codebase to the `python.autoComplete.extraPaths` and `python.analysis.extraPaths` like this:\n\n```json\n{\n    \"python.autoComplete.extraPaths\": [\"/home/zju3dv/code/easyvolcap\"],\n    \"python.analysis.extraPaths\": [\"/home/zju3dv/code/easyvolcap\"]\n}\n```\n\nAnother solution is to replace the installation command of ***EasyVolcap*** with a compatible one [using a compatible editable install](https://microsoft.github.io/pyright/#/import-resolution?id=editable-installs):\n\n```shell\npip install -e . --no-build-isolation --no-deps --config-settings editable_mode=compat\n```\n\nNote that this is [marked deprecated in the PEP specification](https://setuptools.pypa.io/en/latest/userguide/development_mode.html#legacy-behavior). Thus our recommendation is to change the setting of your editor instead.\n\n### New Projects With ***EasyVolcap***\n\nIf you're interested in developing or researching with ***EasyVolcap***, the recommended way is to fork the repository and modify or append to our source code directly instead of using ***EasyVolcap*** as a module.\n\nAfter cloning and forking, add [https://github.com/zju3dv/EasyVolcap](https://github.com/zju3dv/EasyVolcap) as an `upstream` if you want to receive updates from our side. Use `git fetch upstream` to pull and merge our updates to ***EasyVolcap*** to your new project if needed. The following code block provides an example of this development process.\n\nOur recent project [4K4D](https://github.com/zju3dv/4K4D) is developed in this fashion.\n\n```shell\n# Prepare the name and GitHub repo of your new project\nproject=4K4D\nrepo=https://github.com/zju3dv/${project}\n\n# Clone EasyVolcap and add our repo as an upstream\ngit clone https://github.com/zju3dv/EasyVolcap ${project}\n\n# Setup the remote of your new project\ngit set-url origin ${repo}\n\n# Add EasyVolcap as an upstream\ngit remote add upstream https://github.com/zju3dv/EasyVolcap\n\n# If EasyVolcap updates, fetch the updates and maybe merge with it\ngit fetch upstream\ngit merge upstream/main\n```\n\nNevertheless, we still encourage you to read on and possibly follow the tutorials in the [Examples](#examples) section and maybe read our design documents in the [Design Docs](#design-docs) section to grasp an understanding of how ***EasyVolcap*** works as a project.\n\n\n## Documentations\n\n- [ ] Documentations are still WIP. We'll gradually add more guides and examples, especially regarding the usage of ***EasyVolcap***'s various systems.\n\n### Design Docs\n\nThe documentation contained in the [`docs/design`](docs/design) directory contains explanations of design choices and various best practices when developing with ***EasyVolcap***.\n\n[`docs/design/main.md`](docs/design/main.md): Gives an overview of the structure of the ***EasyVolcap*** codebase.\n\n[`docs/design/config.md`](docs/design/config.md): Thoroughly explains the commandline and configuration API of ***EasyVolcap***.\n\n[`docs/design/logging.md`](docs/design/logging.md): Describes the functionalities of the logging system of ***EasyVolcap***.\n\n[`docs/design/dataset.md`](docs/design/dataset.md)\n\n[`docs/design/model.md`](docs/design/model.md)\n\n[`docs/design/runner.md`](docs/design/runner.md)\n\n[`docs/design/viewer.md`](docs/design/viewer.md)\n\n### Project Docs\n\n### Misc Docs\n\n## Acknowledgments\n\nWe would like to acknowledge the following inspiring prior work:\n\n- [EasyMocap: Make Human Motion Capture Easier](https://github.com/zju3dv/EasyMocap)\n- [XRNeRF: OpenXRLab Neural Radiance Field (NeRF) Toolbox and Benchmark](https://github.com/openxrlab/xrnerf)\n- [Nerfstudio: A Modular Framework for Neural Radiance Field Development](https://github.com/nerfstudio-project/nerfstudio)\n- [Dear ImGui: Bloat-Free Graphical User Interface for C++ With Minimal Dependencies](https://github.com/ocornut/imgui)\n- [Neural Body: Implicit Neural Representations with Structured Latent Codes](https://github.com/zju3dv/neuralbody)\n- [ENeRF: Efficient Neural Radiance Fields for Interactive Free-Viewpoint Video](https://github.com/zju3dv/ENeRF)\n- [Instant Neural Graphics Primitives with a Multiresolution Hash Encoding](https://github.com/NVlabs/instant-ngp)\n- [3D Gaussian Splatting for Real-Time Radiance Field Rendering](https://github.com/graphdeco-inria/gaussian-splatting)\n\n## License\n\n***EasyVolcap***'s license can be found [here](license).\n\nNote that the license of the algorithms or other components implemented in ***EasyVolcap*** might be different from the license of ***EasyVolcap*** itself. You will have to install their respective modules to use them in ***EasyVolcap*** following the guide in the [installation section](#installation).\n\nPlease refer to their respective licensing terms if you're planning on using them. For example, ***EasyVolcap***'s [own implementation of the hash embedding module](easyvolcap/models/networks/embedders/hash_embedder.py) is under the same license as ***EasyVolcap***. However, the imported `tiny-cuda-nn` package in the importing implementation is under the same license as the original Instant-NGP paper.\n\nAll imported modules (as specified in the [requirement files](requirements.txt) or in the source code itself) are under their respective licenses. Please refer to their respective repositories for more information.\n\n## Citation\n\nIf you find this code useful for your research, please cite us using the following BibTeX entry. \nIf you used our implementation of other methods, please also cite them separately.\n\n```bibtex\n@article{xu2023easyvolcap,\n  title={EasyVolcap: Accelerating Neural Volumetric Video Research},\n  author={Xu, Zhen and Xie, Tao and Peng, Sida and Lin, Haotong and Shuai, Qing and Yu, Zhiyuan and He, Guangzhao and Sun, Jiaming and Bao, Hujun and Zhou, Xiaowei},\n  booktitle={SIGGRAPH Asia 2023 Technical Communications},\n  year={2023}\n}\n\n@article{xu20234k4d,\n  title={4K4D: Real-Time 4D View Synthesis at 4K Resolution},\n  author={Xu, Zhen and Peng, Sida and Lin, Haotong and He, Guangzhao and Sun, Jiaming and Shen, Yujun and Bao, Hujun and Zhou, Xiaowei},\n  booktitle={arXiv preprint arXiv:2310.11448},\n  year={2023}\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzju3dv%2FEasyVolcap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzju3dv%2FEasyVolcap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzju3dv%2FEasyVolcap/lists"}