Git Product home page Git Product logo

atlasfoundation / volumetric Goto Github PK

View Code? Open in Web Editor NEW
12.0 4.0 1.0 237.61 MB

The open source Universal Volumetric (".uvol") compressed interchange format for streaming mesh sequences. This project also includes a cross-platform player implementation using h.264 video for texture.

License: MIT License

C++ 52.30% C 0.03% Shell 0.27% JavaScript 18.18% QMake 0.42% Python 4.41% TypeScript 5.61% Java 3.88% GLSL 0.17% CMake 0.79% HTML 8.25% C# 5.69%

volumetric's Introduction

Universal Volumetric

The open source Universal Volumetric (".uvol") compressed interchange format for streaming mesh sequences. This project includes a cross-platform player implementation using h.264 video for texture encoding and Draco and Corto compression for GLTF 3D model.

The initial version focuses on performance. Currently, single material mesh sequences of any length are supported. The next version will focus on higher compression ratio, streamability and integration into USD and glTF.

The current implementation uses the MIT-licensed Corto codec from CNR-ISTI Visual Computing Group, which has fast compression and especially fast decompression characteristics.

Collaborators Wanted!

If you are proficient in C++, python, JS, Unity/C#, or you want to support this project creatively or financially, please get in touch!

Example

This tech was built in partnership with Wild Capture and others.

You can see an example on Wild Capture's site, here: http://wildcapture.co/volumetric.html

Current uvol files consist of a .uvol binary, manifest file and video texture. Future versions will embed everything into the uvol binary or in a single MP4 container.

Currently playback works in WebGL with three.js and Unity. Android and iOS are in development, Unreal support is on the roadmap (intrepid C++ developers should be able to port this in a day by reading the source from other examples, since the core codec is C++ based).

Requirements

For encoding, you will need Node.js 12+ and Python 3 installed.

For decoding, currently WebGL is supported (especially three.js), Unreal and Unity will come in the next release.

You will need a mesh and texture sequence in OBJ/PNG or OBJ/PLY.

Encoded .uvol files are cross platform, but currently the decoder is written for the web only.

Encoding

Mesh

First, you need a .ply sequence. If you have a .obj sequence, you can convert to to ply using this command:

bash src/encoder/make_plys.sh

Next, put your ply files in the src/encoder/encode folder. If you want to change this path, you can do so by modifying Encoder.js (NOTE: this will be moved to an argument in the next version).

Run the encoder on the meshes:

node ./src/Encoder.js example.uvol

If you want to set a specific framerange or frame rate, you can set that as well

// Extended Example: 25 FPS, 500 frames
node ./src/Encoder.js example.uvol 25 0 499

Texture

Texture is stored as an H264 video.

Due to inadequacies in iOS frame sync (as well as multithreaded framesync issues in Unity) we are baking the frame number directly into the texture. This frame sync is 8px high, 128px wide. After some experimentation, we found that this is resistant to aliasing and macroblocking in video. However, it might cause issues with your textures unless you pre-process your textures be offset by 8 px from the bottom of your image. The next version will autoscale your UVs to have 8px available at the bottom.

Encoding frame counter to texture

python3 src/encoder/texture_encoder.py

Encoding image sequence to MP4

ffmpeg -r 30 -s 1024x1024 -i src/encoder/encode/tex%05d.png -vcodec libx264 -crf 25 example.mp4

volumetric's People

Contributors

renovate-bot avatar lalalune avatar mrhegemon avatar speigg avatar dindin0497 avatar xiani avatar hexafield avatar betsukelig avatar

Stargazers

Lou Punit avatar 조윤지 avatar Mingliu Sun avatar Brynjard Øvergård avatar @Mtv969 avatar Dirrogate avatar 林振超 avatar Cao Fang avatar The_Archive avatar Kyle Grant avatar  avatar Enrico Speranza avatar

Watchers

@Mtv969 avatar Dirrogate avatar  avatar Kyle Grant avatar

Forkers

thedarknexus

volumetric's Issues

Any help for artistes / non coders?

I updated the issues here: EtherealEngine/Universal-Volumetric#164 (comment)
This looks promising but is not complete and contains outdated info... it references UVOL and the other repo on XRFoundation calls it DRCS...
The unity demo there does not work, neither is there one in this repo, nor a work-flow for WebGL/webpage.

Keenly following, but as a non-coder can only hope for updates.
Regards.

What about capture?

This looks incredible. Does this support or will it support volumetric capture assets as a starting point? Can I help?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.