Renderfarm.js - server side photorealistic rendering of threejs scenes

Hi Immugio,
thanks for feedback! See, the service is essentially two computers:

  • backend server, any Linux distribution, sufficient to have 2 cores and 4gb ram,
  • render server(s), any number of servers, may be located in different places. This part mainly depends on what you render, how fast you expect results and how many parallel requests you need to handle.

Currently I run one test environment on Ryzen 7 3700X, which is of course not enough, but good to start.

You will need to take care about licenses too:

  • 1 Windows license,
  • 1 Vray license,
  • 1 3dsmax license.

In my case, I rent Vray license on monthly basis, and use legacy 3dsmax 2018 which I have since my past projects.

The setup is expensive, I plan to switch to Blender and Octane render in future.

Any reason not to use Arnold instead?

Fair question. As for now, it is possible to switch to any 3dsmax renderer. I use vray just because I’m too much addict to it :slight_smile:

I will proceed describing project features:

  • it can watch and kill (and restart) rendering processes that do not respond, or consume more ram than allowed,
  • it does load balancing, the render job will be assigned to server with least cpu load,
  • it had basic support for distribute rendering, to process 1 request with 2 and more render nodes

Can’t argue with that, it gives beautiful results. I asked since you mentioned this is expensive. Vray is what, $1000/year? While Arnold is free with Max. Not sure if the free license extends to network rendering though.

EDIT: I checked, the free license is for “within an interactive Max instance”, so presumably that doesn’t include network rendering. But I think you would just need a single user license which is EUR320/year.

Vray is “only” €340 annually. It’s not awful expensive compared to server colocation and/or electricity costs. But anyway, this Vray is one of possible solutions. I’m really going to shift to gpu rendering and Blender soon.

1 Like

This sounds cool, see also this experiment I did (not automated, but relatively easy to automate):

It used the GLTF Exporter from threejs which then imported into blender. The advantage of this approach was that it saves on license fees.


That’s really good alternative, I wonder how I did not see your post before O_o
Have you been using binary Gltf for this?

What I learned, - no matter how long it takes to render, if you can’t upload the scene fast enough.

@webprofusion You approach is good in the way that it doesn’t require buying any licences. The rendering seem to be taking forever though. Out of interest, how long did it take you to render the guitar scene in your setup?

I think a Blender Cycles render took about 3 minutes or thereabouts, depends on the output size etc.

There’s the way to do progressive rendering with some time limit. Then it will be guaranteed picture after some minutes, but can be too noisy.

Introducing live demo of three.js editor integration:

Upload fails. What is the current limit?

Screen Shot 2020-02-25 at 14.09.28

log says there are a bunch of uploads of… 508 bytes??

ok, this time it did finish, but I do not see my iron man. do I need to add a camera or something?

pls share the file, have to check

please enable issues in your github repo, I will upload there. this forum caps at 4MB

done. Thanks for so prompt feedback!!

Fixed now.
Your GLTF file had Bones and SkinnedMesh objects, that were ignored. I added support for these types and now it renders. Unfortunately studio file is not good for so large model.

When scale is applied to top most group, it looks better:

It was also mentioned before, but materials are not exported. Mainly because it makes scene upload much longer, but also because of difficulties converting three.js materials into vray materials.

Model with 2M+ vertices is not a problem too:

1 Like

this thread seems to have few good links

1 Like

New Feature: now it is possible to define some (all) material properties for rendering.
Unfortunately, there’s no .userData on three.js material, this is why the solution is not fully flexible at material instancing. Nevertheless, it is a good step toward cloud glTF rendering.

Video available:
Live demo:

JSON Example
  "materialJson": {
    "uuid": "0202-0001",
    "type": "VRayMtl",
    "params": {
      "diffuse": "$.color",
      "diffuse_roughness": "$.roughness",
      "reflection_metalness": "$.metalness",
      "reflection": "color 100 100 100",
      "refraction": "color 40 40 40"

1 Like