Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/blefaudeux/chinoxel
https://github.com/blefaudeux/chinoxel
Last synced: 4 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/blefaudeux/chinoxel
- Owner: blefaudeux
- License: mit
- Created: 2022-01-28T04:45:49.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2022-03-18T05:28:06.000Z (over 2 years ago)
- Last Synced: 2024-07-08T11:33:16.505Z (4 months ago)
- Language: Python
- Size: 15.2 MB
- Stars: 1
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-taichi - Chinoxel - Trying to implement Plenoxels using Taichi. (Applications / **Renderer**)
- awesome-taichi - Chinoxel - Trying to implement Plenoxels using Taichi. (**Renderer**)
README
# chinoxel
Trying to implement [Plenoxels](https://alexyu.net/plenoxels/) using [Taichi](https://docs.taichi.graphics/). Reimplementing from scratch as a comprehension exercise, not looking at the original code. First project with Taichi so a lot of parts may not be very idiomatic..
TODOs:
- [x] General framework (grid/render/compare with views/optimize)
- [x] Handle camera extrinsics
- [x] Interpolate node contributions
- [x] Color buffers
- [x] Propagate rays over depth
- [ ] Manual backward pass implementation (store gradients).
Taichi's autodiff dies on the color interpolation scheme, and on the interestection, which is sparse by nature. May be a better idea to compute the gradients by hand, and store them in a dedicated buffer as the rendering is being done. One possible issue is that the same node can contribute to multiple pixels. Their gradient would differ, and would then need to be traced back to the right node contribution. A naive take is to consider [pixels]x[nodes] gradients, but this would be very sparse and waste tons of memory. Maybe that per-node gradient storage (per pixel) is the better take, at most 4 pixels would be stored there.- [ ] Add some unit tests
- [ ] Handle spherical harmonics in the nodes (or just move to spheres altogether)
- [ ] General speedup (sparsity for instance)