[PROJECT] Faster render time

Hello!!

We would like to create an Android App that allows Blender render on phone in parallel with the PC in order to reduce the rendering time(due to the processing power’s increasing of smartphones). Because today’s smartphone GPU are more and more powerful, we believe that we could use this power.

Let’s assume that we could make such a project, would you be interested in helping development?

Thank you !

2 Likes

To be honest, I doubt this is going to work well. Mobile CPUs and GPUs are getting more powerful, but they are not optimized for raytracing and heavy computation in general. Even if you can get it to run reasonably fast there will likely be overheating and disk space / RAM limitations.

Porting Blender (and Cycles) to Android and ARM is a lot of work before you can see any initial results and performance numbers, it does not seem worth the effort to me unless you are confident you have solutions for these challenges.

3 Likes

I agree it’s kind of pointless. Plus there are enough good machines on Sheep it or BURP.
I think a better project would be to develop a new online collaborative renderfarm based on flamenco (and no java applet !) if that’s a doable thing.

i would prefere to see a 3d visualisation tool, with shader compression and auto LOD.but it allready exist solution like blend4web or verge 3d for that so…

Hi.
This question is interesting for me also.
It will be good to get more specified list of steps that should be done to implement rendering (rendering without UI) on Android. So it will be easier to understand efforts and as result cost of feature.

Maybe I’ll be able to find investment…

Mobile devices are not designed for expensive computations like rendering. They are not constructed to deal with heat over an extended time period and the hardware is comparably weak. Overall, mobile devices are definitely not well suited for this task.

3 Likes

No matter how task is hard if it will be split between 10 000 devices.

In such a scenario, the most challenging task is to create an efficient framework that is able to split the rendering among 10000 devices and manage everything. You also would need the infrastructure to handle that. This would be a massive effort on its own.

2 Likes

I agree, splitting rendering on micro tasks and managing these tasks running for sure important and complicated task that for sure should be done. But not in scope of porting to Android.
Porting rendering to Android - it’s another task.

As for me I see such steps:

  1. move (or find out where it’s located) in regular desktop blender project rendering in separate library to be able run rendering without UI and blender.exe - so leave just a part of project that we need for rendering only.
    So we’ll be able to save resources on slave machine (that will execute rendering task)
  2. figure out how to split rendering task on micro tasks and how they (micro task) can be executed on slave (desktop) machine and executing results be collected on master machine as rendered image.
  3. figure out how to not lose animation rules and shaders
  4. figure out how to make render farm client for slave machine that will watch for executing microtasks and make sure that they are not eat to much resources.
  5. porting this (separate rendering) project to Android.

But it will be good to know steps with more details

The first step would be to get Blender compiled for Android, which means build system changes and compiling lots of library dependencies. There are various CMake options to disable functionality that is not needed for an initial test, or never needed for just rendering. Then you can evaluate performance to see if it’s actually useful.

1 Like

If you make it I will be interested in tasting and using it

Well, Apple M1 cpu seems to confirm that ARM processors are indeed going to have a bright future in the desktop market. Maybe Blender, as well as a lot of other apps should think about starting an architectural transition?

Blender already runs fine on ARM, an architectural transition is unnecessary. Programming for these CPUs is very close to Intel/AMD. There’s a few additional optimizations that can be done, but nothing that affects the overall architecture.

The complexity is in making things work on Android, not ARM.

Ah ok, good to know. Sorry for my ignorance

you would need a batman-esque array of phones/the ability to send packets of pixels to render for that to work, which as far as I know would also require handing the phones the entire file, and a big part of blender’s recent performance gains are GPU tech together with vram increases and so on. With smaller vram amounts, if any, they’ll probably be limited to using their normal ram and CPU rendering.

When it comes to phones and blender, I think you could decrease render time through one of two methods
1… auxiliary utility. I don’t think adding a phone CPU will hold a candle to GPU or dedicated CPU rendering… but you CAN increase productivity. an app to send messages about the progress of renders and letting you view ongoing animation renders will allow you to see if a render needs to be stopped early/visualize errors, or even an app-based render manager that allows the computer to render without GUI. That would result in small but noticeable productivity improvements.

2…auxiliary functions processor. there are occasional parts of the rendering pipeline, that I believe require CPU. especially in the areas of denoising and similar. if you could let a separate PC, phone, or similar do all the denoising and functions that don’t require texture data, or post processing, I could imagine noticeable improvements, simply by letting both PC and mobile processor work at 100% on their own (semi unrelated) tasks, you could stand to offload a lot of the between-render work like masking, cryptomatte stuff, or even maybe BVH stuff? super unsure about that last one. all of this would be an impressive feat though, and gains are probably limited to 10% or so unless it’s a super fast render anyway.

Well you can run Blender on an Android phone.
You need termux and install Ubuntu on it (just google ubuntu on termux), and connect to it with vncviewer or smth