Rex is a web service functioning as the passive rendering supervisor. It just manages connected nodes and reacts to their requests appropriately. Currently, it supports only one client, which is Blender (by using a dedicated add-on which will be released in the future).
The project was part of the Bachelor's thesis on how to improve rendering times by using the distributed network.
In current state it only handles animation projects (there is a plan to extend this to scenes and more complex configurations).
Everything is managed through Blender plug-in, including starting rendering project. This is a subject to change, as Blender plug-in is highly inconvenient and hard to maintain.
As for now, client can:
- start a project,
- join the network,
- send the rendered fragment,
- ask for next task.
Rex can also restore its state after restart - right now this is partially made and it will be extended.
Rex uses Phoenix Channels to handle most of node communication. Sometimes direct HTTP call is used, for example sending a project to the supervisor.
Rex uses umbrella project structure and it contains two main modules: RexData and RexWeb.
If you would like to run the very-alpha version of the Rex, you would need:
- Elixir (at least 1.9.4),
- docker
- docker-compose.
Both docker
and docker-compose
are used to start the PostgreSQL database, which is used to provide persistence for the supervisor.
You can also start your database locally and just tweak the values in the .env
file.
After having dependencies installed, you need to do a few simple steps before starting it up:
- Create
.env
file using provided.env.example
, - Run mix
deps.get
inside the root project directory, - Start the database by running
docker-compose up -d
. - Run migrations
mix ecto.migrate
Then you can start the web service by issuing the mix phx.server
and it will be available on the localhost:4000
.
I prefer the VS Code
as the main editor along with these plugins for Elixir dev:
- ElixirLS Fork: Elixir support and debugger,
- hex.pm IntelliSense.
The project also uses dialyxir
and the credo
for linting and formatting purposes. You can run those by issuing below commands:
mix dialyzer
mix credo